@flopay/react 1.8.15 → 1.8.16
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/dist/index.cjs +8 -8
- package/dist/index.mjs +8 -8
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
"use strict";var Gs=Object.create;var Vo=Object.defineProperty;var Js=Object.getOwnPropertyDescriptor;var Xs=Object.getOwnPropertyNames;var Zs=Object.getPrototypeOf,Qs=Object.prototype.hasOwnProperty;var el=(e,t)=>{for(var n in t)Vo(e,n,{get:t[n],enumerable:!0})},Di=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Xs(t))!Qs.call(e,o)&&o!==n&&Vo(e,o,{get:()=>t[o],enumerable:!(r=Js(t,o))||r.enumerable});return e};var Li=(e,t,n)=>(n=e!=null?Gs(Zs(e)):{},Di(t||!e||!e.__esModule?Vo(n,"default",{value:e,enumerable:!0}):n,e)),tl=e=>Di(Vo({},"__esModule",{value:!0}),e);var nc={};el(nc,{DirectPayPalButton:()=>wo,FloPayAutomaticPaymentButton:()=>Rs,FloPayCardSetup:()=>Ts,FloPayCardSetupError:()=>Bo,FloPayCheckout:()=>ua,FloPayProvider:()=>Io,SplitCardForm:()=>sa,VaultCardFields:()=>eo,dropThirdPartyOnlyError:()=>xs.dropThirdPartyOnlyError,useCheckout:()=>Vi,useFloPay:()=>lr,usePayPalFloPay:()=>Yo});module.exports=tl(nc);var xs=require("@flopay/shared");var pa=require("@flopay/js"),En=require("@flopay/shared"),Ue=require("react");var _t=require("react/jsx-runtime");function nl(){return(0,_t.jsxs)(_t.Fragment,{children:[(0,_t.jsxs)("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,_t.jsx)("rect",{width:"20",height:"14",x:"2",y:"5",rx:"2"}),(0,_t.jsx)("line",{x1:"2",x2:"22",y1:"10",y2:"10"})]}),"Credit / Debit Card",(0,_t.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"#9ca3af",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{position:"absolute",right:"1rem"},"aria-hidden":"true",children:(0,_t.jsx)("path",{d:"M9 18l6-6-6-6"})})]})}function rl(){return(0,_t.jsx)(_t.Fragment,{children:"Go back"})}function ol(){return(0,_t.jsx)(_t.Fragment,{children:"Secure card checkout"})}function qr(e){return e!==void 0&&(e===""||e===null||e===!1)}function $r({content:e}){return(0,_t.jsx)(_t.Fragment,{children:e===void 0?(0,_t.jsx)(nl,{}):e})}function jr({content:e}){return(0,_t.jsx)(_t.Fragment,{children:e===void 0?(0,_t.jsx)(rl,{}):e})}function ho({content:e}){return(0,_t.jsx)(_t.Fragment,{children:e===void 0?(0,_t.jsx)(ol,{}):e})}var ar=require("@flopay/shared");function Vr(e,t,n,r={}){let o;return(i={})=>{if(o)return o;let d={...r,...i,email:i.email?.trim()||r.email?.trim()};if(!(0,ar.isValidEmail)(d.email))return Promise.reject(new ar.FloPayError("A valid buyer email is required before claiming checkout.","validation_error",{code:"BuyerEmailCollectionRequired",param:"account.email"}));let c={};for(let[C,y]of Object.entries(d)){if(typeof y!="string")continue;let b=y.trim();b&&(c[C]=b)}return o=e.claimCheckoutSession(t,n,{accountData:c}),o.catch(()=>{}),o}}function Ni(e,t){return t?e?{account:{...e.account??{},...t.account??{}},couponCodes:t.couponCodes??e.couponCodes,..."checkoutMetadata"in t?{checkoutMetadata:t.checkoutMetadata}:"checkoutMetadata"in e?{checkoutMetadata:e.checkoutMetadata}:{},tagsData:{...e.tagsData??{},...t.tagsData??{}},utmMetadata:t.utmMetadata??e.utmMetadata}:t:e}function xa(e,t){return t?{...e,account:{...e.account,...t.account??{}},couponCodes:t.couponCodes??e.couponCodes,..."checkoutMetadata"in t?{checkoutMetadata:t.checkoutMetadata}:{},tagsData:{...e.tagsData??{},...t.tagsData??{}},utmMetadata:t.utmMetadata??e.utmMetadata}:e}function Oi(e,t){let n=e.products??[...(e.subscriptions??[]).map(i=>({type:"subscription",code:i.code??i.providerPlanId,name:i.subscriptionName??i.providerPlanName??i.code??i.providerPlanId??null,quantity:i.quantity??1,totalAmount:i.totalAmount,overrideAmount:i.overrideAmount,currency:i.currency,metadata:i.metadata})),...(e.items??[]).map(i=>({type:"item",code:i.code??i.providerItemId,name:i.itemName??i.providerItemName??i.code??i.providerItemId??null,quantity:i.quantity??1,totalAmount:i.totalAmount,overrideAmount:i.overrideAmount,currency:i.currency,metadata:i.metadata}))],r=n.reduce((i,d)=>i+(d.overrideAmount??d.totalAmount??0),0),o=e.currency??n.find(i=>i.currency)?.currency??"USD";return{id:"",clientSecret:"",mode:n.some(i=>i.type==="subscription")?"subscription":"payment",amount:Math.round(r*100),currency:o,status:"open",captureMethod:e.captureMethod,customer:{id:e.account.userId,email:e.account.email??"",firstName:e.account.firstName,lastName:e.account.lastName,gender:e.account.gender??void 0,city:e.account.city??void 0,state:e.account.state??void 0,country:e.account.country??void 0,zip:e.account.zip??void 0},successUrl:e.successUrl,cancelUrl:e.cancelUrl,checkoutMode:t??e.checkoutMode??"full",products:n.map((i,d)=>({uuid:`synthetic-${i.type??"item"}-${d}`,checkoutSessionId:"",type:i.type??"item",code:i.code,name:i.name??null,quantity:i.quantity??1,totalAmount:i.totalAmount,overrideAmount:i.overrideAmount??null,currency:i.currency??o,metadata:i.metadata??null}))}}function Er(e){let t=e?.trim().split(/\s+/).filter(Boolean)??[];return t.length===0?{}:{firstName:t[0],lastName:t.length>1?t.slice(1).join(" "):void 0}}function Ma(e,t){return t?{...e,...t}:e}function Kt(e,t,n){let r=typeof t=="string"?t:t.message,o=typeof t=="string"?n?.code:n?.code??t.code,i=typeof t=="string"?n?.declineCode:n?.declineCode??t.declineCode;return{method:e,message:r,...o?{code:o}:{},...i?{declineCode:i}:{}}}var al=[{match:/^paypal authorization required\.?$/i,replacement:"For your additional security, please re-authenticate this payment via PayPal."}];function br(e){if(typeof e!="string")return e??void 0;let t=e.trim();if(!t)return e;for(let{match:n,replacement:r}of al)if(n.test(t))return r;return e}function Rr(e,t){return e.status!=="authorized"?{status:"succeeded"}:{status:"authorized",paymentId:e.paymentId,sessionId:e.id||t||void 0,authorizationExpiresAt:e.authorizationExpiresAt}}function Kr(e){return e?.status==="authorized"||e?.status==="complete"}function zi(e){return e?.status==="expired"&&(e.failureOutcome==="authorization_expired"||e.captureMethod==="manual")}function Ko(e){let t=zi(e);return new ar.FloPayError(t?"Authorization has expired.":"Checkout session has expired.","api_error",{code:t?"authorization_expired":"checkout_session_expired"})}function Ho(e){let t=zi(e);return new ar.FloPayError(t?"Authorization has expired.":"Automatic payment failed. Please try again.","api_error",{code:t?"authorization_expired":e?.status==="expired"?"checkout_session_expired":"checkout_processing_timeout"})}function bo(e,t){return e==="processing"||(0,ar.isMoneySettledOutcome)(e,t)}function Ui(e){return e==="succeeded"?"succeeded":e==="processing"||e==="requires_capture"?"processing":"failed"}function qi(e,t="automatic"){return e&&e>0&&Number.isFinite(e)?{mode:"payment",amount:e,captureMethod:t,setupFutureUsage:"off_session"}:{mode:"setup"}}function vo(e){let t=[e?.id,e?.originalPaymentMethodId];for(let n of t)if(typeof n=="string"&&n.startsWith("pm_"))return n}var Mr=require("@flopay/js"),ve=require("@flopay/shared"),k=Li(require("react"),1);var Aa=require("react"),Fn=(0,Aa.createContext)({flopay:null,paypalFlopay:null,billingApiUrl:""}),Yn=(0,Aa.createContext)({session:null,loading:!1,error:null});var Jo=require("@flopay/js"),Bt=require("@flopay/shared"),Gi=require("@paypal/paypal-js"),x=require("react");var $i=require("@flopay/shared"),Wn=require("react"),ir=require("react/jsx-runtime");function Pn(e){let{firstName:t,lastName:n,...r}=e,o=t?.trim(),i=n?.trim();return{...r,...o?{firstName:o}:{},...i?{lastName:i}:{}}}function Hr(){let[e,t]=(0,Wn.useState)(null),n=(0,Wn.useRef)(null),r=(0,Wn.useRef)(0),o=(0,Wn.useCallback)((d,c)=>(n.current?.(null),r.current+=1,t({id:r.current,methodLabel:d,identity:c}),new Promise(C=>{n.current=C})),[]),i=(0,Wn.useCallback)(d=>{let c=n.current;n.current=null,t(null),c?.(d)},[]);return(0,Wn.useEffect)(()=>()=>{n.current?.(null),n.current=null},[]),{request:e,collect:o,finish:i}}function Yr({identity:e,methodLabel:t,onComplete:n,onCancel:r,submitting:o=!1,testId:i="flopay-buyer-identity-pane"}){let[d,c]=(0,Wn.useState)(e.email?.trim()??""),C=(0,$i.isValidEmail)(d.trim());return(0,ir.jsxs)("div",{"data-testid":i,style:{display:"flex",flexDirection:"column",gap:"0.75rem",padding:"0.875rem",border:"1px solid #d1d5db",borderRadius:8,background:"#fff",color:"#262833"},children:[(0,ir.jsxs)("div",{style:{fontWeight:700},children:["Continue with ",t]}),(0,ir.jsxs)("label",{style:{display:"flex",flexDirection:"column",gap:"0.375rem"},children:["Email address",(0,ir.jsx)("input",{type:"email",autoComplete:"email","data-testid":"flopay-email",required:!0,value:d,onChange:y=>c(y.target.value),style:{minHeight:42,padding:"0 0.75rem",border:"1px solid #d1d5db",borderRadius:6}})]}),(0,ir.jsxs)("div",{style:{display:"flex",gap:"0.5rem"},children:[r&&(0,ir.jsx)("button",{type:"button",onClick:r,style:{flex:1,minHeight:42},children:"Cancel"}),(0,ir.jsxs)("button",{type:"button",disabled:!C||o,onClick:()=>{n(Pn({...e,email:d.trim()}))},style:{flex:2,minHeight:42},children:["Continue with ",t]})]})]})}function il(e){if(e instanceof Error)return e.message;if(typeof e=="object"&&e!==null){let t=e.message;return typeof t=="string"?t:void 0}return typeof e=="string"?e:void 0}function _r(e){if(typeof e!="string")return;let t=e.trim();return/^[a-z0-9_.-]{1,64}$/i.test(t)?t:void 0}function sr(e){if(typeof e!="object"||e===null)return;let t=e;return _r(t.code)??_r(t.type)??_r(t.name)}function Wr(e){if(!(typeof e!="object"||e===null))return _r(e.decline_code)}function Po(e){return typeof e!="object"||e===null?!1:_r(e.type)?.toLowerCase()==="card_error"||Wr(e)!==void 0}function vr(e){let t=il(e)?.toLowerCase()??"",r=`${sr(e)?.toLowerCase()??""} ${t}`;return r.includes("popup")&&r.includes("block")}var ji=require("@flopay/shared"),Co=require("react");function lr(){return(0,Co.useContext)(Fn).flopay}function Yo(){return(0,Co.useContext)(Fn).paypalFlopay??null}function Vi(){return(0,Co.useContext)(Yn)}function Ki(){return(0,Co.useContext)(Fn).billingApiUrl||(0,ji.resolveBillingApiUrl)()}var Hi=require("@flopay/shared"),Tr=require("react");function nt(e){if(!e)return;let t=n=>{console.error("[FloPay] Merchant callback failed; checkout continued.",n)};try{Promise.resolve(e()).catch(t)}catch(n){t(n)}}var Wo=require("react"),So=typeof window>"u"?Wo.useEffect:Wo.useLayoutEffect;var sl={"checkout.mount":"checkout_mount","sdk.initialize.ready":"sdk_loaded","provider.ready":"sdk_loaded","checkout.rendered":"form_rendered","vault.widget.ready":"form_rendered","vault.submission.started":"tokenize","payment.tokenization.started":"tokenize","payment.processing.started":"process_attempt","payment.intent.started":"process_attempt","vault.action.required":"3ds_challenge","payment.three_ds.handoff":"3ds_challenge"};function ll(e){return e==="stripe"||e==="paypal"?e:void 0}function cl(e){let t=ll(e.provider),n={schemaVersion:Hi.FLO_INSTRUMENT_SCHEMA_VERSION,...t?{gateway:t}:{}};if(e.class==="lifecycle"){let r=sl[e.name];return r?{...n,name:r}:null}return e.class==="card_surface"?{...n,name:"card_expanded"}:e.errorCode==="CHECKOUT_SESSION_CREATE_FAILED"?{...n,name:"checkout_error",phase:"session_create"}:e.errorCode==="SDK_INITIALIZATION_FAILED"||e.errorCode==="PROVIDER_LOAD_FAILED"?{...n,name:"checkout_error",phase:"sdk_load"}:e.errorCode==="PAYMENT_PROCESSING_FAILED"?{...n,name:"checkout_error",phase:e.requestCategory==="intent_create"?"wallets":"process"}:null}var Ba=new Set(["checkout_mount","sdk_loaded","form_rendered","card_expanded"]);function Gr(e,t){let n=(0,Tr.useRef)(e);n.current=e;let r=(0,Tr.useRef)(new Set),o=(0,Tr.useRef)(t),i=(0,Tr.useRef)(t);return So(()=>{i.current=t,o.current!==t&&(o.current=t,r.current.clear())},[t]),(0,Tr.useCallback)(d=>{if(i.current!==t)return;let c=cl(d);if(c){if(Ba.has(c.name)){if(r.current.has(c.name))return;r.current.add(c.name)}nt(()=>n.current?.(c))}},[t])}var dl=Symbol.for("@flopay/js.telemetry.bridge.v1"),ul=Symbol.for("@flopay/js.telemetry.reporter-factory.v1");function pl(){return{error:()=>{},log:()=>{},performance:()=>{},terminal:()=>{},now:()=>globalThis.performance?.now()??0,elapsed:e=>Math.max(0,(globalThis.performance?.now()??e)-e),setCheckoutContext:()=>{},beginCheckout:()=>globalThis.performance?.now()??0,disable:()=>{},subscribe:()=>()=>{},flush:async()=>{},destroy:()=>{}}}function ml(e){let t=pl(),n=(o,i)=>o?o.bind(e):i,r=n(e.now,t.now);return{error:n(e.error,t.error),log:n(e.log,t.log),performance:n(e.performance,t.performance),terminal:n(e.terminal,t.terminal),now:r,elapsed:e.elapsed?e.elapsed.bind(e):o=>Math.max(0,r()-o),setCheckoutContext:n(e.setCheckoutContext,t.setCheckoutContext),beginCheckout:n(e.beginCheckout,t.beginCheckout),disable:n(e.disable,t.disable),subscribe:n(e.subscribe,t.subscribe),flush:n(e.flush,t.flush),destroy:n(e.destroy,t.destroy)}}function Go(e){let t=globalThis[ul];return ml(t?.(e)??{})}function jt(e){if(e)return e[dl]}var Dn=require("react/jsx-runtime"),Xo=45,yl=1e3,fl=11e3,gl=["https://www.paypal.com","https://www.sandbox.paypal.com"],Yi="We couldn't open PayPal. Try again or choose another payment method.",hl={width:"100%",minHeight:Xo,margin:"0 0 0.5rem",padding:"0.75rem 0.875rem",border:"1px solid #2563eb",borderRadius:8,background:"#eff6ff",color:"#1d4ed8",fontSize:"0.95rem",fontWeight:700,cursor:"pointer"};function Wi(e){return e.includes("No ack for postMessage init()")&&gl.some(t=>e.includes(t))&&e.includes("10000ms")}function bl(e){return e?`${Yi} Allow pop-ups for this site, then try again.`:Yi}function vl(e){let t=e,n=t?.payer??t?.payment_source?.paypal;return{email:n?.email_address?.trim()||void 0,firstName:n?.name?.given_name?.trim()||void 0,lastName:n?.name?.surname?.trim()||void 0}}function Ji({sessionId:e,nonce:t,billingApiUrl:n,email:r,billingName:o,onBuyerIdentityReady:i,clientId:d,environment:c,currency:C,isSubscription:y,providerObjectType:b,onTokenizedBody:P,onComplete:F,onErrorChange:A,onDecline:m,onTechnicalFailure:S,isProcessing:ye=!1,onLoadStateChange:U,onInitializationStateChange:w,allowAutomaticRetry:ce=!0,onButtonClick:q,runBeforeButtonClick:le,session:Y,existingOrderId:ge,telemetry:qe,telemetryContext:we,onInstrument:Et,debug:Oe=!1}){let Ee=lr(),Re=Gr(Et,e),oe=(0,x.useMemo)(()=>{if(Ee)return null;let T=Go({billingApiUrl:n,sdkPackage:"@flopay/react",sdkVersion:Bt.SDK_VERSION,enabled:qe!==!1});return T.setCheckoutContext(we??{}),T.beginCheckout(we??{}),T},[n,Ee,qe,we?.checkoutMode,we?.layout]),ee=(0,x.useMemo)(()=>jt(Ee),[Ee]);(0,x.useEffect)(()=>()=>{oe&&oe.flush().catch(()=>{}).finally(()=>oe.destroy())},[oe]);let L=(0,x.useMemo)(()=>({error:T=>{ee?ee.error(T):oe?.error(T),Re({class:"technical_error",errorCode:T.requestCategory==="intent_create"?"PAYMENT_PROCESSING_FAILED":T.errorCode,requestCategory:T.requestCategory,provider:T.provider})},log:T=>{ee?ee.log(T):oe?.log(T),Re({class:"lifecycle",name:T.name,provider:T.provider})},performance:T=>{ee?ee.performance(T):oe?.performance(T)},terminal:T=>{ee?ee.terminal(T):oe?.terminal(T)},startTiming:()=>ee?.now()??oe?.now()??0,elapsed:T=>ee?.elapsed(T)??Math.max(0,(oe?.now()??T)-T)}),[Re,ee,oe]),_e=(0,x.useRef)(null),Te=(0,x.useRef)(0),G=(0,x.useRef)(null),Ie=(0,x.useRef)(!1),[Pe,M]=(0,x.useState)(!1),[K,ke]=(0,x.useState)(!1),[be,Q]=(0,x.useState)(0),Be=(0,x.useRef)(0),[it,vt]=(0,x.useState)(!1),Ke=(0,x.useRef)(!1),te=(0,x.useRef)(!1),[$,O]=(0,x.useState)(!1),[He,Je]=(0,x.useState)(!1),{request:fe,collect:st,finish:E}=Hr(),R=(0,x.useRef)({sessionId:e,required:!(0,Bt.isValidEmail)(r?.trim()||Y?.customer?.email?.trim())});R.current.sessionId!==e&&(R.current={sessionId:e,required:!(0,Bt.isValidEmail)(r?.trim()||Y?.customer?.email?.trim())});let De=R.current.required,ue=(0,x.useMemo)(()=>n.replace(/\/+$/,""),[n]),rt=Y?.gateways?.paypal?.providerObjectType??b,Ne=rt??(y?"subscription":"order"),et=rt==="order"||rt==="setup_token",Mt=(0,x.useMemo)(()=>JSON.stringify([ue,d,C,c??"",Ne,et,e,ge??""]),[ue,d,C,c,ge,Ne,et,e]),_=(0,x.useRef)(Mt),J=_.current!==Mt,lt=(0,x.useRef)(Oe),Xe=(0,x.useRef)(null),[Zt,Ht]=(0,x.useState)([]),B=(0,x.useCallback)(T=>{lt.current&&Ht(ut=>[...ut,`${new Date().toISOString().slice(11,23)} ${T}`])},[]);(0,x.useEffect)(()=>{lt.current=Oe,Oe&&B("debug:enabled"),Xe.current?.setEnabled(Oe)},[B,Oe]);let ft=(0,x.useRef)(P),Tt=(0,x.useRef)(F),ct=(0,x.useRef)(A),Rt=(0,x.useRef)(m),dn=(0,x.useRef)(S),rn=(0,x.useRef)(q),un=(0,x.useRef)(U),Dt=(0,x.useRef)(w),Cn=(0,x.useRef)(i),Qt=(0,x.useRef)(le),gt=(0,x.useRef)(Y),dt=(0,x.useRef)(r),ht=(0,x.useRef)(o),on=(0,x.useRef)(t),tt=(0,x.useRef)(null),Jn=(0,x.useRef)(0),pt=(0,x.useRef)(null),en=(0,x.useRef)(null),Pt=(0,x.useRef)(new Map),Yt=(0,x.useRef)(new Map),Sn=(0,x.useRef)(!1);(0,x.useEffect)(()=>(Sn.current=!0,()=>{Sn.current=!1}),[]),(0,x.useEffect)(()=>{ft.current=P},[P]),(0,x.useEffect)(()=>{Cn.current=i},[i]),(0,x.useEffect)(()=>{Tt.current=F},[F]),(0,x.useEffect)(()=>{ct.current=A},[A]),(0,x.useEffect)(()=>{Rt.current=m},[m]),(0,x.useEffect)(()=>{dn.current=S},[S]),(0,x.useEffect)(()=>{rn.current=q},[q]),(0,x.useEffect)(()=>{un.current=U},[U]),(0,x.useEffect)(()=>{Dt.current=w},[w]),(0,x.useEffect)(()=>{Qt.current=le},[le]),(0,x.useEffect)(()=>{gt.current=Y},[Y]),(0,x.useEffect)(()=>{dt.current=r},[r]),(0,x.useEffect)(()=>{ht.current=o},[o]),(0,x.useEffect)(()=>{on.current=t},[t]),(0,x.useEffect)(()=>{Be.current=be},[be]),(0,x.useEffect)(()=>{it&&G.current?.focus()},[it,be]);let pn=(0,x.useCallback)(()=>{window.setTimeout(()=>{G.current?.focus()},0)},[]),_n=(0,x.useCallback)(()=>{M(!1),Q(T=>T+1)},[]),an=(0,x.useCallback)(()=>{vt(!1),(_e.current?.querySelector('iframe, button, [tabindex]:not([tabindex="-1"])')??_e.current)?.focus?.()},[]);(0,x.useEffect)(()=>{!Pe||!Ie.current||(Ie.current=!1,an())},[an,Pe,be]);let Tn=(0,x.useCallback)((T,ut)=>{let Vt=dn.current;if(Vt){Vt("paypal",T,ut);return}ct.current?.(bl(ut?.popupBlocked??vr(T)))},[]),qt=()=>{pt.current?.timer&&(clearTimeout(pt.current.timer),pt.current.timer=null)},ie=()=>{qt();let T=Jn.current+1;return Jn.current=T,en.current=null,pt.current={generation:T,timer:null,yieldedControl:!1},vt(!1),T},mn=T=>T!==void 0&&pt.current?.generation!==T?!1:(qt(),pt.current=null,en.current=null,!0),On=T=>{let ut=T?.generation??pt.current?.generation??Jn.current;(!T?.generation||pt.current?.generation===ut)&&(qt(),pt.current=null),en.current=ut,T?.showRetry&&vt(!0),T?.remount&&_n(),T?.focus!==!1&&pn()},Xn=T=>pt.current?.generation===T&&en.current!==T,Cr=T=>{typeof document<"u"&&document.visibilityState!=="visible"||(qt(),T.timer=setTimeout(()=>{pt.current?.generation===T.generation&&(pt.current=null,en.current=T.generation,Tn(new Error("External payment method returned without a terminal callback."),{code:"external_method_missing_terminal_callback"}),vt(!0),_n(),pn())},600))},Sr=()=>{let T=pt.current;T?.yieldedControl&&Cr(T)},mr=()=>{let T=pt.current;T&&(T.yieldedControl=!0,qt())},Lt=T=>{let ut=tt.current;return ut&&Yt.current.set(T,ut),T};(0,x.useEffect)(()=>{let T=()=>{document.visibilityState==="visible"?Sr():mr()};return document.addEventListener("visibilitychange",T),window.addEventListener("focus",Sr),window.addEventListener("blur",mr),()=>{document.removeEventListener("visibilitychange",T),window.removeEventListener("focus",Sr),window.removeEventListener("blur",mr),qt()}},[]),(0,x.useEffect)(()=>{_.current!==Mt&&(_.current=Mt,Ke.current=!1,te.current=!1,M(!1),ke(!1),O(!1),Dt.current?.("loading"))},[Mt]),(0,x.useEffect)(()=>{nt(()=>un.current?.(Pe&&!$))},[Pe,$]);let Ye=(0,Bt.normalizeGatewayEnvironment)(c);(0,x.useEffect)(()=>{let T=d?`${d.slice(0,6)}\u2026(len ${d.length})`:"(empty)",ut=typeof navigator<"u"?navigator.userAgent:"(no navigator)";if(B(`mount clientId=${T} env=${c??"(unset)"}\u2192${Ye??"live"} ccy=${C} sub=${y}`),B(`ua=${ut.slice(0,80)}${ut.length>80?"\u2026":""}`),!d){B("FAIL: clientId empty \u2014 gateway misconfigured"),O(!0),L.error({errorCode:"CONFIGURATION_INVALID",stage:"provider_load",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk"}),console.error("[FloPay] DirectPayPal: clientId empty \u2014 gateway misconfigured");return}if(!_e.current){B("FAIL: containerRef not attached");return}Te.current=L.startTiming(),L.log({name:"provider.load.started",stage:"provider_load",provider:"paypal",paymentMethodCategory:"paypal"});let Vt=!1,wn=!1,Ce=()=>Vt||wn,sn,wr=!1,Br=()=>{sn=(0,Bt.generateIdempotencyKey)(),sn||console.warn("[FloPay] DirectPayPal: secure idempotency key unavailable; retries may not be deduplicated."),wr=!0},yn=null,fr=!1,Zn=null,zn=!1,Nt=()=>{!Zn||zn||(zn=!0,Zn.close().catch(()=>{}))},Un=null,Qn=()=>{Un!==null&&(L.log({name:"provider.overlay.returned",stage:"overlay_return",provider:"paypal",paymentMethodCategory:"paypal"}),L.performance({stage:"overlay_return",durationMs:L.elapsed(Un),durationMode:"buyer",provider:"paypal",paymentMethodCategory:"paypal"}),Un=null)},fn=!1,tn=_e.current,qn=null,$n=null,mt=[],gn=null,hn=!1,jn=!1,xn=null,xe=g=>{if(!g||typeof g.getBoundingClientRect!="function")return"(no rect)";let p=g.getBoundingClientRect();return`${Math.round(p.width)}\xD7${Math.round(p.height)}`},nn=g=>{if(!g)return"(empty)";try{let p=new URL(g,typeof window<"u"?window.location.href:"https://localhost"),v=p.pathname.toLowerCase();return v.includes("checkcaptcha")||v.includes("captcha")?`CAPTCHA(${p.host}${v})`:v.includes("risk")||v.includes("challenge")?`RISK(${p.host}${v})`:v.includes("smart/buttons")?`smart-buttons(${p.host})`:`${p.host}${v}`.slice(0,100)}catch{return g.slice(0,80)}},Ot=g=>{let p=g.getAttribute("src"),v=g.getAttribute("srcdoc"),Se=g.getAttribute("name"),pe=g.getAttribute("sandbox"),We=[];return p&&We.push(`src=${nn(p)}`),v&&We.push(`srcdoc[${v.length}ch]`),!p&&!v&&We.push("src=(empty) srcdoc=(empty)"),Se&&We.push(`name=${Se.slice(0,40)}`),pe!==null&&We.push(`sandbox="${pe.slice(0,40)}"`),We.join(" ")},gr=g=>{if(!(g instanceof HTMLIFrameElement))return"";try{let p=g.contentDocument;if(!p)return"cd=null";let v=p.body?.children.length??0,Se=p.body?.innerHTML.length??0,pe=p.head?.innerHTML.length??0;return`cd=same-origin readyState=${p.readyState} body[${v}children,${Se}ch] head[${pe}ch]`}catch(p){return`cd=cross-origin(${p.message.slice(0,30)})`}},Vn=[],hr=g=>{if(Ce())return;let p=g.message??String(g.error??"(no message)");p&&(p.toLowerCase().includes("paypal")||p.toLowerCase().includes("zoid")||p.toLowerCase().includes("postrobot")||p.toLowerCase().includes("storage"))&&(B(`window:error ${p.slice(0,140)}`),Vn.push(p))},kn=g=>{if(Ce())return;let p=g.reason instanceof Error?g.reason.message:String(g.reason??"(no reason)");p&&(p.toLowerCase().includes("paypal")||p.toLowerCase().includes("zoid")||p.toLowerCase().includes("postrobot")||p.toLowerCase().includes("storage"))&&(B(`window:rejection ${p.slice(0,140)}`),Vn.push(p))},Mn={value:0},zt=()=>{for(qn?.disconnect(),qn=null,$n?.disconnect(),$n=null;mt.length;)clearTimeout(mt.pop());jn=!1,hn&&typeof window<"u"&&(window.removeEventListener("error",hr),window.removeEventListener("unhandledrejection",kn)),hn=!1},N=()=>{if(!(hn||Ce()||fn)){if(hn=!0,Vn.length=0,Mn.value=0,typeof window<"u"&&(window.addEventListener("error",hr),window.addEventListener("unhandledrejection",kn)),typeof PerformanceObserver<"u")try{$n=new PerformanceObserver(g=>{if(!Ce())for(let p of g.getEntries()){if(!p.name.toLowerCase().includes("paypal"))continue;Mn.value+=1;let v=Math.round(p.duration);B(`net ${v}ms ${p.name.slice(0,90)}`)}}),$n.observe({type:"resource",buffered:!0})}catch{}xn?.()}},j=()=>{gn&&(clearTimeout(gn),gn=null)},ne=()=>{zt(),j()},re={setEnabled:g=>{g?N():zt()}};Xe.current=re,lt.current&&N();let Me=g=>{if(!g)return!1;let p=g.toLowerCase();return p.includes("zoid destroyed")||p.includes("destroyed all components")||p.includes("window closed")||p.includes("detected container element removed")},z=g=>{if(Ce()||Me(g))return;let p=br(g)??g;nt(()=>ct.current?.(p))},X=g=>{Vt||(O(!0),g.includes("paypal_ineligible")||L.error({errorCode:"PROVIDER_LOAD_FAILED",stage:"provider_load",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk",failureCategory:"provider_runtime"}),console.error("[FloPay] DirectPayPal load/render failure:",g))},f=(g,p=!1)=>{if(Vt)return;let v=Ke.current||!ce;if(fr)return;fr=!0,wn=!0,ne(),Nt();let Se=p||Wi(g);if(Se&&ce&&!Ke.current){Ke.current=!0,M(!1),Je(!1),ke(!0),Dt.current?.("retrying"),yn=setTimeout(()=>{Vt||Q(pe=>pe+1)},yl);return}if(Se||v){if(M(!1),Je(!1),ke(!1),O(!0),Dt.current?.("exhausted"),!te.current){te.current=!0;let pe=Wi(g)?"paypal_init_timeout":p?"paypal_render_timeout":"paypal_init_failure";console.error("[FloPay] Direct PayPal initialization failed:",pe)}return}X(g)};O(!1);let H=async(g,p=tt.current)=>{if(Ce())return;let v=p?.sessionId??e;if(ft.current){await ft.current(g,{sessionId:v,accountPatch:p?.accountPatch,nonce:p?.nonce});return}let Se=L.startTiming();L.log({name:"payment.processing.started",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"});let pe=()=>{L.log({name:"payment.processing.completed",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"}),L.performance({stage:"processing",durationMs:L.elapsed(Se),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"})};try{let We=gt.current,Ze=p?.accountPatch?.email??dt.current,se=p?.accountPatch?.userId??We?.customer?.id??We?.accountData?.userId??"",D=p?.accountPatch?.firstName??We?.customer?.firstName??We?.accountData?.firstName,me=p?.accountPatch?.lastName??We?.customer?.lastName??We?.accountData?.lastName,$e=await new Jo.PaymentAPI(ue,{telemetry:!1}).processPayment(se,{sessionId:v,nonce:p?.nonce??on.current,paymentMethodCategory:"paypal",tokenizedData:g,accountData:{userId:se,email:Ze??We?.customer?.email??"",...D?{firstName:D}:{},...me?{lastName:me}:{},country:p?.accountPatch?.country??We?.customer?.country??We?.accountData?.country??void 0,zip:p?.accountPatch?.zip??We?.customer?.zip??We?.accountData?.zip??void 0}});if($e.ok){if(wn||Vt&&Sn.current)return;pe(),L.terminal({outcome:"payment_succeeded",provider:"paypal",paymentMethodCategory:"paypal"}),nt(()=>Tt.current?.({status:"succeeded",checkoutMethod:"paypal"}));return}if(Ce())return;let St=await $e.json().catch(()=>null),je=St?.message??"PayPal payment failed.",$t=br(je)??je;pe(),$e.status===400&&(typeof St?.declineCode=="string"||!Array.isArray(St?.fields))?L.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal"}):$e.status===400||$e.status===422?L.terminal({outcome:"validation_rejected",provider:"paypal",paymentMethodCategory:"paypal",statusClass:"4xx"}):L.error({errorCode:"PAYMENT_PROCESSING_FAILED",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"process_payment",statusClass:$e.status>=500?"5xx":$e.status>=400?"4xx":$e.status>=300?"3xx":"unknown",failureCategory:$e.status>=500?"server_error":void 0}),z($t),nt(()=>Rt.current?.(Kt("paypal",$t,{code:St?.code,declineCode:St?.declineCode})));return}catch(We){if(Ce())return;pe(),L.error({errorCode:"NETWORK_REQUEST_FAILED",failureCategory:"transport_error",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"process_payment",statusClass:"network_error"});let Ze=We instanceof Error?We.message:"PayPal payment failed.",se=br(Ze)??Ze;z(se),nt(()=>Rt.current?.(Kt("paypal",se)));return}},Z=()=>new Bt.FloPayError("PayPal render was superseded.","api_error",{code:"paypal_render_superseded"}),bt=g=>Ce()?Promise.reject(Z()):Promise.resolve(g),Ct=async g=>{if(Ce())throw Z();wr||Br();let p=tt.current,v=p?.sessionId??e,Se=p?.nonce??on.current;L.log({name:"payment.intent.started",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create"});let pe;try{pe=await new Jo.PaymentAPI(ue,{telemetry:!1}).createSessionIntent(v,Se??"",et?{provider:"paypal",paymentMethodCategory:"wallet",paymentMethodType:Bt.PAYPAL_VAULTED_PAYMENT_METHOD_TYPE,paymentMethodId:null,intentKind:Ne==="setup_token"?"setup":"payment"}:{provider:"paypal",paymentMethodCategory:"wallet",paymentMethodType:"paypal",paymentMethodId:null,intentKind:"payment"},{idempotencyKey:sn})}catch(We){throw L.error({...(0,Bt.classifyTelemetryFailure)(We,"PAYMENT_PROCESSING_FAILED","unknown"),stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create"}),We}if(Ce())throw Z();if(pe.provider!=="paypal"||pe.providerObjectType!==Ne)throw new Error(g);return L.log({name:"payment.intent.completed",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create",statusClass:"2xx"}),pe.providerObjectId},de=(g,p)=>{let v=p?.nonce??on.current;if(!v)return;let Se=p?.sessionId??e,pe=Wr(g)??sr(g)??"provider_declined";new Jo.PaymentAPI(ue,{telemetry:!1}).reportSessionIntentDecline(Se,v,{provider:"paypal",paymentMethodCategory:"wallet",paymentMethodType:"paypal",providerDeclineReason:pe}).catch(()=>{})},Ae=be;B("loadScript:scheduled (deferred 1 tick)");let Wt=null,ot=setTimeout(()=>{if(Vt){B("loadScript:skipped (cancelled before defer ran)");return}B("loadScript:start");let g=Ye==="live"?"production":Ye;Wt=(0,Gi.loadScript)({clientId:d,currency:C,...Ne==="subscription"?{intent:"subscription",vault:!0}:Ne==="order"?{intent:"capture"}:{},...g?{environment:g}:{},...g==="sandbox"?{dataNamespace:"paypal_sandbox"}:{}}),Wt.then(p=>{if(B(`loadScript:resolved inactive=${Ce()} ns=${!!p} buttons=${!!p?.Buttons}`),Ce())return;if(!p?.Buttons){B("FAIL: namespace missing Buttons factory"),f("PayPal SDK did not expose the Buttons factory.");return}L.log({name:"provider.ready",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"}),L.performance({stage:"provider_ready",durationMs:L.elapsed(Te.current),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"}),L.log({name:"provider.availability.checked",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"});let v=async(se,D)=>{if(Ce()||Be.current!==Ae)return;let me=se.vaultSetupToken??se.subscriptionID??se.orderID??"",Ge=me?Yt.current.get(me):Pt.current.get(Ae);if(!(!Ge||!Xn(Ge.generation))&&mn(Ge.generation)){Yt.current.delete(me),Pt.current.delete(Ge.surfaceKey),Qn();try{if(Je(!0),nt(()=>ct.current?.(null)),!me)throw new Bt.FloPayError("PayPal did not return an approval token.","api_error",{code:"paypal_missing_token"});let $e=gt.current,St=Er(ht.current??[$e?.customer?.firstName,$e?.customer?.lastName].filter(Boolean).join(" ")),je=Pn({email:Ge.accountPatch?.email?.trim()||dt.current?.trim()||$e?.customer?.email?.trim(),firstName:Ge.accountPatch?.firstName?.trim()||St.firstName,lastName:Ge.accountPatch?.lastName?.trim()||St.lastName});if(!(0,Bt.isValidEmail)(je.email)||!(je.firstName||je.lastName))try{let $t=vl(await D?.order?.get?.());je=Pn({email:$t.email||je.email,firstName:$t.firstName||je.firstName,lastName:$t.lastName||je.lastName})}catch{}if((Cn.current||De)&&!(0,Bt.isValidEmail)(je.email)){let $t=await st("PayPal",je);if(!$t)return;je=$t}(0,Bt.isValidEmail)(je.email)&&(Ge.accountPatch=Pn({...Ge.accountPatch,...je}),await Cn.current?.(je)),await H(Ne==="setup_token"?{id:me,type:"paypal_setup_token",isPaypal:!0,gateway:"paypal",paymentMethodType:Bt.PAYPAL_VAULTED_PAYMENT_METHOD_TYPE}:et?{id:me,isPaypal:!0,gateway:"paypal",paymentMethodType:Bt.PAYPAL_VAULTED_PAYMENT_METHOD_TYPE}:{id:me,isPaypal:!0},Ge)}catch($e){z($e instanceof Error?$e.message:"PayPal capture failed.")}finally{Ce()||Je(!1)}}},Se=p.Buttons({style:{layout:"horizontal",height:Xo,tagline:!1},onClick:async(se,D)=>{if(Ce()){await D.reject();return}Br();let me=Qt.current,Ge={};if(me)try{let je=await me("paypal");if(Ce()){await D.reject();return}if(!je.proceed){tt.current=null,Pt.current.delete(Ae),await D.reject();return}Ge={sessionId:je.sessionId,accountPatch:je.accountPatch,nonce:je.nonce}}catch(je){B(`onClick:runBeforeButtonClick rejected msg=${(je instanceof Error?je.message:String(je)).slice(0,120)}`),tt.current=null,Pt.current.delete(Ae),await D.reject();return}nt(()=>rn.current?.("paypal"));let St={generation:ie(),surfaceKey:Ae,...Ge};tt.current=St,Pt.current.set(Ae,St),await D.resolve(),L.log({name:"payment.method.selected",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"}),L.log({name:"provider.popup.opened",stage:"overlay_open",provider:"paypal",paymentMethodCategory:"paypal"}),L.log({name:"provider.overlay.opened",stage:"overlay_open",provider:"paypal",paymentMethodCategory:"paypal"}),Un=L.startTiming()},createOrder:Ne==="order"?ge?()=>bt(ge).then(Lt):()=>Ct("Failed to create PayPal order.").then(Lt):void 0,createSubscription:Ne==="subscription"?ge?()=>bt(ge).then(Lt):()=>Ct("Failed to create PayPal subscription.").then(Lt):void 0,createVaultSetupToken:Ne==="setup_token"?()=>Ct("Failed to create PayPal setup token.").then(Lt):void 0,onApprove:v,onCancel:()=>{if(Ce())return;let se=Pt.current.get(Ae)??tt.current;se&&Pt.current.delete(se.surfaceKey),tt.current=null,Qn(),L.terminal({outcome:"payment_cancelled",provider:"paypal",paymentMethodCategory:"paypal"}),Ie.current=!0,On({generation:se?.generation,remount:!0,focus:!1})},onError:se=>{if(Ce()||Be.current!==Ae)return;let D=se instanceof Error?se.message:"PayPal failed to render.";if(B(`onError rendered=${fn} msg=${D.slice(0,120)}`),fn){let me=Pt.current.get(Ae)??tt.current;if(me&&!Xn(me.generation)||!me&&en.current===Jn.current)return;if(Me(D)){mn(me?.generation);return}if(Qn(),Po(se)){L.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal"}),de(se,me),nt(()=>Rt.current?.(Kt("paypal",D))),me&&Pt.current.delete(me.surfaceKey),tt.current=null,mn(me?.generation);return}let Ge=D.toLowerCase();L.error({errorCode:Ge.includes("popup")&&Ge.includes("block")?"POPUP_BLOCKED":"PROVIDER_RUNTIME_FAILED",failureCategory:"provider_runtime",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk"}),me&&Pt.current.delete(me.surfaceKey),tt.current=null,On({generation:me?.generation,remount:!0,showRetry:!0,focus:!0}),Tn(se,{code:"paypal_runtime_failed"});return}f(D)}}),pe=Se.isEligible();if(B(`isEligible=${pe}`),L.log({name:"provider.eligibility.checked",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"}),!pe){M(!1),f("PayPal buttons are not eligible to render in this context (paypal_ineligible).");return}Zn=Se,xn=()=>{if(!hn||jn||Ce()||fn)return;jn=!0,B(`container:dims ${xe(tn)} visibility=${typeof document<"u"?document.visibilityState:"(no document)"}`),typeof MutationObserver<"u"&&(qn=new MutationObserver(D=>{if(!Ce()){for(let me of D)if(me.type==="childList")me.addedNodes.forEach(Ge=>{if(!(Ge instanceof Element))return;let $e=Ge.tagName.toLowerCase(),St=(Ge.getAttribute("title")??"").slice(0,40),je=$e==="iframe"?` ${Ot(Ge)}`:"";B(`child+ ${$e}${St?` title="${St}"`:""}${je} dims=${xe(Ge)}`)});else if(me.type==="attributes"&&me.target instanceof Element){let Ge=me.target;if(Ge.tagName.toLowerCase()!=="iframe")continue;let $e=me.attributeName;($e==="src"||$e==="srcdoc")&&B(`attr~ iframe ${$e}=${$e==="srcdoc"?`[${(Ge.getAttribute("srcdoc")??"").length}ch]`:nn(Ge.getAttribute("src"))} dims=${xe(Ge)}`)}}}),qn.observe(tn,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["src","srcdoc"]}));let se=D=>{if(Ce()||fn)return;let me=tn.querySelectorAll("iframe"),Ge=typeof document<"u"&&"hasStorageAccess"in document;B(`watchdog:${D} container=${xe(tn)} children=${tn.childElementCount} iframes=${me.length} visibility=${typeof document<"u"?document.visibilityState:"(no document)"} cookies=${typeof navigator<"u"?navigator.cookieEnabled:"?"} hasStorageAccessApi=${Ge} paypalNetRequests=${Mn.value}`),me.forEach(($e,St)=>{let je=($e.getAttribute("title")??"").slice(0,40);B(` iframe[${St}] ${xe($e)}${je?` title="${je}"`:""} ${Ot($e)}`);let $t=gr($e);$t&&B(` ${$t}`)}),Vn.length===0&&B(" (no PayPal/zoid window errors captured)")};mt.push(setTimeout(()=>se("3s"),3e3)),mt.push(setTimeout(()=>se("8s"),8e3)),mt.push(setTimeout(()=>se("15s"),15e3))},xn(),B("render:start");let Ze=L.startTiming();gn=setTimeout(()=>{Ce()||fn||(B("watchdog:11s retryable render timeout"),f("PayPal Buttons render did not settle within 11000ms.",!0))},fl),Se.render(tn).then(()=>{if(B(`render:resolved inactive=${Ce()}`),ne(),Ce()){Nt();return}fn=!0,M(!0),ke(!1),Dt.current?.("ready"),L.log({name:"checkout.rendered",stage:"checkout_render",provider:"paypal",paymentMethodCategory:"paypal"}),L.performance({stage:"checkout_render",durationMs:L.elapsed(Ze),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"})}).catch(se=>{let D=se instanceof Error?se.message:"PayPal failed to render.";B(`render:rejected msg=${D.slice(0,120)}`),ne(),f(D)})}).catch(p=>{let v=p instanceof Error?p.message:"PayPal SDK failed to load.";B(`loadScript:rejected msg=${v.slice(0,120)}`),f(v)})},0);return()=>{Vt=!0,clearTimeout(ot),yn&&clearTimeout(yn),ne(),Xe.current===re&&(Xe.current=null),Nt()}},[ce,ue,d,C,c,Ne,et,e,ge,be,L,st,De,B]);let yr=Oe?(0,Dn.jsxs)("pre",{"data-testid":"flopay-direct-paypal-debug",style:{margin:"0 0 8px 0",padding:"6px 8px",background:$?"#fef2f2":"#f3f4f6",border:`1px solid ${$?"#fca5a5":"#d1d5db"}`,borderRadius:6,color:"#111827",font:"11px/1.35 ui-monospace, SFMono-Regular, Menlo, monospace",whiteSpace:"pre-wrap",wordBreak:"break-word",maxHeight:220,overflowY:"auto"},children:[`FloPay/DirectPayPal-debug (ready=${Pe} failed=${$})`,Zt.length===0?`
|
|
1
|
+
"use strict";var Js=Object.create;var Vo=Object.defineProperty;var Xs=Object.getOwnPropertyDescriptor;var Zs=Object.getOwnPropertyNames;var Qs=Object.getPrototypeOf,el=Object.prototype.hasOwnProperty;var tl=(e,t)=>{for(var n in t)Vo(e,n,{get:t[n],enumerable:!0})},Di=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Zs(t))!el.call(e,o)&&o!==n&&Vo(e,o,{get:()=>t[o],enumerable:!(r=Xs(t,o))||r.enumerable});return e};var Li=(e,t,n)=>(n=e!=null?Js(Qs(e)):{},Di(t||!e||!e.__esModule?Vo(n,"default",{value:e,enumerable:!0}):n,e)),nl=e=>Di(Vo({},"__esModule",{value:!0}),e);var rc={};tl(rc,{DirectPayPalButton:()=>wo,FloPayAutomaticPaymentButton:()=>_s,FloPayCardSetup:()=>xs,FloPayCardSetupError:()=>Bo,FloPayCheckout:()=>pa,FloPayProvider:()=>Io,SplitCardForm:()=>la,VaultCardFields:()=>eo,dropThirdPartyOnlyError:()=>Ms.dropThirdPartyOnlyError,useCheckout:()=>Ki,useFloPay:()=>lr,usePayPalFloPay:()=>Yo});module.exports=nl(rc);var Ms=require("@flopay/shared");var ma=require("@flopay/js"),En=require("@flopay/shared"),Ue=require("react");var _t=require("react/jsx-runtime");function rl(){return(0,_t.jsxs)(_t.Fragment,{children:[(0,_t.jsxs)("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,_t.jsx)("rect",{width:"20",height:"14",x:"2",y:"5",rx:"2"}),(0,_t.jsx)("line",{x1:"2",x2:"22",y1:"10",y2:"10"})]}),"Credit / Debit Card",(0,_t.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"#9ca3af",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{position:"absolute",right:"1rem"},"aria-hidden":"true",children:(0,_t.jsx)("path",{d:"M9 18l6-6-6-6"})})]})}function ol(){return(0,_t.jsx)(_t.Fragment,{children:"Go back"})}function al(){return(0,_t.jsx)(_t.Fragment,{children:"Secure card checkout"})}function qr(e){return e!==void 0&&(e===""||e===null||e===!1)}function $r({content:e}){return(0,_t.jsx)(_t.Fragment,{children:e===void 0?(0,_t.jsx)(rl,{}):e})}function jr({content:e}){return(0,_t.jsx)(_t.Fragment,{children:e===void 0?(0,_t.jsx)(ol,{}):e})}function ho({content:e}){return(0,_t.jsx)(_t.Fragment,{children:e===void 0?(0,_t.jsx)(al,{}):e})}var ar=require("@flopay/shared");function Vr(e,t,n,r={}){let o;return(i={})=>{if(o)return o;let d={...r,...i,email:i.email?.trim()||r.email?.trim()};if(!(0,ar.isValidEmail)(d.email))return Promise.reject(new ar.FloPayError("A valid buyer email is required before claiming checkout.","validation_error",{code:"BuyerEmailCollectionRequired",param:"account.email"}));let c={};for(let[C,y]of Object.entries(d)){if(typeof y!="string")continue;let b=y.trim();b&&(c[C]=b)}return o=e.claimCheckoutSession(t,n,{accountData:c}),o.catch(()=>{}),o}}function Ni(e,t){return t?e?{account:{...e.account??{},...t.account??{}},couponCodes:t.couponCodes??e.couponCodes,..."checkoutMetadata"in t?{checkoutMetadata:t.checkoutMetadata}:"checkoutMetadata"in e?{checkoutMetadata:e.checkoutMetadata}:{},tagsData:{...e.tagsData??{},...t.tagsData??{}},utmMetadata:t.utmMetadata??e.utmMetadata}:t:e}function Ma(e,t){return t?{...e,account:{...e.account,...t.account??{}},couponCodes:t.couponCodes??e.couponCodes,..."checkoutMetadata"in t?{checkoutMetadata:t.checkoutMetadata}:{},tagsData:{...e.tagsData??{},...t.tagsData??{}},utmMetadata:t.utmMetadata??e.utmMetadata}:e}function Oi(e,t){let n=e.products??[...(e.subscriptions??[]).map(i=>({type:"subscription",code:i.code??i.providerPlanId,name:i.subscriptionName??i.providerPlanName??i.code??i.providerPlanId??null,quantity:i.quantity??1,totalAmount:i.totalAmount,overrideAmount:i.overrideAmount,currency:i.currency,metadata:i.metadata})),...(e.items??[]).map(i=>({type:"item",code:i.code??i.providerItemId,name:i.itemName??i.providerItemName??i.code??i.providerItemId??null,quantity:i.quantity??1,totalAmount:i.totalAmount,overrideAmount:i.overrideAmount,currency:i.currency,metadata:i.metadata}))],r=n.reduce((i,d)=>i+(d.overrideAmount??d.totalAmount??0),0),o=e.currency??n.find(i=>i.currency)?.currency??"USD";return{id:"",clientSecret:"",mode:n.some(i=>i.type==="subscription")?"subscription":"payment",amount:Math.round(r*100),currency:o,status:"open",captureMethod:e.captureMethod,customer:{id:e.account.userId,email:e.account.email??"",firstName:e.account.firstName,lastName:e.account.lastName,gender:e.account.gender??void 0,city:e.account.city??void 0,state:e.account.state??void 0,country:e.account.country??void 0,zip:e.account.zip??void 0},successUrl:e.successUrl,cancelUrl:e.cancelUrl,checkoutMode:t??e.checkoutMode??"full",products:n.map((i,d)=>({uuid:`synthetic-${i.type??"item"}-${d}`,checkoutSessionId:"",type:i.type??"item",code:i.code,name:i.name??null,quantity:i.quantity??1,totalAmount:i.totalAmount,overrideAmount:i.overrideAmount??null,currency:i.currency??o,metadata:i.metadata??null}))}}function Er(e){let t=e?.trim().split(/\s+/).filter(Boolean)??[];return t.length===0?{}:{firstName:t[0],lastName:t.length>1?t.slice(1).join(" "):void 0}}function Aa(e,t){return t?{...e,...t}:e}function Kt(e,t,n){let r=typeof t=="string"?t:t.message,o=typeof t=="string"?n?.code:n?.code??t.code,i=typeof t=="string"?n?.declineCode:n?.declineCode??t.declineCode;return{method:e,message:r,...o?{code:o}:{},...i?{declineCode:i}:{}}}var il=[{match:/^paypal authorization required\.?$/i,replacement:"For your additional security, please re-authenticate this payment via PayPal."}];function br(e){if(typeof e!="string")return e??void 0;let t=e.trim();if(!t)return e;for(let{match:n,replacement:r}of il)if(n.test(t))return r;return e}function Rr(e,t){return e.status!=="authorized"?{status:"succeeded"}:{status:"authorized",paymentId:e.paymentId,sessionId:e.id||t||void 0,authorizationExpiresAt:e.authorizationExpiresAt}}function Kr(e){return e?.status==="authorized"||e?.status==="complete"}function zi(e){return e?.status==="expired"&&(e.failureOutcome==="authorization_expired"||e.captureMethod==="manual")}function Ko(e){let t=zi(e);return new ar.FloPayError(t?"Authorization has expired.":"Checkout session has expired.","api_error",{code:t?"authorization_expired":"checkout_session_expired"})}function Ho(e){let t=zi(e);return new ar.FloPayError(t?"Authorization has expired.":"Automatic payment failed. Please try again.","api_error",{code:t?"authorization_expired":e?.status==="expired"?"checkout_session_expired":"checkout_processing_timeout"})}function bo(e,t){return e==="processing"||(0,ar.isMoneySettledOutcome)(e,t)}function Ui(e){return e==="succeeded"?"succeeded":e==="processing"||e==="requires_capture"?"processing":"failed"}function qi(e,t="automatic"){return e&&e>0&&Number.isFinite(e)?{mode:"payment",amount:e,captureMethod:t==="manual"?"manual":"automatic_async",setupFutureUsage:"off_session"}:{mode:"setup"}}function $i(e){let t=e&&typeof e=="object"?e:null;return t?.name==="IntegrationError"||t?.code==="elements_intent_mismatch"||t?.type==="invalid_request_error"?{errorCode:"CONFIGURATION_INVALID",failureCategory:"invalid_response"}:{errorCode:"PROVIDER_RUNTIME_FAILED",failureCategory:"provider_runtime"}}function vo(e){let t=[e?.id,e?.originalPaymentMethodId];for(let n of t)if(typeof n=="string"&&n.startsWith("pm_"))return n}var Mr=require("@flopay/js"),ve=require("@flopay/shared"),k=Li(require("react"),1);var Ba=require("react"),Fn=(0,Ba.createContext)({flopay:null,paypalFlopay:null,billingApiUrl:""}),Yn=(0,Ba.createContext)({session:null,loading:!1,error:null});var Jo=require("@flopay/js"),Bt=require("@flopay/shared"),Ji=require("@paypal/paypal-js"),x=require("react");var ji=require("@flopay/shared"),Wn=require("react"),ir=require("react/jsx-runtime");function Pn(e){let{firstName:t,lastName:n,...r}=e,o=t?.trim(),i=n?.trim();return{...r,...o?{firstName:o}:{},...i?{lastName:i}:{}}}function Hr(){let[e,t]=(0,Wn.useState)(null),n=(0,Wn.useRef)(null),r=(0,Wn.useRef)(0),o=(0,Wn.useCallback)((d,c)=>(n.current?.(null),r.current+=1,t({id:r.current,methodLabel:d,identity:c}),new Promise(C=>{n.current=C})),[]),i=(0,Wn.useCallback)(d=>{let c=n.current;n.current=null,t(null),c?.(d)},[]);return(0,Wn.useEffect)(()=>()=>{n.current?.(null),n.current=null},[]),{request:e,collect:o,finish:i}}function Yr({identity:e,methodLabel:t,onComplete:n,onCancel:r,submitting:o=!1,testId:i="flopay-buyer-identity-pane"}){let[d,c]=(0,Wn.useState)(e.email?.trim()??""),C=(0,ji.isValidEmail)(d.trim());return(0,ir.jsxs)("div",{"data-testid":i,style:{display:"flex",flexDirection:"column",gap:"0.75rem",padding:"0.875rem",border:"1px solid #d1d5db",borderRadius:8,background:"#fff",color:"#262833"},children:[(0,ir.jsxs)("div",{style:{fontWeight:700},children:["Continue with ",t]}),(0,ir.jsxs)("label",{style:{display:"flex",flexDirection:"column",gap:"0.375rem"},children:["Email address",(0,ir.jsx)("input",{type:"email",autoComplete:"email","data-testid":"flopay-email",required:!0,value:d,onChange:y=>c(y.target.value),style:{minHeight:42,padding:"0 0.75rem",border:"1px solid #d1d5db",borderRadius:6}})]}),(0,ir.jsxs)("div",{style:{display:"flex",gap:"0.5rem"},children:[r&&(0,ir.jsx)("button",{type:"button",onClick:r,style:{flex:1,minHeight:42},children:"Cancel"}),(0,ir.jsxs)("button",{type:"button",disabled:!C||o,onClick:()=>{n(Pn({...e,email:d.trim()}))},style:{flex:2,minHeight:42},children:["Continue with ",t]})]})]})}function sl(e){if(e instanceof Error)return e.message;if(typeof e=="object"&&e!==null){let t=e.message;return typeof t=="string"?t:void 0}return typeof e=="string"?e:void 0}function _r(e){if(typeof e!="string")return;let t=e.trim();return/^[a-z0-9_.-]{1,64}$/i.test(t)?t:void 0}function sr(e){if(typeof e!="object"||e===null)return;let t=e;return _r(t.code)??_r(t.type)??_r(t.name)}function Wr(e){if(!(typeof e!="object"||e===null))return _r(e.decline_code)}function Po(e){return typeof e!="object"||e===null?!1:_r(e.type)?.toLowerCase()==="card_error"||Wr(e)!==void 0}function vr(e){let t=sl(e)?.toLowerCase()??"",r=`${sr(e)?.toLowerCase()??""} ${t}`;return r.includes("popup")&&r.includes("block")}var Vi=require("@flopay/shared"),Co=require("react");function lr(){return(0,Co.useContext)(Fn).flopay}function Yo(){return(0,Co.useContext)(Fn).paypalFlopay??null}function Ki(){return(0,Co.useContext)(Yn)}function Hi(){return(0,Co.useContext)(Fn).billingApiUrl||(0,Vi.resolveBillingApiUrl)()}var Yi=require("@flopay/shared"),Tr=require("react");function rt(e){if(!e)return;let t=n=>{console.error("[FloPay] Merchant callback failed; checkout continued.",n)};try{Promise.resolve(e()).catch(t)}catch(n){t(n)}}var Wo=require("react"),So=typeof window>"u"?Wo.useEffect:Wo.useLayoutEffect;var ll={"checkout.mount":"checkout_mount","sdk.initialize.ready":"sdk_loaded","provider.ready":"sdk_loaded","checkout.rendered":"form_rendered","vault.widget.ready":"form_rendered","vault.submission.started":"tokenize","payment.tokenization.started":"tokenize","payment.processing.started":"process_attempt","payment.intent.started":"process_attempt","vault.action.required":"3ds_challenge","payment.three_ds.handoff":"3ds_challenge"};function cl(e){return e==="stripe"||e==="paypal"?e:void 0}function dl(e){let t=cl(e.provider),n={schemaVersion:Yi.FLO_INSTRUMENT_SCHEMA_VERSION,...t?{gateway:t}:{}};if(e.class==="lifecycle"){let r=ll[e.name];return r?{...n,name:r}:null}return e.class==="card_surface"?{...n,name:"card_expanded"}:e.errorCode==="CHECKOUT_SESSION_CREATE_FAILED"?{...n,name:"checkout_error",phase:"session_create"}:e.errorCode==="SDK_INITIALIZATION_FAILED"||e.errorCode==="PROVIDER_LOAD_FAILED"?{...n,name:"checkout_error",phase:"sdk_load"}:e.errorCode==="PAYMENT_PROCESSING_FAILED"?{...n,name:"checkout_error",phase:e.requestCategory==="intent_create"?"wallets":"process"}:null}var Fa=new Set(["checkout_mount","sdk_loaded","form_rendered","card_expanded"]);function Gr(e,t){let n=(0,Tr.useRef)(e);n.current=e;let r=(0,Tr.useRef)(new Set),o=(0,Tr.useRef)(t),i=(0,Tr.useRef)(t);return So(()=>{i.current=t,o.current!==t&&(o.current=t,r.current.clear())},[t]),(0,Tr.useCallback)(d=>{if(i.current!==t)return;let c=dl(d);if(c){if(Fa.has(c.name)){if(r.current.has(c.name))return;r.current.add(c.name)}rt(()=>n.current?.(c))}},[t])}var ul=Symbol.for("@flopay/js.telemetry.bridge.v1"),pl=Symbol.for("@flopay/js.telemetry.reporter-factory.v1");function ml(){return{error:()=>{},log:()=>{},performance:()=>{},terminal:()=>{},now:()=>globalThis.performance?.now()??0,elapsed:e=>Math.max(0,(globalThis.performance?.now()??e)-e),setCheckoutContext:()=>{},beginCheckout:()=>globalThis.performance?.now()??0,disable:()=>{},subscribe:()=>()=>{},flush:async()=>{},destroy:()=>{}}}function yl(e){let t=ml(),n=(o,i)=>o?o.bind(e):i,r=n(e.now,t.now);return{error:n(e.error,t.error),log:n(e.log,t.log),performance:n(e.performance,t.performance),terminal:n(e.terminal,t.terminal),now:r,elapsed:e.elapsed?e.elapsed.bind(e):o=>Math.max(0,r()-o),setCheckoutContext:n(e.setCheckoutContext,t.setCheckoutContext),beginCheckout:n(e.beginCheckout,t.beginCheckout),disable:n(e.disable,t.disable),subscribe:n(e.subscribe,t.subscribe),flush:n(e.flush,t.flush),destroy:n(e.destroy,t.destroy)}}function Go(e){let t=globalThis[pl];return yl(t?.(e)??{})}function jt(e){if(e)return e[ul]}var Dn=require("react/jsx-runtime"),Xo=45,fl=1e3,gl=11e3,hl=["https://www.paypal.com","https://www.sandbox.paypal.com"],Wi="We couldn't open PayPal. Try again or choose another payment method.",bl={width:"100%",minHeight:Xo,margin:"0 0 0.5rem",padding:"0.75rem 0.875rem",border:"1px solid #2563eb",borderRadius:8,background:"#eff6ff",color:"#1d4ed8",fontSize:"0.95rem",fontWeight:700,cursor:"pointer"};function Gi(e){return e.includes("No ack for postMessage init()")&&hl.some(t=>e.includes(t))&&e.includes("10000ms")}function vl(e){return e?`${Wi} Allow pop-ups for this site, then try again.`:Wi}function Pl(e){let t=e,n=t?.payer??t?.payment_source?.paypal;return{email:n?.email_address?.trim()||void 0,firstName:n?.name?.given_name?.trim()||void 0,lastName:n?.name?.surname?.trim()||void 0}}function Xi({sessionId:e,nonce:t,billingApiUrl:n,email:r,billingName:o,onBuyerIdentityReady:i,clientId:d,environment:c,currency:C,isSubscription:y,providerObjectType:b,onTokenizedBody:P,onComplete:F,onErrorChange:A,onDecline:m,onTechnicalFailure:S,isProcessing:ye=!1,onLoadStateChange:U,onInitializationStateChange:w,allowAutomaticRetry:ce=!0,onButtonClick:q,runBeforeButtonClick:le,session:Y,existingOrderId:ge,telemetry:qe,telemetryContext:we,onInstrument:Et,debug:Oe=!1}){let Ee=lr(),Re=Gr(Et,e),oe=(0,x.useMemo)(()=>{if(Ee)return null;let T=Go({billingApiUrl:n,sdkPackage:"@flopay/react",sdkVersion:Bt.SDK_VERSION,enabled:qe!==!1});return T.setCheckoutContext(we??{}),T.beginCheckout(we??{}),T},[n,Ee,qe,we?.checkoutMode,we?.layout]),ee=(0,x.useMemo)(()=>jt(Ee),[Ee]);(0,x.useEffect)(()=>()=>{oe&&oe.flush().catch(()=>{}).finally(()=>oe.destroy())},[oe]);let L=(0,x.useMemo)(()=>({error:T=>{ee?ee.error(T):oe?.error(T),Re({class:"technical_error",errorCode:T.requestCategory==="intent_create"?"PAYMENT_PROCESSING_FAILED":T.errorCode,requestCategory:T.requestCategory,provider:T.provider})},log:T=>{ee?ee.log(T):oe?.log(T),Re({class:"lifecycle",name:T.name,provider:T.provider})},performance:T=>{ee?ee.performance(T):oe?.performance(T)},terminal:T=>{ee?ee.terminal(T):oe?.terminal(T)},startTiming:()=>ee?.now()??oe?.now()??0,elapsed:T=>ee?.elapsed(T)??Math.max(0,(oe?.now()??T)-T)}),[Re,ee,oe]),_e=(0,x.useRef)(null),Te=(0,x.useRef)(0),G=(0,x.useRef)(null),Ie=(0,x.useRef)(!1),[Pe,M]=(0,x.useState)(!1),[K,ke]=(0,x.useState)(!1),[be,Q]=(0,x.useState)(0),Be=(0,x.useRef)(0),[st,vt]=(0,x.useState)(!1),Ke=(0,x.useRef)(!1),te=(0,x.useRef)(!1),[$,O]=(0,x.useState)(!1),[He,Je]=(0,x.useState)(!1),{request:fe,collect:lt,finish:E}=Hr(),R=(0,x.useRef)({sessionId:e,required:!(0,Bt.isValidEmail)(r?.trim()||Y?.customer?.email?.trim())});R.current.sessionId!==e&&(R.current={sessionId:e,required:!(0,Bt.isValidEmail)(r?.trim()||Y?.customer?.email?.trim())});let De=R.current.required,ue=(0,x.useMemo)(()=>n.replace(/\/+$/,""),[n]),ot=Y?.gateways?.paypal?.providerObjectType??b,Ne=ot??(y?"subscription":"order"),Xe=ot==="order"||ot==="setup_token",Mt=(0,x.useMemo)(()=>JSON.stringify([ue,d,C,c??"",Ne,Xe,e,ge??""]),[ue,d,C,c,ge,Ne,Xe,e]),_=(0,x.useRef)(Mt),J=_.current!==Mt,ct=(0,x.useRef)(Oe),Ze=(0,x.useRef)(null),[Qt,Ht]=(0,x.useState)([]),B=(0,x.useCallback)(T=>{ct.current&&Ht(ut=>[...ut,`${new Date().toISOString().slice(11,23)} ${T}`])},[]);(0,x.useEffect)(()=>{ct.current=Oe,Oe&&B("debug:enabled"),Ze.current?.setEnabled(Oe)},[B,Oe]);let ft=(0,x.useRef)(P),Tt=(0,x.useRef)(F),dt=(0,x.useRef)(A),Rt=(0,x.useRef)(m),dn=(0,x.useRef)(S),rn=(0,x.useRef)(q),un=(0,x.useRef)(U),Dt=(0,x.useRef)(w),Cn=(0,x.useRef)(i),Yt=(0,x.useRef)(le),gt=(0,x.useRef)(Y),Qe=(0,x.useRef)(r),ht=(0,x.useRef)(o),on=(0,x.useRef)(t),nt=(0,x.useRef)(null),Jn=(0,x.useRef)(0),pt=(0,x.useRef)(null),en=(0,x.useRef)(null),Pt=(0,x.useRef)(new Map),Wt=(0,x.useRef)(new Map),Sn=(0,x.useRef)(!1);(0,x.useEffect)(()=>(Sn.current=!0,()=>{Sn.current=!1}),[]),(0,x.useEffect)(()=>{ft.current=P},[P]),(0,x.useEffect)(()=>{Cn.current=i},[i]),(0,x.useEffect)(()=>{Tt.current=F},[F]),(0,x.useEffect)(()=>{dt.current=A},[A]),(0,x.useEffect)(()=>{Rt.current=m},[m]),(0,x.useEffect)(()=>{dn.current=S},[S]),(0,x.useEffect)(()=>{rn.current=q},[q]),(0,x.useEffect)(()=>{un.current=U},[U]),(0,x.useEffect)(()=>{Dt.current=w},[w]),(0,x.useEffect)(()=>{Yt.current=le},[le]),(0,x.useEffect)(()=>{gt.current=Y},[Y]),(0,x.useEffect)(()=>{Qe.current=r},[r]),(0,x.useEffect)(()=>{ht.current=o},[o]),(0,x.useEffect)(()=>{on.current=t},[t]),(0,x.useEffect)(()=>{Be.current=be},[be]),(0,x.useEffect)(()=>{st&&G.current?.focus()},[st,be]);let pn=(0,x.useCallback)(()=>{window.setTimeout(()=>{G.current?.focus()},0)},[]),_n=(0,x.useCallback)(()=>{M(!1),Q(T=>T+1)},[]),an=(0,x.useCallback)(()=>{vt(!1),(_e.current?.querySelector('iframe, button, [tabindex]:not([tabindex="-1"])')??_e.current)?.focus?.()},[]);(0,x.useEffect)(()=>{!Pe||!Ie.current||(Ie.current=!1,an())},[an,Pe,be]);let Tn=(0,x.useCallback)((T,ut)=>{let Vt=dn.current;if(Vt){Vt("paypal",T,ut);return}dt.current?.(vl(ut?.popupBlocked??vr(T)))},[]),qt=()=>{pt.current?.timer&&(clearTimeout(pt.current.timer),pt.current.timer=null)},ie=()=>{qt();let T=Jn.current+1;return Jn.current=T,en.current=null,pt.current={generation:T,timer:null,yieldedControl:!1},vt(!1),T},mn=T=>T!==void 0&&pt.current?.generation!==T?!1:(qt(),pt.current=null,en.current=null,!0),On=T=>{let ut=T?.generation??pt.current?.generation??Jn.current;(!T?.generation||pt.current?.generation===ut)&&(qt(),pt.current=null),en.current=ut,T?.showRetry&&vt(!0),T?.remount&&_n(),T?.focus!==!1&&pn()},Xn=T=>pt.current?.generation===T&&en.current!==T,Cr=T=>{typeof document<"u"&&document.visibilityState!=="visible"||(qt(),T.timer=setTimeout(()=>{pt.current?.generation===T.generation&&(pt.current=null,en.current=T.generation,Tn(new Error("External payment method returned without a terminal callback."),{code:"external_method_missing_terminal_callback"}),vt(!0),_n(),pn())},600))},Sr=()=>{let T=pt.current;T?.yieldedControl&&Cr(T)},mr=()=>{let T=pt.current;T&&(T.yieldedControl=!0,qt())},Lt=T=>{let ut=nt.current;return ut&&Wt.current.set(T,ut),T};(0,x.useEffect)(()=>{let T=()=>{document.visibilityState==="visible"?Sr():mr()};return document.addEventListener("visibilitychange",T),window.addEventListener("focus",Sr),window.addEventListener("blur",mr),()=>{document.removeEventListener("visibilitychange",T),window.removeEventListener("focus",Sr),window.removeEventListener("blur",mr),qt()}},[]),(0,x.useEffect)(()=>{_.current!==Mt&&(_.current=Mt,Ke.current=!1,te.current=!1,M(!1),ke(!1),O(!1),Dt.current?.("loading"))},[Mt]),(0,x.useEffect)(()=>{rt(()=>un.current?.(Pe&&!$))},[Pe,$]);let Ye=(0,Bt.normalizeGatewayEnvironment)(c);(0,x.useEffect)(()=>{let T=d?`${d.slice(0,6)}\u2026(len ${d.length})`:"(empty)",ut=typeof navigator<"u"?navigator.userAgent:"(no navigator)";if(B(`mount clientId=${T} env=${c??"(unset)"}\u2192${Ye??"live"} ccy=${C} sub=${y}`),B(`ua=${ut.slice(0,80)}${ut.length>80?"\u2026":""}`),!d){B("FAIL: clientId empty \u2014 gateway misconfigured"),O(!0),L.error({errorCode:"CONFIGURATION_INVALID",stage:"provider_load",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk"}),console.error("[FloPay] DirectPayPal: clientId empty \u2014 gateway misconfigured");return}if(!_e.current){B("FAIL: containerRef not attached");return}Te.current=L.startTiming(),L.log({name:"provider.load.started",stage:"provider_load",provider:"paypal",paymentMethodCategory:"paypal"});let Vt=!1,wn=!1,Ce=()=>Vt||wn,sn,wr=!1,Br=()=>{sn=(0,Bt.generateIdempotencyKey)(),sn||console.warn("[FloPay] DirectPayPal: secure idempotency key unavailable; retries may not be deduplicated."),wr=!0},yn=null,fr=!1,Zn=null,zn=!1,Nt=()=>{!Zn||zn||(zn=!0,Zn.close().catch(()=>{}))},Un=null,Qn=()=>{Un!==null&&(L.log({name:"provider.overlay.returned",stage:"overlay_return",provider:"paypal",paymentMethodCategory:"paypal"}),L.performance({stage:"overlay_return",durationMs:L.elapsed(Un),durationMode:"buyer",provider:"paypal",paymentMethodCategory:"paypal"}),Un=null)},fn=!1,tn=_e.current,qn=null,$n=null,mt=[],gn=null,hn=!1,jn=!1,xn=null,xe=g=>{if(!g||typeof g.getBoundingClientRect!="function")return"(no rect)";let p=g.getBoundingClientRect();return`${Math.round(p.width)}\xD7${Math.round(p.height)}`},nn=g=>{if(!g)return"(empty)";try{let p=new URL(g,typeof window<"u"?window.location.href:"https://localhost"),v=p.pathname.toLowerCase();return v.includes("checkcaptcha")||v.includes("captcha")?`CAPTCHA(${p.host}${v})`:v.includes("risk")||v.includes("challenge")?`RISK(${p.host}${v})`:v.includes("smart/buttons")?`smart-buttons(${p.host})`:`${p.host}${v}`.slice(0,100)}catch{return g.slice(0,80)}},Ot=g=>{let p=g.getAttribute("src"),v=g.getAttribute("srcdoc"),Se=g.getAttribute("name"),pe=g.getAttribute("sandbox"),We=[];return p&&We.push(`src=${nn(p)}`),v&&We.push(`srcdoc[${v.length}ch]`),!p&&!v&&We.push("src=(empty) srcdoc=(empty)"),Se&&We.push(`name=${Se.slice(0,40)}`),pe!==null&&We.push(`sandbox="${pe.slice(0,40)}"`),We.join(" ")},gr=g=>{if(!(g instanceof HTMLIFrameElement))return"";try{let p=g.contentDocument;if(!p)return"cd=null";let v=p.body?.children.length??0,Se=p.body?.innerHTML.length??0,pe=p.head?.innerHTML.length??0;return`cd=same-origin readyState=${p.readyState} body[${v}children,${Se}ch] head[${pe}ch]`}catch(p){return`cd=cross-origin(${p.message.slice(0,30)})`}},Vn=[],hr=g=>{if(Ce())return;let p=g.message??String(g.error??"(no message)");p&&(p.toLowerCase().includes("paypal")||p.toLowerCase().includes("zoid")||p.toLowerCase().includes("postrobot")||p.toLowerCase().includes("storage"))&&(B(`window:error ${p.slice(0,140)}`),Vn.push(p))},kn=g=>{if(Ce())return;let p=g.reason instanceof Error?g.reason.message:String(g.reason??"(no reason)");p&&(p.toLowerCase().includes("paypal")||p.toLowerCase().includes("zoid")||p.toLowerCase().includes("postrobot")||p.toLowerCase().includes("storage"))&&(B(`window:rejection ${p.slice(0,140)}`),Vn.push(p))},Mn={value:0},zt=()=>{for(qn?.disconnect(),qn=null,$n?.disconnect(),$n=null;mt.length;)clearTimeout(mt.pop());jn=!1,hn&&typeof window<"u"&&(window.removeEventListener("error",hr),window.removeEventListener("unhandledrejection",kn)),hn=!1},N=()=>{if(!(hn||Ce()||fn)){if(hn=!0,Vn.length=0,Mn.value=0,typeof window<"u"&&(window.addEventListener("error",hr),window.addEventListener("unhandledrejection",kn)),typeof PerformanceObserver<"u")try{$n=new PerformanceObserver(g=>{if(!Ce())for(let p of g.getEntries()){if(!p.name.toLowerCase().includes("paypal"))continue;Mn.value+=1;let v=Math.round(p.duration);B(`net ${v}ms ${p.name.slice(0,90)}`)}}),$n.observe({type:"resource",buffered:!0})}catch{}xn?.()}},j=()=>{gn&&(clearTimeout(gn),gn=null)},ne=()=>{zt(),j()},re={setEnabled:g=>{g?N():zt()}};Ze.current=re,ct.current&&N();let Me=g=>{if(!g)return!1;let p=g.toLowerCase();return p.includes("zoid destroyed")||p.includes("destroyed all components")||p.includes("window closed")||p.includes("detected container element removed")},z=g=>{if(Ce()||Me(g))return;let p=br(g)??g;rt(()=>dt.current?.(p))},X=g=>{Vt||(O(!0),g.includes("paypal_ineligible")||L.error({errorCode:"PROVIDER_LOAD_FAILED",stage:"provider_load",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk",failureCategory:"provider_runtime"}),console.error("[FloPay] DirectPayPal load/render failure:",g))},f=(g,p=!1)=>{if(Vt)return;let v=Ke.current||!ce;if(fr)return;fr=!0,wn=!0,ne(),Nt();let Se=p||Gi(g);if(Se&&ce&&!Ke.current){Ke.current=!0,M(!1),Je(!1),ke(!0),Dt.current?.("retrying"),yn=setTimeout(()=>{Vt||Q(pe=>pe+1)},fl);return}if(Se||v){if(M(!1),Je(!1),ke(!1),O(!0),Dt.current?.("exhausted"),!te.current){te.current=!0;let pe=Gi(g)?"paypal_init_timeout":p?"paypal_render_timeout":"paypal_init_failure";console.error("[FloPay] Direct PayPal initialization failed:",pe)}return}X(g)};O(!1);let H=async(g,p=nt.current)=>{if(Ce())return;let v=p?.sessionId??e;if(ft.current){await ft.current(g,{sessionId:v,accountPatch:p?.accountPatch,nonce:p?.nonce});return}let Se=L.startTiming();L.log({name:"payment.processing.started",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"});let pe=()=>{L.log({name:"payment.processing.completed",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"}),L.performance({stage:"processing",durationMs:L.elapsed(Se),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"})};try{let We=gt.current,et=p?.accountPatch?.email??Qe.current,se=p?.accountPatch?.userId??We?.customer?.id??We?.accountData?.userId??"",D=p?.accountPatch?.firstName??We?.customer?.firstName??We?.accountData?.firstName,me=p?.accountPatch?.lastName??We?.customer?.lastName??We?.accountData?.lastName,$e=await new Jo.PaymentAPI(ue,{telemetry:!1}).processPayment(se,{sessionId:v,nonce:p?.nonce??on.current,paymentMethodCategory:"paypal",tokenizedData:g,accountData:{userId:se,email:et??We?.customer?.email??"",...D?{firstName:D}:{},...me?{lastName:me}:{},country:p?.accountPatch?.country??We?.customer?.country??We?.accountData?.country??void 0,zip:p?.accountPatch?.zip??We?.customer?.zip??We?.accountData?.zip??void 0}});if($e.ok){if(wn||Vt&&Sn.current)return;pe(),L.terminal({outcome:"payment_succeeded",provider:"paypal",paymentMethodCategory:"paypal"}),rt(()=>Tt.current?.({status:"succeeded",checkoutMethod:"paypal"}));return}if(Ce())return;let St=await $e.json().catch(()=>null),je=St?.message??"PayPal payment failed.",$t=br(je)??je;pe(),$e.status===400&&(typeof St?.declineCode=="string"||!Array.isArray(St?.fields))?L.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal"}):$e.status===400||$e.status===422?L.terminal({outcome:"validation_rejected",provider:"paypal",paymentMethodCategory:"paypal",statusClass:"4xx"}):L.error({errorCode:"PAYMENT_PROCESSING_FAILED",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"process_payment",statusClass:$e.status>=500?"5xx":$e.status>=400?"4xx":$e.status>=300?"3xx":"unknown",failureCategory:$e.status>=500?"server_error":void 0}),z($t),rt(()=>Rt.current?.(Kt("paypal",$t,{code:St?.code,declineCode:St?.declineCode})));return}catch(We){if(Ce())return;pe(),L.error({errorCode:"NETWORK_REQUEST_FAILED",failureCategory:"transport_error",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"process_payment",statusClass:"network_error"});let et=We instanceof Error?We.message:"PayPal payment failed.",se=br(et)??et;z(se),rt(()=>Rt.current?.(Kt("paypal",se)));return}},Z=()=>new Bt.FloPayError("PayPal render was superseded.","api_error",{code:"paypal_render_superseded"}),bt=g=>Ce()?Promise.reject(Z()):Promise.resolve(g),Ct=async g=>{if(Ce())throw Z();wr||Br();let p=nt.current,v=p?.sessionId??e,Se=p?.nonce??on.current;L.log({name:"payment.intent.started",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create"});let pe;try{pe=await new Jo.PaymentAPI(ue,{telemetry:!1}).createSessionIntent(v,Se??"",Xe?{provider:"paypal",paymentMethodCategory:"wallet",paymentMethodType:Bt.PAYPAL_VAULTED_PAYMENT_METHOD_TYPE,paymentMethodId:null,intentKind:Ne==="setup_token"?"setup":"payment"}:{provider:"paypal",paymentMethodCategory:"wallet",paymentMethodType:"paypal",paymentMethodId:null,intentKind:"payment"},{idempotencyKey:sn})}catch(We){throw L.error({...(0,Bt.classifyTelemetryFailure)(We,"PAYMENT_PROCESSING_FAILED","unknown"),stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create"}),We}if(Ce())throw Z();if(pe.provider!=="paypal"||pe.providerObjectType!==Ne)throw new Error(g);return L.log({name:"payment.intent.completed",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create",statusClass:"2xx"}),pe.providerObjectId},de=(g,p)=>{let v=p?.nonce??on.current;if(!v)return;let Se=p?.sessionId??e,pe=Wr(g)??sr(g)??"provider_declined";new Jo.PaymentAPI(ue,{telemetry:!1}).reportSessionIntentDecline(Se,v,{provider:"paypal",paymentMethodCategory:"wallet",paymentMethodType:"paypal",providerDeclineReason:pe}).catch(()=>{})},Ae=be;B("loadScript:scheduled (deferred 1 tick)");let Gt=null,at=setTimeout(()=>{if(Vt){B("loadScript:skipped (cancelled before defer ran)");return}B("loadScript:start");let g=Ye==="live"?"production":Ye;Gt=(0,Ji.loadScript)({clientId:d,currency:C,...Ne==="subscription"?{intent:"subscription",vault:!0}:Ne==="order"?{intent:"capture"}:{},...g?{environment:g}:{},...g==="sandbox"?{dataNamespace:"paypal_sandbox"}:{}}),Gt.then(p=>{if(B(`loadScript:resolved inactive=${Ce()} ns=${!!p} buttons=${!!p?.Buttons}`),Ce())return;if(!p?.Buttons){B("FAIL: namespace missing Buttons factory"),f("PayPal SDK did not expose the Buttons factory.");return}L.log({name:"provider.ready",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"}),L.performance({stage:"provider_ready",durationMs:L.elapsed(Te.current),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"}),L.log({name:"provider.availability.checked",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"});let v=async(se,D)=>{if(Ce()||Be.current!==Ae)return;let me=se.vaultSetupToken??se.subscriptionID??se.orderID??"",Ge=me?Wt.current.get(me):Pt.current.get(Ae);if(!(!Ge||!Xn(Ge.generation))&&mn(Ge.generation)){Wt.current.delete(me),Pt.current.delete(Ge.surfaceKey),Qn();try{if(Je(!0),rt(()=>dt.current?.(null)),!me)throw new Bt.FloPayError("PayPal did not return an approval token.","api_error",{code:"paypal_missing_token"});let $e=gt.current,St=Er(ht.current??[$e?.customer?.firstName,$e?.customer?.lastName].filter(Boolean).join(" ")),je=Pn({email:Ge.accountPatch?.email?.trim()||Qe.current?.trim()||$e?.customer?.email?.trim(),firstName:Ge.accountPatch?.firstName?.trim()||St.firstName,lastName:Ge.accountPatch?.lastName?.trim()||St.lastName});if(!(0,Bt.isValidEmail)(je.email)||!(je.firstName||je.lastName))try{let $t=Pl(await D?.order?.get?.());je=Pn({email:$t.email||je.email,firstName:$t.firstName||je.firstName,lastName:$t.lastName||je.lastName})}catch{}if((Cn.current||De)&&!(0,Bt.isValidEmail)(je.email)){let $t=await lt("PayPal",je);if(!$t)return;je=$t}(0,Bt.isValidEmail)(je.email)&&(Ge.accountPatch=Pn({...Ge.accountPatch,...je}),await Cn.current?.(je)),await H(Ne==="setup_token"?{id:me,type:"paypal_setup_token",isPaypal:!0,gateway:"paypal",paymentMethodType:Bt.PAYPAL_VAULTED_PAYMENT_METHOD_TYPE}:Xe?{id:me,isPaypal:!0,gateway:"paypal",paymentMethodType:Bt.PAYPAL_VAULTED_PAYMENT_METHOD_TYPE}:{id:me,isPaypal:!0},Ge)}catch($e){z($e instanceof Error?$e.message:"PayPal capture failed.")}finally{Ce()||Je(!1)}}},Se=p.Buttons({style:{layout:"horizontal",height:Xo,tagline:!1},onClick:async(se,D)=>{if(Ce()){await D.reject();return}Br();let me=Yt.current,Ge={};if(me)try{let je=await me("paypal");if(Ce()){await D.reject();return}if(!je.proceed){nt.current=null,Pt.current.delete(Ae),await D.reject();return}Ge={sessionId:je.sessionId,accountPatch:je.accountPatch,nonce:je.nonce}}catch(je){B(`onClick:runBeforeButtonClick rejected msg=${(je instanceof Error?je.message:String(je)).slice(0,120)}`),nt.current=null,Pt.current.delete(Ae),await D.reject();return}rt(()=>rn.current?.("paypal"));let St={generation:ie(),surfaceKey:Ae,...Ge};nt.current=St,Pt.current.set(Ae,St),await D.resolve(),L.log({name:"payment.method.selected",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"}),L.log({name:"provider.popup.opened",stage:"overlay_open",provider:"paypal",paymentMethodCategory:"paypal"}),L.log({name:"provider.overlay.opened",stage:"overlay_open",provider:"paypal",paymentMethodCategory:"paypal"}),Un=L.startTiming()},createOrder:Ne==="order"?ge?()=>bt(ge).then(Lt):()=>Ct("Failed to create PayPal order.").then(Lt):void 0,createSubscription:Ne==="subscription"?ge?()=>bt(ge).then(Lt):()=>Ct("Failed to create PayPal subscription.").then(Lt):void 0,createVaultSetupToken:Ne==="setup_token"?()=>Ct("Failed to create PayPal setup token.").then(Lt):void 0,onApprove:v,onCancel:()=>{if(Ce())return;let se=Pt.current.get(Ae)??nt.current;se&&Pt.current.delete(se.surfaceKey),nt.current=null,Qn(),L.terminal({outcome:"payment_cancelled",provider:"paypal",paymentMethodCategory:"paypal"}),Ie.current=!0,On({generation:se?.generation,remount:!0,focus:!1})},onError:se=>{if(Ce()||Be.current!==Ae)return;let D=se instanceof Error?se.message:"PayPal failed to render.";if(B(`onError rendered=${fn} msg=${D.slice(0,120)}`),fn){let me=Pt.current.get(Ae)??nt.current;if(me&&!Xn(me.generation)||!me&&en.current===Jn.current)return;if(Me(D)){mn(me?.generation);return}if(Qn(),Po(se)){L.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal"}),de(se,me),rt(()=>Rt.current?.(Kt("paypal",D))),me&&Pt.current.delete(me.surfaceKey),nt.current=null,mn(me?.generation);return}let Ge=D.toLowerCase();L.error({errorCode:Ge.includes("popup")&&Ge.includes("block")?"POPUP_BLOCKED":"PROVIDER_RUNTIME_FAILED",failureCategory:"provider_runtime",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk"}),me&&Pt.current.delete(me.surfaceKey),nt.current=null,On({generation:me?.generation,remount:!0,showRetry:!0,focus:!0}),Tn(se,{code:"paypal_runtime_failed"});return}f(D)}}),pe=Se.isEligible();if(B(`isEligible=${pe}`),L.log({name:"provider.eligibility.checked",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"}),!pe){M(!1),f("PayPal buttons are not eligible to render in this context (paypal_ineligible).");return}Zn=Se,xn=()=>{if(!hn||jn||Ce()||fn)return;jn=!0,B(`container:dims ${xe(tn)} visibility=${typeof document<"u"?document.visibilityState:"(no document)"}`),typeof MutationObserver<"u"&&(qn=new MutationObserver(D=>{if(!Ce()){for(let me of D)if(me.type==="childList")me.addedNodes.forEach(Ge=>{if(!(Ge instanceof Element))return;let $e=Ge.tagName.toLowerCase(),St=(Ge.getAttribute("title")??"").slice(0,40),je=$e==="iframe"?` ${Ot(Ge)}`:"";B(`child+ ${$e}${St?` title="${St}"`:""}${je} dims=${xe(Ge)}`)});else if(me.type==="attributes"&&me.target instanceof Element){let Ge=me.target;if(Ge.tagName.toLowerCase()!=="iframe")continue;let $e=me.attributeName;($e==="src"||$e==="srcdoc")&&B(`attr~ iframe ${$e}=${$e==="srcdoc"?`[${(Ge.getAttribute("srcdoc")??"").length}ch]`:nn(Ge.getAttribute("src"))} dims=${xe(Ge)}`)}}}),qn.observe(tn,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["src","srcdoc"]}));let se=D=>{if(Ce()||fn)return;let me=tn.querySelectorAll("iframe"),Ge=typeof document<"u"&&"hasStorageAccess"in document;B(`watchdog:${D} container=${xe(tn)} children=${tn.childElementCount} iframes=${me.length} visibility=${typeof document<"u"?document.visibilityState:"(no document)"} cookies=${typeof navigator<"u"?navigator.cookieEnabled:"?"} hasStorageAccessApi=${Ge} paypalNetRequests=${Mn.value}`),me.forEach(($e,St)=>{let je=($e.getAttribute("title")??"").slice(0,40);B(` iframe[${St}] ${xe($e)}${je?` title="${je}"`:""} ${Ot($e)}`);let $t=gr($e);$t&&B(` ${$t}`)}),Vn.length===0&&B(" (no PayPal/zoid window errors captured)")};mt.push(setTimeout(()=>se("3s"),3e3)),mt.push(setTimeout(()=>se("8s"),8e3)),mt.push(setTimeout(()=>se("15s"),15e3))},xn(),B("render:start");let et=L.startTiming();gn=setTimeout(()=>{Ce()||fn||(B("watchdog:11s retryable render timeout"),f("PayPal Buttons render did not settle within 11000ms.",!0))},gl),Se.render(tn).then(()=>{if(B(`render:resolved inactive=${Ce()}`),ne(),Ce()){Nt();return}fn=!0,M(!0),ke(!1),Dt.current?.("ready"),L.log({name:"checkout.rendered",stage:"checkout_render",provider:"paypal",paymentMethodCategory:"paypal"}),L.performance({stage:"checkout_render",durationMs:L.elapsed(et),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"})}).catch(se=>{let D=se instanceof Error?se.message:"PayPal failed to render.";B(`render:rejected msg=${D.slice(0,120)}`),ne(),f(D)})}).catch(p=>{let v=p instanceof Error?p.message:"PayPal SDK failed to load.";B(`loadScript:rejected msg=${v.slice(0,120)}`),f(v)})},0);return()=>{Vt=!0,clearTimeout(at),yn&&clearTimeout(yn),ne(),Ze.current===re&&(Ze.current=null),Nt()}},[ce,ue,d,C,c,Ne,Xe,e,ge,be,L,lt,De,B]);let yr=Oe?(0,Dn.jsxs)("pre",{"data-testid":"flopay-direct-paypal-debug",style:{margin:"0 0 8px 0",padding:"6px 8px",background:$?"#fef2f2":"#f3f4f6",border:`1px solid ${$?"#fca5a5":"#d1d5db"}`,borderRadius:6,color:"#111827",font:"11px/1.35 ui-monospace, SFMono-Regular, Menlo, monospace",whiteSpace:"pre-wrap",wordBreak:"break-word",maxHeight:220,overflowY:"auto"},children:[`FloPay/DirectPayPal-debug (ready=${Pe} failed=${$})`,Qt.length===0?`
|
|
2
2
|
(waiting for first lifecycle event\u2026)`:`
|
|
3
|
-
${
|
|
4
|
-
`)}`]}):null;return $&&!J?Oe?(0,Dn.jsx)("div",{children:yr}):null:(0,Dn.jsxs)("div",{children:[yr,fe&&(0,Dn.jsx)(Yr,{identity:fe.identity,methodLabel:fe.methodLabel,testId:"flopay-direct-paypal-identity-pane",onComplete:E,onCancel:()=>E(null)}),(0,Dn.jsxs)("div",{"aria-hidden":K||fe?!0:void 0,style:K||fe?{position:"relative",height:0,opacity:0,pointerEvents:"none"}:{position:"relative",minHeight:Xo},children:[!Pe&&!K&&(0,Dn.jsx)("div",{"data-testid":"flopay-direct-paypal-placeholder",style:{position:"absolute",inset:0,borderRadius:8,background:"#e5e7eb",animation:"flopay-pulse 1.5s ease-in-out infinite",pointerEvents:"none"}}),(0,Dn.jsx)("div",{ref:_e,"data-testid":"flopay-direct-paypal-container",tabIndex:-1,role:"group","aria-label":"PayPal payment method",style:{minHeight:Xo,display:"flex",opacity:Pe?1:0},"aria-busy":He||ye},be)]},be),
|
|
3
|
+
${Qt.join(`
|
|
4
|
+
`)}`]}):null;return $&&!J?Oe?(0,Dn.jsx)("div",{children:yr}):null:(0,Dn.jsxs)("div",{children:[yr,fe&&(0,Dn.jsx)(Yr,{identity:fe.identity,methodLabel:fe.methodLabel,testId:"flopay-direct-paypal-identity-pane",onComplete:E,onCancel:()=>E(null)}),(0,Dn.jsxs)("div",{"aria-hidden":K||fe?!0:void 0,style:K||fe?{position:"relative",height:0,opacity:0,pointerEvents:"none"}:{position:"relative",minHeight:Xo},children:[!Pe&&!K&&(0,Dn.jsx)("div",{"data-testid":"flopay-direct-paypal-placeholder",style:{position:"absolute",inset:0,borderRadius:8,background:"#e5e7eb",animation:"flopay-pulse 1.5s ease-in-out infinite",pointerEvents:"none"}}),(0,Dn.jsx)("div",{ref:_e,"data-testid":"flopay-direct-paypal-container",tabIndex:-1,role:"group","aria-label":"PayPal payment method",style:{minHeight:Xo,display:"flex",opacity:Pe?1:0},"aria-busy":He||ye},be)]},be),st&&(0,Dn.jsx)("button",{ref:G,type:"button","data-testid":"flopay-direct-paypal-focus-target",onClick:an,style:bl,children:"Try PayPal again"})]})}function wo(e){return(0,Dn.jsx)(Xi,{...e})}function Zi(e){return(0,Dn.jsx)(Xi,{...e})}var ko=require("react/jsx-runtime");function Jr({children:e,margin:t,icon:n=!0,styleOverride:r}){return(0,ko.jsxs)("div",{role:"alert","data-testid":"flopay-error",style:{margin:t,padding:"0.625rem 0.875rem",background:"#FEF2F2",border:"1px solid #FECACA",borderRadius:"8px",color:"#991B1B",fontSize:"0.85rem",fontWeight:600,...n?{display:"flex",alignItems:"center",gap:"0.5rem"}:{},...r??{}},children:[n&&(0,ko.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",style:{flexShrink:0},children:(0,ko.jsx)("path",{d:"M12 9v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z",stroke:"#DC2626",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})}),e]})}var Ut=require("react/jsx-runtime");function Ln({status:e,errorMessage:t,authorized:n=!1,processingLabel:r="PROCESSING...",successLabel:o,errorLabel:i="PAYMENT FAILED",successNote:d="You will be automatically redirected, do not close or navigate away from this window."}){return(0,Ut.jsx)("div",{"data-testid":"flopay-processing-overlay","data-status":e,role:"dialog","aria-modal":"true",style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.35)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3,backdropFilter:"blur(2px)"},children:(0,Ut.jsxs)("div",{style:{background:"white",borderRadius:12,padding:"2rem 2.5rem",textAlign:"center",boxShadow:"0 8px 32px rgba(0,0,0,0.18)",minWidth:240,display:"flex",flexDirection:"column",alignItems:"center",gap:16},children:[(0,Ut.jsxs)("div",{style:{width:48,height:48,position:"relative"},children:[e==="processing"&&(0,Ut.jsxs)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{animation:"flopay-spin 0.8s linear infinite"},children:[(0,Ut.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"#e5e7eb",strokeWidth:"3"}),(0,Ut.jsx)("path",{d:"M4 12a8 8 0 018-8v3a5 5 0 00-5 5H4z",fill:"#4A49FF"})]}),e==="success"&&(0,Ut.jsx)("div",{style:{animation:"flopay-pop 0.4s cubic-bezier(0.34,1.56,0.64,1)"},children:(0,Ut.jsxs)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,Ut.jsx)("circle",{cx:"12",cy:"12",r:"11",fill:"#22c55e"}),(0,Ut.jsx)("path",{d:"M7 12.5l3 3 7-7",stroke:"white",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",style:{strokeDasharray:20,strokeDashoffset:20,animation:"flopay-draw 0.4s 0.15s ease forwards"}})]})}),e==="error"&&(0,Ut.jsx)("div",{style:{animation:"flopay-shake 0.4s ease"},children:(0,Ut.jsxs)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,Ut.jsx)("circle",{cx:"12",cy:"12",r:"11",fill:"#ef4444"}),(0,Ut.jsx)("path",{d:"M8 8l8 8M16 8l-8 8",stroke:"white",strokeWidth:"2.5",strokeLinecap:"round",style:{strokeDasharray:12,strokeDashoffset:12,animation:"flopay-draw 0.3s 0.1s ease forwards"}})]})})]}),(0,Ut.jsxs)("span",{style:{fontSize:14,fontWeight:600,letterSpacing:"0.05em",color:e==="success"?"#16a34a":e==="error"?"#dc2626":"#374151"},children:[e==="processing"&&r,e==="success"&&(o??(n?"PAYMENT AUTHORISED":"PAYMENT SUCCESSFUL")),e==="error"&&i]}),e==="success"&&d!==null&&(0,Ut.jsx)("p",{style:{fontSize:13,color:"#6b7280",fontWeight:400,maxWidth:260,lineHeight:1.4,margin:0},children:d}),e==="error"&&t&&(0,Ut.jsx)("p",{style:{fontSize:13,color:"#6b7280",fontWeight:400,maxWidth:260,lineHeight:1.4,margin:0},children:t}),(0,Ut.jsx)("style",{children:`
|
|
5
5
|
@keyframes flopay-spin { to { transform: rotate(360deg); } }
|
|
6
6
|
@keyframes flopay-pop { 0% { transform: scale(0); } 100% { transform: scale(1); } }
|
|
7
7
|
@keyframes flopay-draw { to { stroke-dashoffset: 0; } }
|
|
8
8
|
@keyframes flopay-shake { 0%,100% { transform: translateX(0); } 20%,60% { transform: translateX(-4px); } 40%,80% { transform: translateX(4px); } }
|
|
9
|
-
`})]})})}var Zi=require("@flopay/shared"),Xt=require("react");var Qi=require("react/jsx-runtime");function Io({flopay:e,paypalFlopay:t,options:n,onInstrument:r,children:o}){let[i,d]=(0,Xt.useState)(e instanceof Promise?null:e),[c,C]=(0,Xt.useState)(t instanceof Promise||!t?null:t),y=(0,Xt.useRef)(null),b=(0,Xt.useRef)(null),P=Gr(r);(0,Xt.useEffect)(()=>{P({class:"lifecycle",name:"checkout.mount"})},[P]),(0,Xt.useEffect)(()=>{i&&P({class:"lifecycle",name:"sdk.initialize.ready"})},[P,i]),(0,Xt.useEffect)(()=>{if(i)return jt(i)?.subscribe?.(P)},[P,i]),(0,Xt.useEffect)(()=>{if(!(!c||c===i))return jt(c)?.subscribe?.(P)},[P,i,c]),(0,Xt.useEffect)(()=>{if(!i)return;let m=jt(i);return y.current=m?.beginCheckout()??m?.now()??0,m?.log({name:"checkout.mount",stage:"checkout_mount"}),()=>{m?.log({name:"checkout.unmount",stage:"unmount"})}},[i]),(0,Xt.useEffect)(()=>{let m=!1;return e instanceof Promise?e.then(S=>{m||d(S)},()=>{m||P({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED"})}):d(e),()=>{m=!0}},[P,e]),(0,Xt.useEffect)(()=>{let m=!1;if(!t){C(null);return}return t instanceof Promise?t.then(S=>{m||C(S)},()=>{m||P({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED",provider:"paypal"})}):C(t),()=>{m=!0}},[P,t]),(0,Xt.useEffect)(()=>{if(!i||b.current===i)return;b.current=i;let m=jt(i);m?.log({name:"checkout.rendered",stage:"checkout_render"}),P({class:"lifecycle",name:"checkout.rendered"}),m?.performance({stage:"checkout_render",durationMs:m.elapsed(y.current??0),durationMode:"machine"})},[P,i]);let F=(0,Zi.resolveBillingApiUrl)(n?.billingApiUrl),A=(0,Xt.useMemo)(()=>({flopay:i,paypalFlopay:c,billingApiUrl:F,emitInstrument:P}),[i,c,F,P]);return(0,Qi.jsx)(Fn.Provider,{value:A,children:o})}var Zo="flopay_recent_completion_";function Xr(e){if(!(!e||typeof window>"u"))try{let t={expiresAt:Date.now()+6e4};window.sessionStorage.setItem(Zo+e,JSON.stringify(t))}catch{}}function Da(e){if(!e||typeof window>"u")return!1;try{let t=window.sessionStorage.getItem(Zo+e);if(!t)return!1;let n=JSON.parse(t);return typeof n?.expiresAt!="number"||n.expiresAt<=Date.now()?(window.sessionStorage.removeItem(Zo+e),!1):!0}catch{return!1}}var Zr=require("@flopay/js"),ze=require("@flopay/shared");var Ro="card";async function Pl(e,t,n){if(n){if(typeof e.retrieveSetupIntent!="function")return null;let{setupIntent:i,error:d}=await e.retrieveSetupIntent(t);return{error:d,intent:i??null}}if(typeof e.retrievePaymentIntent!="function")return null;let{paymentIntent:r,error:o}=await e.retrievePaymentIntent(t);return{error:o,intent:r??null}}async function Cl(e,t,n,r){if(r){if(typeof e.confirmCardSetup!="function")return null;let{setupIntent:d,error:c}=await e.confirmCardSetup(t,n);return{error:c,intent:d??null}}if(typeof e.confirmCardPayment!="function")return null;let{paymentIntent:o,error:i}=await e.confirmCardPayment(t,n);return{error:i,intent:o??null}}function Na(e,t){return Object.assign(e,{checkoutMethod:t})}function cr(e,t){let n=e instanceof ze.FloPayError?e:new ze.FloPayError(e instanceof Error?e.message:"Payment provider failed.","api_error",{code:"provider_runtime_failure"});return Object.assign(n,{checkoutMethod:t,telemetryFailureCategory:"provider_runtime",telemetryRequestCategory:"provider_sdk"})}async function Eo(e,t){try{return await e()}catch(n){throw cr(n,t)}}function es(e){return!e?.type||!e.threeDSecureToken||e.type!=="3ds_required"&&e.type!=="paypal_redirect_required"?null:{type:e.type,threeDSecureToken:e.threeDSecureToken,paymentMethodId:e.paymentMethodId}}function Sl(e){return e.status==="succeeded"||e.status==="declined"}async function ts(e){if(typeof document>"u"||typeof window>"u")throw new ze.FloPayError("3DS challenge requires a browser environment.","api_error",{code:"three_ds_no_window"});if(e.signal?.aborted)throw new ze.FloPayError("Card authentication was cancelled.","api_error",{code:"three_ds_aborted"});let t=3e5,n=1e3,r=15e3,o=`${e.billingApiUrl.replace(/\/$/,"")}/v1/checkouts/sessions/${encodeURIComponent(e.sessionId)}/3ds/complete`,i=async()=>{let b=new AbortController,P=()=>b.abort();e.signal?.aborted?b.abort():e.signal?.addEventListener("abort",P);let F=window.setTimeout(()=>b.abort(),r);try{let A=await fetch(o,{method:"POST",headers:{"x-checkout-session-token":e.nonce,"content-type":"application/json"},body:"{}",signal:b.signal});if(!A.ok)return{status:"unknown"};let m=await A.json().catch(()=>null);return wl(m)}catch{return{status:"unknown"}}finally{window.clearTimeout(F),e.signal?.removeEventListener("abort",P)}},d=document.activeElement instanceof HTMLElement?document.activeElement:null,c=document.createElement("div");c.setAttribute("data-flopay-auto-3ds-overlay","1"),c.setAttribute("role","dialog"),c.setAttribute("aria-modal","true"),c.setAttribute("aria-label","Card authentication"),c.style.cssText=["position:fixed","inset:0","z-index:2147483647","background:rgba(15,23,42,0.6)","display:flex","align-items:center","justify-content:center","padding:16px"].join(";");let C=document.createElement("iframe");C.setAttribute("title","Card authentication"),C.setAttribute("allow","payment"),C.tabIndex=0,C.style.cssText=["width:min(100%,460px)","height:min(100%,640px)","border:0","border-radius:12px","background:#fff","box-shadow:0 12px 30px rgba(0,0,0,0.35)"].join(";"),C.src=e.nextActionRedirectUrl,c.appendChild(C),document.body.appendChild(c),C.focus();let y=null;try{y=new URL(e.billingApiUrl,window.location.href).origin}catch{y=null}try{let b=await new Promise((P,F)=>{let A=!1,m=0,S=0,ye=0,U=!1,w=()=>{window.clearTimeout(m),window.clearInterval(S),window.clearTimeout(ye),window.removeEventListener("message",Y),C.removeEventListener("load",q),e.signal?.removeEventListener("abort",le)},ce=async()=>{if(!(A||U)){U=!0;try{let ge=await i();if(A||!Sl(ge))return;A=!0,w(),P(ge)}finally{U=!1}}},q=()=>{window.clearTimeout(ye),ye=window.setTimeout(()=>{ce()},250)},le=()=>{A||(A=!0,w(),F(new ze.FloPayError("Card authentication was cancelled.","api_error",{code:"three_ds_aborted"})))},Y=ge=>{if(ge.source!==C.contentWindow||y&&ge.origin!==y)return;let qe=ge.data;!qe||typeof qe!="object"||qe.source!=="flopay-vault-3ds-return"||A||(A=!0,w(),P(null))};m=window.setTimeout(()=>{A||(A=!0,w(),F(new ze.FloPayError("Card authentication timed out.","api_error",{code:"three_ds_timeout"})))},t),S=window.setInterval(()=>{ce()},n),C.addEventListener("load",q),window.addEventListener("message",Y),e.signal?.addEventListener("abort",le),e.signal?.aborted&&le()});return b||await i()}finally{c.parentNode?.removeChild(c),d?.isConnected&&d.focus()}}function wl(e){if(!e||typeof e!="object")return{status:"unknown"};let t=typeof e.status=="string"?e.status:"unknown",n=typeof e.providerIntentId=="string"?e.providerIntentId:null;switch(t){case"succeeded":return{status:"succeeded",providerIntentId:n};case"declined":return{status:"declined",providerIntentId:n,declineReason:typeof e.declineReason=="string"?e.declineReason:null,gatewayDeclineReason:typeof e.gatewayDeclineReason=="string"?e.gatewayDeclineReason:null};case"requires_action":return{status:"requires_action",providerIntentId:n,nextActionRedirectUrl:typeof e.nextActionRedirectUrl=="string"?e.nextActionRedirectUrl:null};case"pending":return{status:"pending",providerIntentId:n};case"timeout":return{status:"timeout",providerIntentId:n};case"no_attempt":return{status:"no_attempt"};default:return{status:"unknown"}}}function Pr(e,t="Payment failed. Please try again.",n){let r=n?.checkoutMethod??e?.checkoutMethod??(e?.type==="paypal_redirect_required"?"paypal":"card"),o=e?.message??t,i=br(o)??o;return Na(new ze.FloPayError(i,"api_error",{code:(0,ze.normalizeCheckoutFailureOutcome)(e?.outcome)??(0,ze.normalizeCheckoutFailureOutcome)(e?.type)??e?.gatewayErrorCode}),r)}function La(e){return typeof window<"u"&&window.location.href?window.location.href:e.successUrl||e.cancelUrl||void 0}function Qo(e){return typeof e=="string"&&e.startsWith("pi_")&&e.includes("_secret_")}function ns(e,t){let n=[e?.threeDSecureToken,e?.clientSecret,e?.stripeClientSecret];for(let o of n)if(typeof o=="string"&&o.length>0&&(!t?.requirePaymentIntentClientSecret||Qo(o)))return o;let r=e?.data;if(r&&typeof r=="object"){let o=r,i=[o.threeDSecureToken,o.clientSecret,o.stripeClientSecret,o.id];for(let c of i)if(typeof c=="string"&&c.length>0&&(!t?.requirePaymentIntentClientSecret||Qo(c)))return c;let d=o.gateways;if(d&&typeof d=="object"){let c=d.stripe;if(c&&typeof c=="object"){let C=c,y=[C.stripeClientSecret,C.clientSecret];for(let b of y)if(typeof b=="string"&&b.length>0&&(!t?.requirePaymentIntentClientSecret||Qo(b)))return b}}}}async function kl({billingApiUrl:e,sessionId:t,nonce:n,responseJson:r}){let o=ns(r,{requirePaymentIntentClientSecret:!0});if(typeof o=="string"&&o.length>0)return{type:"3ds_required",threeDSecureToken:o};if(!t)return null;try{let c=(await new Zr.PaymentAPI(e,{telemetry:!1}).getUnifiedCheckoutSession(t,n)).data.stripe?.clientSecret;if(Qo(c))return{type:"3ds_required",threeDSecureToken:c}}catch{}return null}async function Qr({billingApiUrl:e,sessionId:t,session:n,nonce:r,tokenizedData:o,returnUrl:i,telemetry:d}){let c=e.replace(/\/+$/,""),C=t??n.id,y=r??n.clientSecret,b=n.customer?.id??n.accountData?.userId??"",P=n.customer?.email??n.accountData?.email??"",F=n.customer?.firstName??n.accountData?.firstName??"",A=n.customer?.lastName??n.accountData?.lastName??"",m=n.customer?.country??n.accountData?.country??void 0,S=n.customer?.zip??n.accountData?.zip??void 0,U=await new Zr.PaymentAPI(c,d===!1?{telemetry:!1}:void 0).processPayment(b,{sessionId:C,nonce:y,paymentMethodCategory:"saved",tokenizedData:o,accountData:{userId:b,email:P,firstName:F,lastName:A,country:m,zip:S},returnUrl:i??La(n)});if(U.ok){let q=typeof U.json=="function"?await U.json().catch(()=>null):null;return(0,ze.isAuthorizationOnlySession)(n)||q?.status==="authorized"?{type:"success",result:{status:"authorized",paymentId:typeof q?.paymentId=="string"?q.paymentId:n.paymentId,sessionId:typeof q?.sessionId=="string"?q.sessionId:C,authorizationExpiresAt:typeof q?.authorizationExpiresAt=="string"?q.authorizationExpiresAt:n.authorizationExpiresAt,paymentMethodId:vo(o),checkoutMethod:o?o.isPaypal?"paypal":"card":void 0}}:{type:"success",result:{status:"succeeded",paymentIntentId:o?.threeDSecureActionResultTokenId,paymentMethodId:vo(o),checkoutMethod:o?o.isPaypal?"paypal":"card":void 0}}}let w;try{w=await U.json()}catch{throw new ze.FloPayError("Payment failed. Please try again.","api_error",{code:"InvalidPaymentProcessResponse",statusCode:U.status})}if(w?.type==="paypal_redirect_required"||w?.type==="3ds_required"){let q=ns(w);if(!q)throw new ze.FloPayError("Authentication is required but no redirect token was provided.","api_error",{code:"InvalidPaymentProcessResponse",statusCode:U.status});return{type:w.type,threeDSecureToken:q,paymentMethodId:w.paymentMethodId}}if(w?.gatewayErrorCode==="authentication_required"){let q=await kl({billingApiUrl:c,sessionId:C,nonce:y,responseJson:w});if(q)return q;throw Na(new ze.FloPayError("Your card requires authentication. Please enter your payment details below.","api_error",{code:"authentication_required"}),"card")}let ce=new ze.FloPayError(w?.message??"Payment failed. Please try again.","api_error",{code:w?.code??w?.gatewayErrorCode,declineCode:w?.declineCode??w?.gatewayDeclineReason,statusCode:U.status});throw Object.assign(ce,{telemetryOutcome:(0,ze.classifyPaymentRejection)(U.status,w)})}async function ea(e,{flopay:t,paypalFlopay:n,attempt3DS:r,billingApiUrl:o,sessionId:i,session:d,returnUrl:c,telemetry:C}){let y=t?.getRawProvider();if(!y)throw cr(new ze.FloPayError("Payment provider is not available.","api_error"),"card");if(e.type==="3ds_required"){if(!r||!e.threeDSecureToken)throw Na(new ze.FloPayError("Your card requires authentication. Please enter your payment details below.","api_error",{code:"authentication_required"}),"card");let b=(0,ze.isSetupIntentClientSecret)(e.threeDSecureToken),P=null,F=e.paymentMethodId,A=await Eo(()=>Pl(y,e.threeDSecureToken,b),"card");if(A){if(A.error)throw cr(new ze.FloPayError(A.error.message??`Failed to retrieve 3DS ${b?"setup":"payment"} status.`,"api_error",{code:A.error.code}),"card");let S=A.intent;!F&&S?.payment_method&&(typeof S.payment_method=="string"?F=S.payment_method:"id"in S.payment_method&&(F=S.payment_method.id??void 0))}let m=F?await Eo(()=>Cl(y,e.threeDSecureToken,{payment_method:F,return_url:c??La(d)??window.location.href},b),"card"):null;if(m){if(m.error)throw cr(new ze.FloPayError(m.error.message??"3DS authentication failed.","api_error",{code:m.error.code}),"card");P=m.intent}else{let S=await Eo(()=>y.handleNextAction({clientSecret:e.threeDSecureToken}),"card");if(S.error)throw cr(new ze.FloPayError(S.error.message??"3DS authentication failed.","api_error",{code:S.error.code}),"card");P=(b?S.setupIntent:S.paymentIntent)??null}if(P&&(P.status==="requires_capture"||P.status==="succeeded"||P.status==="processing")){let S=await Qr({billingApiUrl:o,sessionId:i,session:d,telemetry:C,tokenizedData:{id:P.id,type:"card",threeDSecureActionResultTokenId:P.id},returnUrl:c});return S.type==="success"?{...S.result,paymentIntentId:S.result.paymentIntentId??P.id,paymentMethodId:S.result.paymentMethodId??F}:ea(S,{flopay:t,paypalFlopay:n,attempt3DS:r,billingApiUrl:o,sessionId:i,session:d,returnUrl:c,telemetry:C})}throw cr(new ze.FloPayError("3DS authentication did not complete successfully.","api_error"),"card")}if(e.type==="paypal_redirect_required"){let b=(n??t)?.getRawProvider();if(!b)throw cr(new ze.FloPayError("PayPal is not available.","api_error"),"paypal");if(e.paymentMethodId){let{error:F}=await Eo(()=>b.handleNextAction({clientSecret:e.threeDSecureToken}),"paypal");if(F)throw cr(new ze.FloPayError(F.message??"PayPal authorization failed.","api_error",{code:F.code}),"paypal");return{status:"succeeded",checkoutMethod:"paypal"}}let{error:P}=await Eo(()=>b.confirmPayment({clientSecret:e.threeDSecureToken,confirmParams:{return_url:c??La(d)??window.location.href,payment_method_data:{type:"paypal"}},redirect:"if_required"}),"paypal");if(P)throw cr(new ze.FloPayError(P.message??"PayPal authorization failed.","api_error",{code:P.code}),"paypal");return{status:"succeeded",checkoutMethod:"paypal"}}throw new ze.FloPayError("Unsupported payment redirect state.","api_error")}function _o(e){if(e instanceof ze.FloPayError){let r=br(e.message);return r&&r!==e.message?Object.assign(new ze.FloPayError(r,e.type,{code:e.code,declineCode:e.declineCode,param:e.param,statusCode:e.statusCode}),{checkoutMethod:e.checkoutMethod,telemetryFailureCategory:e.telemetryFailureCategory,telemetryOutcome:e.telemetryOutcome,telemetryRequestCategory:e.telemetryRequestCategory}):e}let t=e instanceof Error?e.message:"Payment failed. Please try again.",n=br(t)??t;return new ze.FloPayError(n,"api_error")}function ta(e){let t=e.data.stripe?.publishableKey,n=!!e.data.paypal?.publishableKey;if(!t&&!n)throw new ze.FloPayError("Session advertises no supported gateways (expected `gateways.stripe` and/or `gateways.paypal`).","validation_error");return t?{publishableKey:t,paypalPublishableKey:e.data.stripe?.paypalPublishableKey??t}:{}}async function na({publishableKey:e,paypalPublishableKey:t,billingApiUrl:n,locale:r,telemetry:o}){if(!e)return{flopay:null,paypalFlopay:null};let i=!!t&&t!==e,[d,c]=await Promise.all([(0,Zr.loadFloPay)(e,{billingApiUrl:n,locale:r,telemetry:o}),i?(0,Zr.loadFloPay)(t,{billingApiUrl:n,locale:r,telemetry:o}).catch(C=>(console.warn("[FloPay] Failed to load PayPal Stripe instance:",C),null)):Promise.resolve(null)]);return{flopay:d,paypalFlopay:t?i?c:d:null}}var ur=require("@flopay/js"),u=require("@flopay/shared"),Ft=require("@stripe/react-stripe-js"),a=Li(require("react"),1);function rs(e){let t=e??(typeof navigator<"u"?navigator.userAgent:"");return t?!!(/FBAN|FBAV|FB_IAB|FBIOS|Instagram|musical_ly|BytedanceWebview|TikTok/i.test(t)||/Twitter|Snapchat|Pinterest|LinkedInApp|Line\/|MicroMessenger|GSA\//i.test(t)||/Android.*;\s?wv\)/.test(t)||/(iPhone|iPad|iPod).*AppleWebKit(?!.*Safari)/.test(t)):!1}var os={alipay:"https://cdn.flopay.com/sdk-logos/v1/alipay.svg",bancontact:"https://cdn.flopay.com/sdk-logos/v1/bancontact.svg",blik:"https://cdn.flopay.com/sdk-logos/v1/blik.svg",eps:"https://cdn.flopay.com/sdk-logos/v1/eps.svg",giropay:"https://cdn.flopay.com/sdk-logos/v1/giropay.svg",ideal:"https://cdn.flopay.com/sdk-logos/v1/ideal.svg",klarna:"https://cdn.flopay.com/sdk-logos/v1/klarna.svg",p24:"https://cdn.flopay.com/sdk-logos/v1/p24.svg",sepa_debit:"https://cdn.flopay.com/sdk-logos/v1/sepa_debit.svg",wechat_pay:"https://cdn.flopay.com/sdk-logos/v1/wechat_pay.svg"};var dr=require("react"),as=require("react/jsx-runtime");function eo({capture:e,html:t,messageToken:n,expectedOrigin:r,theme:o,containerStyle:i,onReady:d,onError:c,onValidation:C}){let y=(0,dr.useRef)(null),b=(0,dr.useRef)(d),P=(0,dr.useRef)(c),F=(0,dr.useRef)(C);b.current=d,P.current=c,F.current=C;let A=(0,dr.useRef)(o);return A.current=o,(0,dr.useEffect)(()=>{let m=y.current;if(!m)return;let S=!0,ye=!1,U=()=>{!S||ye||(ye=!0,b.current?.())},w=e.on("ready",()=>{U()}),ce=e.on("error",Y=>{P.current?.(Y.message??"There was a problem loading the secure card form.")}),q=e.on("validation",Y=>{F.current?.(Y.message??null)}),le={html:t,...n?{messageToken:n}:{},...r?{expectedOrigin:r}:{},...A.current?{theme:A.current}:{}};return e.mount(m,le).then(()=>{U()}).catch(Y=>{S&&P.current?.(Y instanceof Error?Y.message:"Failed to load the secure card form.")}),()=>{S=!1,w(),ce(),q(),e.unmount()}},[e,t,n,r]),(0,dr.useEffect)(()=>{o&&e.applyTheme?.(o)},[e,o]),(0,as.jsx)("div",{ref:y,"data-testid":"flopay-vault-card-fields",style:i})}function to(e,t=.12){let n=/^#?([0-9a-fA-F]{6})$/.exec(e.trim());if(!n)return e;let r=parseInt(n[1],16),o=Math.max(0,Math.min(1,1-t)),i=Math.round((r>>16&255)*o),d=Math.round((r>>8&255)*o),c=Math.round((r&255)*o);return`#${(1<<24|i<<16|d<<8|c).toString(16).slice(1)}`}function Oa(e){if(typeof e=="number"||typeof e=="string")return e}function ra({appearance:e,buttonsStyles:t,layout:n="default"}){let r=e?.variables,o=y=>typeof y=="string"&&y?y:void 0,i=t.submitButton,d=o(r?.colorPrimary)??o(i?.backgroundColor)??"#4A49FF",c=n==="buttons",C=t.nameInput;return{primaryColor:d,primaryHoverColor:o(r?.colorPrimaryHover)??to(d,.12),inputBackgroundColor:o(t.cardInputBackground)??o(r?.colorBackground)??"#ffffff",textColor:o(t.cardInputColor)??o(C?.color)??o(r?.colorText)??"#262833",borderColor:o(t.cardInputBorder)??(c?"#e5e7eb":"#A4A4FF"),placeholderColor:o(t.cardInputPlaceholderColor)??"#9ca3af",errorColor:o(r?.colorDanger)??"#dc2626",successColor:"#16a34a",fontFamily:o(C?.fontFamily)??o(r?.fontFamily)??"Poppins, sans-serif",fontSize:o(t.cardInputFontSize)??o(r?.fontSizeBase)??"16px",fontWeight:String(Oa(C?.fontWeight)??400),borderRadius:o(r?.borderRadius)??"8px"}}var l=require("react/jsx-runtime"),nr="flopay_stripe_resume",is="flopay_wallet_resume",ys="fw1",Il=300*1e3,El=900,Rl=25e3,za={};function fs(e){return e instanceof u.FloPayError&&(e.type==="validation_error"||e.statusCode===400||e.statusCode===422)}async function aa(e,t,...n){let r=n[2].provider;t?.({class:"lifecycle",name:"payment.intent.started",provider:r});try{return await new ur.PaymentAPI(e).createSessionIntent(...n)}catch(o){throw fs(o)||t?.({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:"intent_create",provider:r}),o}}var To="flopay_paypal_resume",_l=250,ss="Just a moment \u2014 we are finalizing your order. Please press pay again.";function Va(e,t,n){e?.error({errorCode:"PROVIDER_LOAD_FAILED",failureCategory:"provider_runtime",stage:"provider_load",provider:t,paymentMethodCategory:n,requestCategory:"provider_sdk"})}async function ia({billingApiUrl:e,sessionId:t,nonce:n,request:r}){if(!(!t||!n))try{await new ur.PaymentAPI(e,{telemetry:!1}).reportSessionIntentDecline(t,n,r)}catch{}}function Tl(e){return e instanceof u.FloPayError&&typeof e.statusCode=="number"&&e.statusCode>=400&&e.statusCode<500}function Ua(e){return e?.html?{html:e.html,...e.messageToken?{messageToken:e.messageToken}:{},...e.expectedOrigin?{expectedOrigin:e.expectedOrigin}:{}}:null}function gs({event:e,fallbackEmail:t,fallbackName:n}){let r=e.billingDetails,o=Er(r?.name),i=Er(n);return Pn({email:((0,u.isValidEmail)(t?.trim())?t?.trim():void 0)??r?.email?.trim(),firstName:i.firstName??o.firstName,lastName:i.lastName??o.lastName})}async function xl({event:e,prepared:t,email:n,billingName:r,methodLabel:o,collect:i}){let d=gs({event:e,fallbackEmail:t?.accountPatch?.email??n,fallbackName:[t?.accountPatch?.firstName,t?.accountPatch?.lastName].filter(Boolean).join(" ")||r});return(0,u.isValidEmail)(d.email)?d:i(o,d)}var Ml=`
|
|
9
|
+
`})]})})}var Qi=require("@flopay/shared"),Zt=require("react");var es=require("react/jsx-runtime");function Io({flopay:e,paypalFlopay:t,options:n,onInstrument:r,children:o}){let[i,d]=(0,Zt.useState)(e instanceof Promise?null:e),[c,C]=(0,Zt.useState)(t instanceof Promise||!t?null:t),y=(0,Zt.useRef)(null),b=(0,Zt.useRef)(null),P=Gr(r);(0,Zt.useEffect)(()=>{P({class:"lifecycle",name:"checkout.mount"})},[P]),(0,Zt.useEffect)(()=>{i&&P({class:"lifecycle",name:"sdk.initialize.ready"})},[P,i]),(0,Zt.useEffect)(()=>{if(i)return jt(i)?.subscribe?.(P)},[P,i]),(0,Zt.useEffect)(()=>{if(!(!c||c===i))return jt(c)?.subscribe?.(P)},[P,i,c]),(0,Zt.useEffect)(()=>{if(!i)return;let m=jt(i);return y.current=m?.beginCheckout()??m?.now()??0,m?.log({name:"checkout.mount",stage:"checkout_mount"}),()=>{m?.log({name:"checkout.unmount",stage:"unmount"})}},[i]),(0,Zt.useEffect)(()=>{let m=!1;return e instanceof Promise?e.then(S=>{m||d(S)},()=>{m||P({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED"})}):d(e),()=>{m=!0}},[P,e]),(0,Zt.useEffect)(()=>{let m=!1;if(!t){C(null);return}return t instanceof Promise?t.then(S=>{m||C(S)},()=>{m||P({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED",provider:"paypal"})}):C(t),()=>{m=!0}},[P,t]),(0,Zt.useEffect)(()=>{if(!i||b.current===i)return;b.current=i;let m=jt(i);m?.log({name:"checkout.rendered",stage:"checkout_render"}),P({class:"lifecycle",name:"checkout.rendered"}),m?.performance({stage:"checkout_render",durationMs:m.elapsed(y.current??0),durationMode:"machine"})},[P,i]);let F=(0,Qi.resolveBillingApiUrl)(n?.billingApiUrl),A=(0,Zt.useMemo)(()=>({flopay:i,paypalFlopay:c,billingApiUrl:F,emitInstrument:P}),[i,c,F,P]);return(0,es.jsx)(Fn.Provider,{value:A,children:o})}var Zo="flopay_recent_completion_";function Xr(e){if(!(!e||typeof window>"u"))try{let t={expiresAt:Date.now()+6e4};window.sessionStorage.setItem(Zo+e,JSON.stringify(t))}catch{}}function La(e){if(!e||typeof window>"u")return!1;try{let t=window.sessionStorage.getItem(Zo+e);if(!t)return!1;let n=JSON.parse(t);return typeof n?.expiresAt!="number"||n.expiresAt<=Date.now()?(window.sessionStorage.removeItem(Zo+e),!1):!0}catch{return!1}}var Zr=require("@flopay/js"),ze=require("@flopay/shared");var Ro="card";async function Cl(e,t,n){if(n){if(typeof e.retrieveSetupIntent!="function")return null;let{setupIntent:i,error:d}=await e.retrieveSetupIntent(t);return{error:d,intent:i??null}}if(typeof e.retrievePaymentIntent!="function")return null;let{paymentIntent:r,error:o}=await e.retrievePaymentIntent(t);return{error:o,intent:r??null}}async function Sl(e,t,n,r){if(r){if(typeof e.confirmCardSetup!="function")return null;let{setupIntent:d,error:c}=await e.confirmCardSetup(t,n);return{error:c,intent:d??null}}if(typeof e.confirmCardPayment!="function")return null;let{paymentIntent:o,error:i}=await e.confirmCardPayment(t,n);return{error:i,intent:o??null}}function Oa(e,t){return Object.assign(e,{checkoutMethod:t})}function cr(e,t){let n=e instanceof ze.FloPayError?e:new ze.FloPayError(e instanceof Error?e.message:"Payment provider failed.","api_error",{code:"provider_runtime_failure"});return Object.assign(n,{checkoutMethod:t,telemetryFailureCategory:"provider_runtime",telemetryRequestCategory:"provider_sdk"})}async function Eo(e,t){try{return await e()}catch(n){throw cr(n,t)}}function ts(e){return!e?.type||!e.threeDSecureToken||e.type!=="3ds_required"&&e.type!=="paypal_redirect_required"?null:{type:e.type,threeDSecureToken:e.threeDSecureToken,paymentMethodId:e.paymentMethodId}}function wl(e){return e.status==="succeeded"||e.status==="declined"}async function ns(e){if(typeof document>"u"||typeof window>"u")throw new ze.FloPayError("3DS challenge requires a browser environment.","api_error",{code:"three_ds_no_window"});if(e.signal?.aborted)throw new ze.FloPayError("Card authentication was cancelled.","api_error",{code:"three_ds_aborted"});let t=3e5,n=1e3,r=15e3,o=`${e.billingApiUrl.replace(/\/$/,"")}/v1/checkouts/sessions/${encodeURIComponent(e.sessionId)}/3ds/complete`,i=async()=>{let b=new AbortController,P=()=>b.abort();e.signal?.aborted?b.abort():e.signal?.addEventListener("abort",P);let F=window.setTimeout(()=>b.abort(),r);try{let A=await fetch(o,{method:"POST",headers:{"x-checkout-session-token":e.nonce,"content-type":"application/json"},body:"{}",signal:b.signal});if(!A.ok)return{status:"unknown"};let m=await A.json().catch(()=>null);return kl(m)}catch{return{status:"unknown"}}finally{window.clearTimeout(F),e.signal?.removeEventListener("abort",P)}},d=document.activeElement instanceof HTMLElement?document.activeElement:null,c=document.createElement("div");c.setAttribute("data-flopay-auto-3ds-overlay","1"),c.setAttribute("role","dialog"),c.setAttribute("aria-modal","true"),c.setAttribute("aria-label","Card authentication"),c.style.cssText=["position:fixed","inset:0","z-index:2147483647","background:rgba(15,23,42,0.6)","display:flex","align-items:center","justify-content:center","padding:16px"].join(";");let C=document.createElement("iframe");C.setAttribute("title","Card authentication"),C.setAttribute("allow","payment"),C.tabIndex=0,C.style.cssText=["width:min(100%,460px)","height:min(100%,640px)","border:0","border-radius:12px","background:#fff","box-shadow:0 12px 30px rgba(0,0,0,0.35)"].join(";"),C.src=e.nextActionRedirectUrl,c.appendChild(C),document.body.appendChild(c),C.focus();let y=null;try{y=new URL(e.billingApiUrl,window.location.href).origin}catch{y=null}try{let b=await new Promise((P,F)=>{let A=!1,m=0,S=0,ye=0,U=!1,w=()=>{window.clearTimeout(m),window.clearInterval(S),window.clearTimeout(ye),window.removeEventListener("message",Y),C.removeEventListener("load",q),e.signal?.removeEventListener("abort",le)},ce=async()=>{if(!(A||U)){U=!0;try{let ge=await i();if(A||!wl(ge))return;A=!0,w(),P(ge)}finally{U=!1}}},q=()=>{window.clearTimeout(ye),ye=window.setTimeout(()=>{ce()},250)},le=()=>{A||(A=!0,w(),F(new ze.FloPayError("Card authentication was cancelled.","api_error",{code:"three_ds_aborted"})))},Y=ge=>{if(ge.source!==C.contentWindow||y&&ge.origin!==y)return;let qe=ge.data;!qe||typeof qe!="object"||qe.source!=="flopay-vault-3ds-return"||A||(A=!0,w(),P(null))};m=window.setTimeout(()=>{A||(A=!0,w(),F(new ze.FloPayError("Card authentication timed out.","api_error",{code:"three_ds_timeout"})))},t),S=window.setInterval(()=>{ce()},n),C.addEventListener("load",q),window.addEventListener("message",Y),e.signal?.addEventListener("abort",le),e.signal?.aborted&&le()});return b||await i()}finally{c.parentNode?.removeChild(c),d?.isConnected&&d.focus()}}function kl(e){if(!e||typeof e!="object")return{status:"unknown"};let t=typeof e.status=="string"?e.status:"unknown",n=typeof e.providerIntentId=="string"?e.providerIntentId:null;switch(t){case"succeeded":return{status:"succeeded",providerIntentId:n};case"declined":return{status:"declined",providerIntentId:n,declineReason:typeof e.declineReason=="string"?e.declineReason:null,gatewayDeclineReason:typeof e.gatewayDeclineReason=="string"?e.gatewayDeclineReason:null};case"requires_action":return{status:"requires_action",providerIntentId:n,nextActionRedirectUrl:typeof e.nextActionRedirectUrl=="string"?e.nextActionRedirectUrl:null};case"pending":return{status:"pending",providerIntentId:n};case"timeout":return{status:"timeout",providerIntentId:n};case"no_attempt":return{status:"no_attempt"};default:return{status:"unknown"}}}function Pr(e,t="Payment failed. Please try again.",n){let r=n?.checkoutMethod??e?.checkoutMethod??(e?.type==="paypal_redirect_required"?"paypal":"card"),o=e?.message??t,i=br(o)??o;return Oa(new ze.FloPayError(i,"api_error",{code:(0,ze.normalizeCheckoutFailureOutcome)(e?.outcome)??(0,ze.normalizeCheckoutFailureOutcome)(e?.type)??e?.gatewayErrorCode}),r)}function Na(e){return typeof window<"u"&&window.location.href?window.location.href:e.successUrl||e.cancelUrl||void 0}function Qo(e){return typeof e=="string"&&e.startsWith("pi_")&&e.includes("_secret_")}function rs(e,t){let n=[e?.threeDSecureToken,e?.clientSecret,e?.stripeClientSecret];for(let o of n)if(typeof o=="string"&&o.length>0&&(!t?.requirePaymentIntentClientSecret||Qo(o)))return o;let r=e?.data;if(r&&typeof r=="object"){let o=r,i=[o.threeDSecureToken,o.clientSecret,o.stripeClientSecret,o.id];for(let c of i)if(typeof c=="string"&&c.length>0&&(!t?.requirePaymentIntentClientSecret||Qo(c)))return c;let d=o.gateways;if(d&&typeof d=="object"){let c=d.stripe;if(c&&typeof c=="object"){let C=c,y=[C.stripeClientSecret,C.clientSecret];for(let b of y)if(typeof b=="string"&&b.length>0&&(!t?.requirePaymentIntentClientSecret||Qo(b)))return b}}}}async function Il({billingApiUrl:e,sessionId:t,nonce:n,responseJson:r}){let o=rs(r,{requirePaymentIntentClientSecret:!0});if(typeof o=="string"&&o.length>0)return{type:"3ds_required",threeDSecureToken:o};if(!t)return null;try{let c=(await new Zr.PaymentAPI(e,{telemetry:!1}).getUnifiedCheckoutSession(t,n)).data.stripe?.clientSecret;if(Qo(c))return{type:"3ds_required",threeDSecureToken:c}}catch{}return null}async function Qr({billingApiUrl:e,sessionId:t,session:n,nonce:r,tokenizedData:o,returnUrl:i,telemetry:d}){let c=e.replace(/\/+$/,""),C=t??n.id,y=r??n.clientSecret,b=n.customer?.id??n.accountData?.userId??"",P=n.customer?.email??n.accountData?.email??"",F=n.customer?.firstName??n.accountData?.firstName??"",A=n.customer?.lastName??n.accountData?.lastName??"",m=n.customer?.country??n.accountData?.country??void 0,S=n.customer?.zip??n.accountData?.zip??void 0,U=await new Zr.PaymentAPI(c,d===!1?{telemetry:!1}:void 0).processPayment(b,{sessionId:C,nonce:y,paymentMethodCategory:"saved",tokenizedData:o,accountData:{userId:b,email:P,firstName:F,lastName:A,country:m,zip:S},returnUrl:i??Na(n)});if(U.ok){let q=typeof U.json=="function"?await U.json().catch(()=>null):null;return(0,ze.isAuthorizationOnlySession)(n)||q?.status==="authorized"?{type:"success",result:{status:"authorized",paymentId:typeof q?.paymentId=="string"?q.paymentId:n.paymentId,sessionId:typeof q?.sessionId=="string"?q.sessionId:C,authorizationExpiresAt:typeof q?.authorizationExpiresAt=="string"?q.authorizationExpiresAt:n.authorizationExpiresAt,paymentMethodId:vo(o),checkoutMethod:o?o.isPaypal?"paypal":"card":void 0}}:{type:"success",result:{status:"succeeded",paymentIntentId:o?.threeDSecureActionResultTokenId,paymentMethodId:vo(o),checkoutMethod:o?o.isPaypal?"paypal":"card":void 0}}}let w;try{w=await U.json()}catch{throw new ze.FloPayError("Payment failed. Please try again.","api_error",{code:"InvalidPaymentProcessResponse",statusCode:U.status})}if(w?.type==="paypal_redirect_required"||w?.type==="3ds_required"){let q=rs(w);if(!q)throw new ze.FloPayError("Authentication is required but no redirect token was provided.","api_error",{code:"InvalidPaymentProcessResponse",statusCode:U.status});return{type:w.type,threeDSecureToken:q,paymentMethodId:w.paymentMethodId}}if(w?.gatewayErrorCode==="authentication_required"){let q=await Il({billingApiUrl:c,sessionId:C,nonce:y,responseJson:w});if(q)return q;throw Oa(new ze.FloPayError("Your card requires authentication. Please enter your payment details below.","api_error",{code:"authentication_required"}),"card")}let ce=new ze.FloPayError(w?.message??"Payment failed. Please try again.","api_error",{code:w?.code??w?.gatewayErrorCode,declineCode:w?.declineCode??w?.gatewayDeclineReason,statusCode:U.status});throw Object.assign(ce,{telemetryOutcome:(0,ze.classifyPaymentRejection)(U.status,w)})}async function ea(e,{flopay:t,paypalFlopay:n,attempt3DS:r,billingApiUrl:o,sessionId:i,session:d,returnUrl:c,telemetry:C}){let y=t?.getRawProvider();if(!y)throw cr(new ze.FloPayError("Payment provider is not available.","api_error"),"card");if(e.type==="3ds_required"){if(!r||!e.threeDSecureToken)throw Oa(new ze.FloPayError("Your card requires authentication. Please enter your payment details below.","api_error",{code:"authentication_required"}),"card");let b=(0,ze.isSetupIntentClientSecret)(e.threeDSecureToken),P=null,F=e.paymentMethodId,A=await Eo(()=>Cl(y,e.threeDSecureToken,b),"card");if(A){if(A.error)throw cr(new ze.FloPayError(A.error.message??`Failed to retrieve 3DS ${b?"setup":"payment"} status.`,"api_error",{code:A.error.code}),"card");let S=A.intent;!F&&S?.payment_method&&(typeof S.payment_method=="string"?F=S.payment_method:"id"in S.payment_method&&(F=S.payment_method.id??void 0))}let m=F?await Eo(()=>Sl(y,e.threeDSecureToken,{payment_method:F,return_url:c??Na(d)??window.location.href},b),"card"):null;if(m){if(m.error)throw cr(new ze.FloPayError(m.error.message??"3DS authentication failed.","api_error",{code:m.error.code}),"card");P=m.intent}else{let S=await Eo(()=>y.handleNextAction({clientSecret:e.threeDSecureToken}),"card");if(S.error)throw cr(new ze.FloPayError(S.error.message??"3DS authentication failed.","api_error",{code:S.error.code}),"card");P=(b?S.setupIntent:S.paymentIntent)??null}if(P&&(P.status==="requires_capture"||P.status==="succeeded"||P.status==="processing")){let S=await Qr({billingApiUrl:o,sessionId:i,session:d,telemetry:C,tokenizedData:{id:P.id,type:"card",threeDSecureActionResultTokenId:P.id},returnUrl:c});return S.type==="success"?{...S.result,paymentIntentId:S.result.paymentIntentId??P.id,paymentMethodId:S.result.paymentMethodId??F}:ea(S,{flopay:t,paypalFlopay:n,attempt3DS:r,billingApiUrl:o,sessionId:i,session:d,returnUrl:c,telemetry:C})}throw cr(new ze.FloPayError("3DS authentication did not complete successfully.","api_error"),"card")}if(e.type==="paypal_redirect_required"){let b=(n??t)?.getRawProvider();if(!b)throw cr(new ze.FloPayError("PayPal is not available.","api_error"),"paypal");if(e.paymentMethodId){let{error:F}=await Eo(()=>b.handleNextAction({clientSecret:e.threeDSecureToken}),"paypal");if(F)throw cr(new ze.FloPayError(F.message??"PayPal authorization failed.","api_error",{code:F.code}),"paypal");return{status:"succeeded",checkoutMethod:"paypal"}}let{error:P}=await Eo(()=>b.confirmPayment({clientSecret:e.threeDSecureToken,confirmParams:{return_url:c??Na(d)??window.location.href,payment_method_data:{type:"paypal"}},redirect:"if_required"}),"paypal");if(P)throw cr(new ze.FloPayError(P.message??"PayPal authorization failed.","api_error",{code:P.code}),"paypal");return{status:"succeeded",checkoutMethod:"paypal"}}throw new ze.FloPayError("Unsupported payment redirect state.","api_error")}function _o(e){if(e instanceof ze.FloPayError){let r=br(e.message);return r&&r!==e.message?Object.assign(new ze.FloPayError(r,e.type,{code:e.code,declineCode:e.declineCode,param:e.param,statusCode:e.statusCode}),{checkoutMethod:e.checkoutMethod,telemetryFailureCategory:e.telemetryFailureCategory,telemetryOutcome:e.telemetryOutcome,telemetryRequestCategory:e.telemetryRequestCategory}):e}let t=e instanceof Error?e.message:"Payment failed. Please try again.",n=br(t)??t;return new ze.FloPayError(n,"api_error")}function ta(e){let t=e.data.stripe?.publishableKey,n=!!e.data.paypal?.publishableKey;if(!t&&!n)throw new ze.FloPayError("Session advertises no supported gateways (expected `gateways.stripe` and/or `gateways.paypal`).","validation_error");return t?{publishableKey:t,paypalPublishableKey:e.data.stripe?.paypalPublishableKey??t}:{}}async function na({publishableKey:e,paypalPublishableKey:t,billingApiUrl:n,locale:r,telemetry:o}){if(!e)return{flopay:null,paypalFlopay:null};let i=!!t&&t!==e,[d,c]=await Promise.all([(0,Zr.loadFloPay)(e,{billingApiUrl:n,locale:r,telemetry:o}),i?(0,Zr.loadFloPay)(t,{billingApiUrl:n,locale:r,telemetry:o}).catch(C=>(console.warn("[FloPay] Failed to load PayPal Stripe instance:",C),null)):Promise.resolve(null)]);return{flopay:d,paypalFlopay:t?i?c:d:null}}var ur=require("@flopay/js"),u=require("@flopay/shared"),Ft=require("@stripe/react-stripe-js"),a=Li(require("react"),1);function os(e){let t=e??(typeof navigator<"u"?navigator.userAgent:"");return t?!!(/FBAN|FBAV|FB_IAB|FBIOS|Instagram|musical_ly|BytedanceWebview|TikTok/i.test(t)||/Twitter|Snapchat|Pinterest|LinkedInApp|Line\/|MicroMessenger|GSA\//i.test(t)||/Android.*;\s?wv\)/.test(t)||/(iPhone|iPad|iPod).*AppleWebKit(?!.*Safari)/.test(t)):!1}var as={alipay:"https://cdn.flopay.com/sdk-logos/v1/alipay.svg",bancontact:"https://cdn.flopay.com/sdk-logos/v1/bancontact.svg",blik:"https://cdn.flopay.com/sdk-logos/v1/blik.svg",eps:"https://cdn.flopay.com/sdk-logos/v1/eps.svg",giropay:"https://cdn.flopay.com/sdk-logos/v1/giropay.svg",ideal:"https://cdn.flopay.com/sdk-logos/v1/ideal.svg",klarna:"https://cdn.flopay.com/sdk-logos/v1/klarna.svg",p24:"https://cdn.flopay.com/sdk-logos/v1/p24.svg",sepa_debit:"https://cdn.flopay.com/sdk-logos/v1/sepa_debit.svg",wechat_pay:"https://cdn.flopay.com/sdk-logos/v1/wechat_pay.svg"};var dr=require("react"),is=require("react/jsx-runtime");function eo({capture:e,html:t,messageToken:n,expectedOrigin:r,theme:o,containerStyle:i,onReady:d,onError:c,onValidation:C}){let y=(0,dr.useRef)(null),b=(0,dr.useRef)(d),P=(0,dr.useRef)(c),F=(0,dr.useRef)(C);b.current=d,P.current=c,F.current=C;let A=(0,dr.useRef)(o);return A.current=o,(0,dr.useEffect)(()=>{let m=y.current;if(!m)return;let S=!0,ye=!1,U=()=>{!S||ye||(ye=!0,b.current?.())},w=e.on("ready",()=>{U()}),ce=e.on("error",Y=>{P.current?.(Y.message??"There was a problem loading the secure card form.")}),q=e.on("validation",Y=>{F.current?.(Y.message??null)}),le={html:t,...n?{messageToken:n}:{},...r?{expectedOrigin:r}:{},...A.current?{theme:A.current}:{}};return e.mount(m,le).then(()=>{U()}).catch(Y=>{S&&P.current?.(Y instanceof Error?Y.message:"Failed to load the secure card form.")}),()=>{S=!1,w(),ce(),q(),e.unmount()}},[e,t,n,r]),(0,dr.useEffect)(()=>{o&&e.applyTheme?.(o)},[e,o]),(0,is.jsx)("div",{ref:y,"data-testid":"flopay-vault-card-fields",style:i})}function to(e,t=.12){let n=/^#?([0-9a-fA-F]{6})$/.exec(e.trim());if(!n)return e;let r=parseInt(n[1],16),o=Math.max(0,Math.min(1,1-t)),i=Math.round((r>>16&255)*o),d=Math.round((r>>8&255)*o),c=Math.round((r&255)*o);return`#${(1<<24|i<<16|d<<8|c).toString(16).slice(1)}`}function za(e){if(typeof e=="number"||typeof e=="string")return e}function ra({appearance:e,buttonsStyles:t,layout:n="default"}){let r=e?.variables,o=y=>typeof y=="string"&&y?y:void 0,i=t.submitButton,d=o(r?.colorPrimary)??o(i?.backgroundColor)??"#4A49FF",c=n==="buttons",C=t.nameInput;return{primaryColor:d,primaryHoverColor:o(r?.colorPrimaryHover)??to(d,.12),inputBackgroundColor:o(t.cardInputBackground)??o(r?.colorBackground)??"#ffffff",textColor:o(t.cardInputColor)??o(C?.color)??o(r?.colorText)??"#262833",borderColor:o(t.cardInputBorder)??(c?"#e5e7eb":"#A4A4FF"),placeholderColor:o(t.cardInputPlaceholderColor)??"#9ca3af",errorColor:o(r?.colorDanger)??"#dc2626",successColor:"#16a34a",fontFamily:o(C?.fontFamily)??o(r?.fontFamily)??"Poppins, sans-serif",fontSize:o(t.cardInputFontSize)??o(r?.fontSizeBase)??"16px",fontWeight:String(za(C?.fontWeight)??400),borderRadius:o(r?.borderRadius)??"8px"}}var l=require("react/jsx-runtime"),nr="flopay_stripe_resume",ss="flopay_wallet_resume",fs="fw1",El=300*1e3,Rl=900,_l=25e3,oa={};function gs(e){return e instanceof u.FloPayError&&(e.type==="validation_error"||e.statusCode===400||e.statusCode===422)}async function ia(e,t,...n){let r=n[2].provider;t?.({class:"lifecycle",name:"payment.intent.started",provider:r});try{return await new ur.PaymentAPI(e).createSessionIntent(...n)}catch(o){throw gs(o)||t?.({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:"intent_create",provider:r}),o}}var To="flopay_paypal_resume",Tl=250,ls="Just a moment \u2014 we are finalizing your order. Please press pay again.";function Va(e,t,n){e?.error({errorCode:"PROVIDER_LOAD_FAILED",failureCategory:"provider_runtime",stage:"provider_load",provider:t,paymentMethodCategory:n,requestCategory:"provider_sdk"})}async function sa({billingApiUrl:e,sessionId:t,nonce:n,request:r}){if(!(!t||!n))try{await new ur.PaymentAPI(e,{telemetry:!1}).reportSessionIntentDecline(t,n,r)}catch{}}function xl(e){return e instanceof u.FloPayError&&typeof e.statusCode=="number"&&e.statusCode>=400&&e.statusCode<500}function Ua(e){return e?.html?{html:e.html,...e.messageToken?{messageToken:e.messageToken}:{},...e.expectedOrigin?{expectedOrigin:e.expectedOrigin}:{}}:null}function hs({event:e,fallbackEmail:t,fallbackName:n}){let r=e.billingDetails,o=Er(r?.name),i=Er(n);return Pn({email:((0,u.isValidEmail)(t?.trim())?t?.trim():void 0)??r?.email?.trim(),firstName:i.firstName??o.firstName,lastName:i.lastName??o.lastName})}async function Ml({event:e,prepared:t,email:n,billingName:r,methodLabel:o,collect:i}){let d=hs({event:e,fallbackEmail:t?.accountPatch?.email??n,fallbackName:[t?.accountPatch?.firstName,t?.accountPatch?.lastName].filter(Boolean).join(" ")||r});return(0,u.isValidEmail)(d.email)?d:i(o,d)}var Al=`
|
|
10
10
|
.paypal-buttons { margin: 0 !important; vertical-align: top !important; }
|
|
11
11
|
@keyframes flopay-spin { to { transform: rotate(360deg); } }
|
|
12
12
|
@keyframes flopay-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }
|
|
@@ -27,7 +27,7 @@ ${Zt.join(`
|
|
|
27
27
|
0% { opacity: 1; transform: translateX(0) scale(1); }
|
|
28
28
|
100% { opacity: 0; transform: translateX(16px) scale(0.97); }
|
|
29
29
|
}
|
|
30
|
-
`,oa=44,xr=280;function Ka(e){if(!e.themeBundle&&!e.explicitPrimaryColor)return{backgroundColor:"white",color:"#262833",border:"1px solid #d1d5db",borderRadius:e.resolvedBorderRadius,boxShadow:"0 1px 2px rgba(0,0,0,0.04)"};let t=e.themeBundle?e.submitButtonStyle??{}:{};return{backgroundColor:e.resolvedPrimaryColor,color:t.color??"white",border:t.border??"none",borderRadius:t.borderRadius??e.resolvedBorderRadius,boxShadow:t.boxShadow}}var Al={visibility:"hidden",position:"absolute",pointerEvents:"none",width:"100%",height:0,overflow:"hidden"};function Bl(e){return e.isPaypal||e.gateway==="paypal"||e.paymentMethodType==="paypal"?"paypal":e.paymentMethodType==="apple_pay"||e.paymentMethodType==="google_pay"?"wallet":e.paymentMethodType&&e.paymentMethodType!=="card"?"apm":"card"}var hs={width:"100%",minHeight:oa,margin:"0 0 0.5rem",padding:"0.75rem 0.875rem",border:"1px solid #2563eb",borderRadius:8,background:"#eff6ff",color:"#1d4ed8",fontSize:"0.95rem",fontWeight:700,cursor:"pointer"};function Fl(e){switch(e){case"paypal":return"PayPal";case"apple_pay":return"Apple Pay";case"google_pay":return"Google Pay";default:return"Card"}}function ls(e){return e==="paypal"?"paypal":e==="apple_pay"?"apple_pay":"google_pay"}function $a(e){return e==="paypal"?"PayPal":(0,u.getStripeMethodDisplayName)(e)}function Dl(e,t){let n=`We couldn't open ${$a(e)}. Try again or choose another payment method.`;return t?`${n} Allow pop-ups for this site, then try again.`:n}function bs(e){let t=(0,a.useRef)(0),n=(0,a.useRef)(null),r=(0,a.useRef)(null),o=(0,a.useCallback)((m=r.current)=>{let S=m;S?.timer&&(clearTimeout(S.timer),S.timer=null)},[]),i=(0,a.useCallback)((m,S)=>{typeof document<"u"&&document.visibilityState!=="visible"||(o(m),m.timer=setTimeout(()=>{m.timer=null,r.current?.generation===m.generation&&(r.current=null,n.current=m.generation,e(m.method,new Error("External payment method returned without a terminal callback."),{code:"external_method_missing_terminal_callback"}))},S))},[o,e]),d=(0,a.useCallback)(m=>{m.yieldedControl&&i(m,600)},[i]),c=(0,a.useCallback)(m=>{o();let S=t.current+1;t.current=S,n.current=null;let ye={generation:S,method:m,timer:null,yieldedControl:!1};return r.current=ye,S},[o]),C=(0,a.useCallback)(m=>{let S=r.current;return typeof m=="number"&&S?.generation!==m?!1:(o(S),r.current=null,(typeof m!="number"||n.current===m)&&(n.current=null),!0)},[o]),y=(0,a.useCallback)(m=>{let S=r.current,ye=m??S?.generation??t.current;(!m||S?.generation===m)&&(o(S),r.current=null),n.current=ye},[o]),b=(0,a.useCallback)(m=>n.current===(m??t.current),[]),P=(0,a.useCallback)(m=>r.current?.generation===m&&n.current!==m,[]),F=(0,a.useCallback)(()=>{let m=r.current;m&&d(m)},[d]),A=(0,a.useCallback)(()=>{let m=r.current;m&&(m.yieldedControl=!0,o(m))},[o]);return(0,a.useEffect)(()=>{let m=()=>{document.visibilityState==="visible"?F():A()},S=()=>{A()};return document.addEventListener("visibilitychange",m),window.addEventListener("blur",S),window.addEventListener("focus",F),()=>{document.removeEventListener("visibilitychange",m),window.removeEventListener("blur",S),window.removeEventListener("focus",F),o()}},[o,A,F]),{startAttempt:c,finishAttempt:C,invalidateAttempt:y,isAttemptInvalidated:b,isAttemptCurrent:P,generationRef:t}}function Ll(e){let t=(0,u.getPostalCodeExample)(e);return`Enter a valid ${(0,u.getPostalCodeLabel)(e)}${t?` (e.g. ${t})`:""}`}function Nl(e,t,n){let r=(0,u.isPostalCodeSupported)(e),o=t.trim(),i=n&&r,d=i&&!o,c=i&&!!o&&!(0,u.isValidPostalCode)(e,o);return{visible:n,supported:r,required:i,empty:d,malformed:c}}function Ol(e,t){let n=e.trim(),r=t&&!n,o=t&&!!n&&!(0,u.isValidEmail)(n);return{required:t,empty:r,malformed:o,value:n}}function cs(e,t){return t instanceof u.FloPayError?t:new u.FloPayError(t instanceof Error?t.message:`${Fl(e)} before-click hook failed.`,"validation_error")}function qa(){return(0,l.jsx)("style",{children:Ml})}function zl(e){return typeof e=="number"?`${e}px`:e}function vs(e,t){let n=e.availablePaymentMethods;return n&&t.some(r=>n[r])?"ready":"unavailable"}function Ps({state:e,placeholderTestId:t,borderRadius:n=8,children:r}){return e==="unavailable"||e==="load_error"?null:(0,l.jsxs)("div",{style:{position:"relative",minHeight:44},children:[(0,l.jsx)("div",{"data-testid":t,"aria-hidden":e==="ready",style:{position:"absolute",inset:0,height:44,borderRadius:n,background:"#e5e7eb",animation:e==="ready"?void 0:"flopay-pulse 1.5s ease-in-out infinite",opacity:e==="ready"?0:1,transform:e==="ready"?"scale(0.985)":"scale(1)",transition:"opacity 140ms ease-out, transform 140ms ease-out",pointerEvents:"none"}}),(0,l.jsx)("div",{style:{minHeight:44,opacity:e==="ready"?1:0,transform:e==="ready"?"translateY(0)":"translateY(2px)",transition:"opacity 140ms ease-out, transform 140ms ease-out",pointerEvents:e==="ready"?"auto":"none"},children:r})]})}function ds(e){return e!=="unavailable"&&e!=="load_error"}function sa(e){return(0,l.jsx)(ql,{...e})}function us({sessionId:e,nonce:t,email:n,billingApiUrl:r,onTokenizedBody:o,onErrorChange:i,isProcessing:d=!1,onButtonClick:c,onDecline:C,onTechnicalFailure:y,runBeforeButtonClick:b,billingName:P,onBuyerIdentityReady:F,onLoadStateChange:A,placeholderBorderRadius:m}){let S=lr(),{emitInstrument:ye}=(0,a.useContext)(Fn),U=(0,Ft.useStripe)(),w=(0,Ft.useElements)(),[ce,q]=(0,a.useState)("loading");(0,a.useEffect)(()=>{A?.(ce)},[ce,A]);let[le,Y]=(0,a.useState)(!1),ge=!(0,u.isValidEmail)(n?.trim())||!P?.trim(),{request:qe,collect:we,finish:Et}=Hr(),Oe=(0,a.useRef)(!1),Ee=(0,a.useRef)(null),Re=(0,a.useRef)(null),[oe,ee]=(0,a.useState)(0),[L,_e]=(0,a.useState)(!1),Te=(0,a.useRef)(!1),G=(0,a.useRef)(new Map),{startAttempt:Ie,finishAttempt:Pe,invalidateAttempt:M,isAttemptInvalidated:K,isAttemptCurrent:ke}=bs((te,$,O)=>{y?.(te,$,{...O,popupBlocked:O?.popupBlocked??vr($)}),_e(!0),ee(He=>He+1)});(0,a.useEffect)(()=>{L&&Re.current?.focus()},[L,oe]);let be=(0,a.useCallback)(()=>{ee(te=>te+1)},[]),Q=(0,a.useCallback)((te,$,O)=>{M(O),y?.("paypal",te,{code:$,popupBlocked:vr(te)}),_e(!0),be()},[M,y,be]),Be=(0,a.useCallback)(()=>{window.setTimeout(()=>{(Ee.current?.querySelector("iframe")??Ee.current)?.focus()},0)},[]);(0,a.useEffect)(()=>{Te.current&&(Te.current=!1,Be())},[Be,oe]);let it=(0,a.useCallback)(()=>{_e(!1),i?.(null),Be()},[Be,i]);(0,a.useEffect)(()=>{if(!U||Oe.current)return;let te=new URLSearchParams(window.location.search),$=te.get("payment_intent"),O=te.get("payment_intent_client_secret"),He=te.get("redirect_status");if(!$||!O)return;Oe.current=!0;let Je;try{let st=localStorage.getItem(To);if(st){let E=JSON.parse(st);E.clientSecret===O&&(Je={...E.accountPatch?{accountPatch:E.accountPatch}:{},...E.sessionId?{sessionId:E.sessionId}:{},...E.nonce?{nonce:E.nonce}:{}})}}catch{}try{localStorage.removeItem(To)}catch{}let fe=new URL(window.location.href);fe.searchParams.delete("payment_intent"),fe.searchParams.delete("payment_intent_client_secret"),fe.searchParams.delete("redirect_status"),window.history.replaceState({},"",fe.toString()),(async()=>{try{if(Y(!0),He==="failed"){let R="PayPal payment was declined. Please try again.";i?.(R),C?.(Kt("paypal",R));return}let{paymentIntent:st,error:E}=await U.retrievePaymentIntent(O);if(E){i?.(E.message??"Failed to retrieve PayPal payment status.");return}if(st&&(st.status==="requires_capture"||st.status==="succeeded")){let R=typeof st.payment_method=="string"?st.payment_method:st.payment_method?.id;o({id:R??st.id,type:"card",threeDSecureActionResultTokenId:st.id,isPaypal:!0},Je)}else{let R="PayPal payment was not completed. Please try again.";i?.(R),C?.(Kt("paypal",R))}}catch(st){i?.(st instanceof Error?st.message:"Failed to complete PayPal payment.")}finally{Y(!1)}})()},[U,o,i,C]);let vt=(0,a.useCallback)(async te=>{if(d||le){te.reject();return}let $=b?await b("paypal"):{proceed:!0};if(!$.proceed){G.current.delete(oe),te.reject();return}let O=Ie("paypal");G.current.set(oe,{generation:O,accountPatch:$.accountPatch,sessionId:$.sessionId,nonce:$.nonce}),_e(!1),c?.("paypal"),te.resolve()},[d,c,b,Ie,le,oe]),Ke=(0,a.useCallback)(async te=>{if(!U||!w)return;let $=G.current.get(oe);if($&&!ke($.generation)){G.current.delete(oe);return}if(!$&&K()||$&&!Pe($.generation))return;$||Pe();let O=$??null;if(G.current.delete(oe),!O&&b){let R=await b("paypal");if(!R.proceed){te.paymentFailed({reason:"fail",message:"PayPal checkout was cancelled."});return}O={accountPatch:R.accountPatch,sessionId:R.sessionId,nonce:R.nonce}}let He=O?.sessionId??e,Je=O?.nonce??t,fe=await xl({event:te,prepared:O,email:n,billingName:P,methodLabel:"PayPal",collect:we});if(!fe){te.paymentFailed({reason:"fail",message:"Buyer details are required."});return}let st=fe.email,E=Pn({...O?.accountPatch,...fe});try{if(Y(!0),i?.(null),!He||!(0,u.isValidEmail)(st))throw new Error("Missing sessionId or email for PayPal payment");await F?.(fe);let R=U.createPaymentMethod,{error:De,paymentMethod:ue}=await R({type:"paypal"});if(De){Q(De,"stripe_paypal_create_payment_method_failed",$?.generation),te.paymentFailed({reason:"fail"});return}let ae=await aa(r,ye,He,Je??"",{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:"paypal",paymentMethodId:ue?.id??null,intentKind:"payment"});if(ae.provider!=="stripe")throw new Error("Invalid provider returned for PayPal intent");let rt=ae.clientSecret,Ne={return_url:window.location.href};if(ue?.id&&(Ne.payment_method=ue.id),typeof window<"u")try{localStorage.setItem(To,JSON.stringify({clientSecret:rt,sessionId:He,nonce:Je,accountPatch:E}))}catch{}let{error:et,paymentIntent:Mt}=await U.confirmPayment({clientSecret:rt,confirmParams:Ne,redirect:"if_required"});if(et){if(typeof window<"u")try{localStorage.removeItem(To)}catch{}if(Po(et)){let J=et.message??"Your payment was declined.";i?.(J),C?.(Kt("paypal",J,{code:sr(et),declineCode:Wr(et)})),await ia({billingApiUrl:r,sessionId:He,nonce:Je,request:{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:"paypal",providerDeclineReason:sr(et)??"provider_declined"}})}else Q(et,"stripe_paypal_confirm_failed",$?.generation);return}if(typeof window<"u")try{localStorage.removeItem(To)}catch{}let _=typeof Mt?.payment_method=="string"?Mt.payment_method:Mt?.payment_method?.id;o({id:_??Mt?.id,type:"card",threeDSecureActionResultTokenId:Mt?.id,isPaypal:!0},{accountPatch:E,paymentMethodCategory:"paypal",sessionId:He,nonce:Je});return}catch(R){Q(R,"stripe_paypal_failed",$?.generation)}finally{Y(!1)}},[U,w,e,t,n,P,we,F,r,ye,o,i,C,b,Q,Pe,ke,K,oe]);return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(Ps,{state:ce,placeholderTestId:"flopay-paypal-placeholder",borderRadius:m,children:(0,l.jsxs)("div",{ref:Ee,tabIndex:-1,"data-testid":"flopay-paypal-focus-target",role:"group","aria-label":"PayPal payment method",style:{borderRadius:8,outlineOffset:4},children:[L&&(0,l.jsx)("button",{ref:Re,type:"button","data-testid":"flopay-paypal-retry-button",onClick:it,style:hs,children:"Try PayPal again"}),qe&&(0,l.jsx)(Yr,{identity:qe.identity,methodLabel:qe.methodLabel,onComplete:Et,onCancel:()=>Et(null)},qe.id),(0,l.jsx)("div",{style:{display:qe?"none":void 0},children:(0,l.jsx)(Ft.ExpressCheckoutElement,{onReady:te=>q(vs(te,["paypal"])),onLoadError:()=>{q("load_error"),Va(jt(S),"paypal","paypal")},onClick:vt,onConfirm:Ke,onCancel:()=>{let te=G.current.get(oe);G.current.delete(oe),jt(S)?.terminal({outcome:"payment_cancelled",provider:"paypal",paymentMethodCategory:"paypal"}),M(te?.generation),_e(!1),Te.current=!0,be()},options:{buttonType:{paypal:"paypal"},billingAddressRequired:ge,emailRequired:ge,phoneNumberRequired:!1,shippingAddressRequired:!1,paymentMethods:{applePay:"never",googlePay:"never",paypal:"auto",link:"never"}}},oe)})]})}),le&&(0,l.jsx)(Ln,{status:"processing"})]})}function ps({sessionId:e,nonce:t,email:n,billingApiUrl:r,intentKind:o,expressMethods:i,onTokenizedBody:d,onErrorChange:c,onButtonClick:C,onDecline:y,onTechnicalFailure:b,runBeforeButtonClick:P,billingName:F,onBuyerIdentityReady:A,onLoadStateChange:m,placeholderBorderRadius:S}){let ye=lr(),{emitInstrument:U}=(0,a.useContext)(Fn),w=(0,Ft.useStripe)(),ce=(0,Ft.useElements)(),[q,le]=(0,a.useState)("loading");(0,a.useEffect)(()=>{m?.(q)},[q,m]);let[Y,ge]=(0,a.useState)(!1),qe=(0,a.useRef)(!(0,u.isValidEmail)(n?.trim())||!F?.trim()).current,{request:we,collect:Et,finish:Oe}=Hr(),Ee=(0,a.useRef)(null),Re=(0,a.useRef)(null),[oe,ee]=(0,a.useState)(0),[L,_e]=(0,a.useState)(!1),[Te,G]=(0,a.useState)("google_pay"),Ie=(0,a.useRef)(!1),Pe=(0,a.useRef)("google_pay"),M=(0,a.useRef)("google_pay"),K=(0,a.useRef)(null),ke=(0,a.useRef)(new Map),{startAttempt:be,finishAttempt:Q,invalidateAttempt:Be,isAttemptInvalidated:it,isAttemptCurrent:vt,generationRef:Ke}=bs((E,R,De)=>{b?.(E,R,{...De,popupBlocked:De?.popupBlocked??vr(R)}),G(E),_e(!0),ee(ue=>ue+1)});(0,a.useEffect)(()=>{L&&Re.current?.focus()},[L,oe]);let te=(0,a.useCallback)(()=>{ee(E=>E+1)},[]),$=(0,a.useCallback)((E,R,De,ue)=>{Be(ue),b?.(E,R,{code:De,popupBlocked:vr(R)}),G(E),_e(!0),te()},[Be,b,te]),O=(0,a.useCallback)(()=>{window.setTimeout(()=>{(Ee.current?.querySelector("iframe")??Ee.current)?.focus()},0)},[]);(0,a.useEffect)(()=>{Ie.current&&(Ie.current=!1,O())},[O,oe]);let He=(0,a.useCallback)(()=>{_e(!1),c?.(null),O()},[O,c]),Je=(0,a.useCallback)(async E=>{let R=!1,De=B=>{R||(R=!0,E.paymentFailed({reason:"fail",...B?{message:B}:{}}))};if(!w||!ce){De();return}let ue=ke.current.get(oe);if(ue&&!vt(ue.generation)){ke.current.delete(oe),De();return}if(!ue&&it()){De();return}if(ue&&!Q(ue.generation)){De();return}ue||Q();let ae=E.expressPaymentType??ue?.method??Pe.current,rt=ue??null,Ne=ls(ae),et=jt(ye),Mt=et?.now()??globalThis.performance?.now()??Date.now(),_=new AbortController,J=!1,lt,Xe=new Promise((B,ft)=>{lt=ft}),Zt=window.setTimeout(()=>{J=!0,_.abort(),lt(za)},Rl),Ht=async(B,ft,Tt)=>{let ct=et?.now()??globalThis.performance?.now()??Date.now();try{return await Promise.race([Tt,Xe])}finally{let Rt=et?.now()??globalThis.performance?.now()??Date.now();et?.performance({stage:B,durationMs:Math.max(0,Rt-ct),durationMode:"machine",requestCategory:ft,paymentMethodCategory:"wallet",provider:"stripe",...J?{statusClass:"timeout"}:{}})}};try{if(ge(!0),c?.(null),!rt&&P){let dt=await Ht("processing","other",P(Ne));if(!dt.proceed){De();return}rt={accountPatch:dt.accountPatch,sessionId:dt.sessionId,nonce:dt.nonce}}let B=rt?.sessionId??e,ft=rt?.nonce??t,Tt=gs({event:E,fallbackEmail:K.current?.email??rt?.accountPatch?.email??n,fallbackName:[K.current?.firstName??rt?.accountPatch?.firstName,K.current?.lastName??rt?.accountPatch?.lastName].filter(Boolean).join(" ")||F});if(!(0,u.isValidEmail)(Tt.email)){De("Buyer details are required."),Et($a(ae),Tt).then(dt=>{dt&&(K.current=dt)});return}K.current=null;let ct=Pn({...rt?.accountPatch,...Tt});await Ht("processing","provider_sdk",Promise.resolve(A?.(Tt)));let{error:Rt}=await Ht("tokenization","provider_sdk",ce.submit());if(Rt){De(),$(ae,Rt,"stripe_wallet_submit_failed",ue?.generation);return}if(!B)throw new Error("Missing sessionId or email for payment.");let dn=await Ht("processing","intent_create",aa(r,U,B,ft??"",{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:ae,paymentMethodId:null,intentKind:o},{signal:_.signal}));if(dn.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let rn=dn.clientSecret,un=(0,u.isSetupIntentClientSecret)(rn)?w.confirmSetup({elements:ce,clientSecret:rn,redirect:"if_required"}):w.confirmPayment({elements:ce,clientSecret:rn,redirect:"if_required"}),Dt=!1,Cn=dt=>{if(Dt||dt.error||ue&&Ke.current!==ue.generation)return;let ht=dt.setupIntent??dt.paymentIntent,on=ht?.id,tt=ht?.status,Jn=dt.setupIntent?tt==="succeeded":bo(typeof tt=="string"?tt:void 0),pt=ht?.payment_method,en=typeof pt=="string"?pt:typeof pt?.id=="string"?pt.id:null;if(!Jn||typeof on!="string"||!en)return;Dt=!0;let Pt=`${ys}:${B}`;if(typeof window<"u")try{localStorage.setItem(Pt,JSON.stringify({createdAt:Date.now(),sessionId:B,nonce:ft,accountPatch:ct,paymentMethodId:en,providerIntentId:on,paymentMethodType:ae}))}catch{}try{d({id:en,type:"card",threeDSecureActionResultTokenId:on},{accountPatch:ct,paymentMethodCategory:"wallet",sessionId:B,nonce:ft})}finally{if(typeof window<"u")try{localStorage.removeItem(Pt)}catch{}}};un.then(dt=>{J&&Cn(dt)},()=>{});let Qt=await Ht("three_ds_handoff","provider_sdk",un),gt=Qt.error;if(gt){if(Po(gt)){let dt=gt.message??"Your payment was declined.";De(dt),c?.(dt),y?.(Kt(Ne,dt,{code:sr(gt),declineCode:Wr(gt)})),ia({billingApiUrl:r,sessionId:B,nonce:ft,request:{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:ae,providerDeclineReason:sr(gt)??"provider_declined"}})}else De(),$(ae,gt,"stripe_wallet_confirm_failed",ue?.generation);return}if(Cn(Qt),!Dt)throw new Error("Invalid provider returned for APM intent")}catch(B){B===za&&et?.error({errorCode:"REQUEST_TIMEOUT",stage:"callback",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",provider:"stripe",statusClass:"timeout",failureCategory:"provider_runtime"}),De(),$(ae,B,B===za?"stripe_wallet_authorization_timeout":"stripe_wallet_failed",ue?.generation)}finally{window.clearTimeout(Zt);let B=et?.now()??globalThis.performance?.now()??Date.now();et?.performance({stage:"callback",durationMs:Math.max(0,B-Mt),durationMode:"machine",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",provider:"stripe",...J?{statusClass:"timeout"}:{}}),ge(!1)}},[w,ce,e,t,n,F,Et,A,r,U,o,d,c,y,P,$,Q,vt,it,Ke,ye,oe]),fe=(0,a.useMemo)(()=>{let E=["applePay","googlePay","paypal","link","amazonPay","klarna"],R=new Set(["applePay","googlePay"]),De=new Set(i.map(u.stripeExpressMethodToOptionKey)),ue={};for(let ae of E)De.has(ae)?ue[ae]=R.has(ae)?"always":"auto":ue[ae]="never";return ue},[i]),st=(0,a.useMemo)(()=>i.map(u.stripeExpressMethodToOptionKey),[i]);return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(Ps,{state:q,placeholderTestId:"flopay-wallet-placeholder",borderRadius:S,children:(0,l.jsxs)("div",{ref:Ee,tabIndex:-1,"data-testid":"flopay-wallet-focus-target",role:"group","aria-label":"Wallet payment methods",style:{borderRadius:8,outlineOffset:4},children:[L&&(0,l.jsxs)("button",{ref:Re,type:"button","data-testid":"flopay-wallet-retry-button",onClick:He,style:hs,children:["Try ",$a(Te)," again"]}),we&&(0,l.jsx)(Yr,{identity:we.identity,methodLabel:we.methodLabel,onComplete:Oe,onCancel:()=>Oe(null)},we.id),(0,l.jsx)("div",{style:{display:we?"none":void 0},children:(0,l.jsx)(Ft.ExpressCheckoutElement,{onReady:E=>{le(vs(E,st))},onLoadError:E=>{le("load_error"),Va(jt(ye),"stripe","wallet")},onClick:async E=>{Pe.current=E.expressPaymentType,M.current=ls(E.expressPaymentType);let R=!0,De=window.setTimeout(()=>{R=!1,E.reject()},El),ue=P?await P(M.current):{proceed:!0};if(window.clearTimeout(De),!R)return;if(!ue.proceed){ke.current.delete(oe),E.reject();return}let ae=be(E.expressPaymentType);ke.current.set(oe,{generation:ae,method:E.expressPaymentType,accountPatch:ue.accountPatch,sessionId:ue.sessionId,nonce:ue.nonce}),_e(!1),C?.(M.current),E.resolve()},onConfirm:Je,onCancel:()=>{let E=ke.current.get(oe);ke.current.delete(oe),jt(ye)?.terminal({outcome:"payment_cancelled",provider:"stripe",paymentMethodCategory:"wallet"}),Be(E?.generation),_e(!1),Ie.current=!0,te()},options:{buttonType:{applePay:"plain",googlePay:"plain"},paymentMethods:fe,emailRequired:qe,billingAddressRequired:qe,layout:{maxColumns:1,overflow:"never"}}},oe)})]})}),Y&&(0,l.jsx)(Ln,{status:"processing"})]})}function Ul({method:e,themeId:t,submitting:n=!1,disabled:r=!1,highlighted:o=!1,hasNextStep:i=!1,onClick:d,backgroundColor:c,borderColor:C,textColor:y,borderRadius:b,fontFamily:P}){let F=(0,u.resolveStripeMethodBrandVariant)(e,t),A=os[e],[m,S]=(0,a.useState)(!1),ye=F?.backgroundColor??c??"#ffffff",U=F?.borderColor??C??"#d1d5db",w=F?.textColor??y??"#262833";return(0,l.jsx)("button",{type:"button","data-testid":`flopay-stripe-method-button-${e}`,"data-method":e,onClick:()=>{!n&&!r&&d()},disabled:n||r,"aria-busy":n||void 0,style:{position:"relative",width:"100%",boxSizing:"border-box",height:oa,padding:"0 1rem",backgroundColor:ye,color:w,border:`1px solid ${U}`,borderRadius:b??8,fontSize:"0.95rem",fontWeight:600,fontFamily:P,cursor:n||r?"not-allowed":"pointer",opacity:r&&!n?.55:1,animation:n?"flopay-pulse 1.5s ease-in-out infinite":void 0,display:"flex",alignItems:"center",justifyContent:"center",gap:8,transition:"transform 0.1s, opacity 140ms ease-out, border-color 140ms ease-out",boxShadow:o?"0 0 0 2px rgba(74, 73, 255, 0.15)":void 0},children:n?(0,l.jsx)("span",{style:{margin:"0 auto"},children:`Connecting to ${(0,u.getStripeMethodDisplayName)(e)}\u2026`}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:(0,u.hasVendoredStripeMethodLogo)(e)?8:0},children:[A&&!m?(0,l.jsx)("img",{src:A,alt:"","aria-hidden":"true",onError:()=>S(!0),loading:"lazy",decoding:"async",width:30,height:20,style:{width:30,height:20,flexShrink:0,borderRadius:3,objectFit:"contain",display:"inline-flex"}}):F?.logoSvg?(0,l.jsx)("span",{"aria-hidden":"true",style:{width:30,height:20,flexShrink:0,display:"inline-flex",borderRadius:3,overflow:"hidden"},dangerouslySetInnerHTML:{__html:F.logoSvg}}):null,(0,l.jsx)("span",{children:(0,u.getStripeMethodDisplayName)(e)})]}),i&&(0,l.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:w,strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",style:{position:"absolute",right:"1rem",top:"50%",transform:"translateY(-50%)",flexShrink:0,opacity:.7},"aria-hidden":"true",children:(0,l.jsx)("path",{d:"M9 18l6-6-6-6"})})]})})}function ja({method:e,sessionId:t,nonce:n,email:r,billingName:o,onBuyerIdentityReady:i,billingApiUrl:d,onTokenizedBody:c,onErrorChange:C,onDecline:y,onCancel:b,runBeforeButtonClick:P,onButtonClick:F,isProcessing:A,submitButtonColor:m,submitButtonBorderRadius:S,submitButtonStyle:ye,errorText:U}){let w=lr(),{emitInstrument:ce}=(0,a.useContext)(Fn),q=(0,Ft.useStripe)(),le=(0,Ft.useElements)(),[Y,ge]=(0,a.useState)(!1),qe=(0,a.useRef)(!1),[we,Et]=(0,a.useState)(!1),[Oe,Ee]=(0,a.useState)("loading"),[Re,oe]=(0,a.useState)(""),ee=!(0,u.isValidEmail)(r?.trim()),L=!ee||(0,u.isValidEmail)(Re.trim()),_e=(0,a.useCallback)(async()=>{if(!q||!le||A||qe.current||!we)return;qe.current=!0,ge(!0);let Te=P?await P("card"):{proceed:!0};if(!Te.proceed){qe.current=!1,ge(!1);return}F?.("card");let G=Te.sessionId??t,Ie=Te.nonce??n,Pe=Er(o?.trim()),M=Pn({email:Te.accountPatch?.email?.trim()||r?.trim()||Re.trim(),firstName:Te.accountPatch?.firstName?.trim()||Pe.firstName,lastName:Te.accountPatch?.lastName?.trim()||Pe.lastName}),K=M.email,ke=Pn({...Te.accountPatch,...M});try{if(C?.(null),!(0,u.isValidEmail)(K))throw new Error("A valid email address is required for payment.");await i?.(M);let be=await le.submit();if(be.error){C?.(be.error.message??"Payment failed.");return}let Q=[M.firstName,M.lastName].filter(Boolean).join(" "),Be=await q.createPaymentMethod({elements:le,params:{billing_details:{email:K,...Q?{name:Q}:{}}}});if(Be.error||!Be.paymentMethod){C?.(Be.error?.message??"Failed to create payment method.");return}let it=Be.paymentMethod;if(!G||!K)throw new Error("Missing sessionId or email for payment.");let vt=it.type||e,Ke=await aa(d,ce,G,Ie??"",{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:vt,paymentMethodId:null,intentKind:"payment"});if(Ke.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let te=Ke.clientSecret;if(typeof window<"u")try{localStorage.setItem(nr,JSON.stringify({clientSecret:te,sessionId:G,nonce:Ie,accountPatch:ke,paymentMethodId:it.id,paymentMethodType:it.type??e,gateway:"stripe"}))}catch{}let{error:$,paymentIntent:O}=await q.confirmPayment({clientSecret:te,confirmParams:{return_url:window.location.href,payment_method:it.id},redirect:"if_required"});if($){if(typeof window<"u")try{localStorage.removeItem(nr)}catch{}let fe=$.message??"Payment failed.";C?.(fe),y?.(Kt("card",fe,{code:$.code})),await ia({billingApiUrl:d,sessionId:G,nonce:Ie,request:{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:e,providerDeclineReason:$.code??"provider_declined"}});return}let He=O?.status;if(!bo(He)){if(typeof window<"u")try{localStorage.removeItem(nr)}catch{}let fe=He==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";C?.(fe),y?.(Kt("card",fe,{code:He??"missing_payment_intent"}));return}if(typeof window<"u")try{localStorage.removeItem(nr)}catch{}let Je=typeof O?.payment_method=="string"?O.payment_method:O?.payment_method?.id;c({id:Je??it.id,type:"card",threeDSecureActionResultTokenId:O?.id,gateway:"stripe",paymentMethodType:it.type??e},{accountPatch:ke,paymentMethodCategory:"apm",sessionId:G,nonce:Ie})}catch(be){C?.(be instanceof Error?be.message:"Payment failed. Please try again.")}finally{qe.current=!1,ge(!1)}},[q,le,A,we,P,F,t,n,r,o,Re,i,d,ce,e,c,C,y]);return(0,l.jsxs)("div",{"data-testid":`flopay-stripe-method-form-${e}`,style:{display:"flex",flexDirection:"column"},children:[ee&&(0,l.jsx)("div",{"data-testid":"flopay-apm-identity-fields",style:{display:"flex",flexDirection:"column",gap:"0.75rem",marginBottom:"0.75rem"},children:ee&&(0,l.jsxs)("label",{style:{display:"flex",flexDirection:"column",gap:"0.375rem"},children:["Email address",(0,l.jsx)("input",{type:"email",autoComplete:"email",required:!0,value:Re,onChange:Te=>oe(Te.target.value),style:{minHeight:42,padding:"0 0.75rem",border:"1px solid #d1d5db",borderRadius:6}})]})}),(0,l.jsx)(Ft.PaymentElement,{onReady:()=>Ee("ready"),onLoadError:()=>{Ee("load_error"),Va(jt(w),"stripe","apm")},onChange:Te=>{Et(!!Te.complete)},options:{layout:{type:"accordion",defaultCollapsed:!1,radios:"never"},fields:{billingDetails:{email:"never"}},defaultValues:{billingDetails:{...o?.trim()?{name:o.trim()}:{},...(0,u.isValidEmail)(r?.trim())?{email:r?.trim()}:{}}}}}),(0,l.jsx)("button",{type:"button","data-testid":`flopay-stripe-method-pay-${e}`,onClick:()=>{_e()},disabled:!we||!L||Y||A||Oe!=="ready",style:{width:"100%",marginTop:"0.75rem",padding:"0.875rem",backgroundColor:m,color:"white",border:"none",borderRadius:S,fontSize:"1rem",fontWeight:600,cursor:!we||!L||Y||A||Oe!=="ready"?"not-allowed":"pointer",opacity:!we||!L||Y||A||Oe!=="ready"?.5:1,transition:"opacity 120ms ease-out",...ye??{}},children:Y?"Processing\u2026":`Pay with ${(0,u.getStripeMethodDisplayName)(e)}`}),U&&(0,l.jsx)(Jr,{margin:"0.75rem 0 0",children:U})]})}function ms({sessionId:e,nonce:t,email:n,billingName:r,onBuyerIdentityReady:o,billingApiUrl:i,paymentElementMethods:d,stripeInstance:c,paymentElementBaseOptions:C,onTokenizedBody:y,onErrorChange:b,onButtonClick:P,onDecline:F,runBeforeButtonClick:A,onLoadStateChange:m,isProcessing:S=!1,submitButtonColor:ye="#4A49FF",submitButtonBorderRadius:U=8,submitButtonStyle:w,buttonAppearance:ce,themeId:q,onExpandApm:le,expandedApmMethod:Y}){let{emitInstrument:ge}=(0,a.useContext)(Fn),[qe,we]=(0,a.useState)(null),[Et,Oe]=(0,a.useState)(null),Ee=(0,a.useRef)(!1),{request:Re,collect:oe,finish:ee}=Hr();(0,a.useEffect)(()=>{d.length>0&&c?m?.("ready"):c||m?.("loading")},[d.length,c,m]);let L=(0,a.useCallback)(async M=>{if(!c||Ee.current||S)return;Ee.current=!0,Oe(M);let K=A?await A("card"):{proceed:!0};if(!K.proceed){Ee.current=!1,Oe(null);return}P?.("card");let ke=K.sessionId??e,be=K.nonce??t,Q=Er([K.accountPatch?.firstName,K.accountPatch?.lastName].filter(Boolean).join(" ")||r),Be=Pn({email:K.accountPatch?.email?.trim()||n?.trim(),firstName:K.accountPatch?.firstName?.trim()||Q.firstName,lastName:K.accountPatch?.lastName?.trim()||Q.lastName});if(!(0,u.isValidEmail)(Be.email)){Oe(null);let Ke=await oe((0,u.getStripeMethodDisplayName)(M),Be);if(!Ke){Ee.current=!1;return}Be=Ke,Oe(M)}let it=Be.email,vt=Pn({...K.accountPatch,...Be});try{if(b?.(null),!ke||!(0,u.isValidEmail)(it))throw new Error("Missing sessionId or email for payment.");await o?.(Be);let Ke=await aa(i,ge,ke,be??"",{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:M,paymentMethodId:null,intentKind:"payment"});if(Ke.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let te=Ke.clientSecret;if(typeof window<"u")try{localStorage.setItem(nr,JSON.stringify({clientSecret:te,sessionId:ke,nonce:be,accountPatch:vt,paymentMethodType:M,gateway:"stripe"}))}catch{}let{error:$,paymentIntent:O}=await c.confirmPayment({clientSecret:te,confirmParams:{return_url:window.location.href,payment_method_data:{type:M,billing_details:{name:[Be.firstName,Be.lastName].filter(Boolean).join(" "),...it?{email:it}:{}}}},redirect:"if_required"});if($){if(typeof window<"u")try{localStorage.removeItem(nr)}catch{}let fe=$.message??"Payment failed.";b?.(fe),F?.(Kt("card",fe,{code:$.code})),await ia({billingApiUrl:i,sessionId:ke,nonce:be,request:{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:M,providerDeclineReason:$.code??"provider_declined"}});return}let He=O?.status;if(!bo(He)){if(typeof window<"u")try{localStorage.removeItem(nr)}catch{}let fe=He==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";b?.(fe),F?.(Kt("card",fe,{code:He??"missing_payment_intent"}));return}if(typeof window<"u")try{localStorage.removeItem(nr)}catch{}let Je=typeof O?.payment_method=="string"?O.payment_method:O?.payment_method?.id;y({id:Je??O?.id,type:"card",threeDSecureActionResultTokenId:O?.id,gateway:"stripe",paymentMethodType:M},{accountPatch:vt,paymentMethodCategory:"apm",sessionId:ke,nonce:be})}catch(Ke){b?.(Ke instanceof Error?Ke.message:"Payment failed. Please try again.")}finally{Ee.current=!1,Oe(null)}},[c,S,A,P,e,t,n,oe,i,ge,r,o,y,b,F]),[_e,Te]=(0,a.useState)(null),G=le?Y??null:_e,Ie=(0,a.useCallback)(M=>{Ee.current||S||G&&G!==M||((0,u.needsStripeMethodExplicitConfirm)(M)?le?le(M):Te(M):L(M))},[G,S,L,le]),Pe=(0,a.useMemo)(()=>_e?{...C,paymentMethodTypes:[_e]}:null,[_e,C]);return(0,l.jsx)("div",{"data-testid":"flopay-stripe-payment-element-region",style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:Re?(0,l.jsx)(Yr,{identity:Re.identity,methodLabel:Re.methodLabel,onComplete:ee,onCancel:()=>ee(null)},Re.id):d.map(M=>{let K=Y===M,ke=Et===M,be=Et!==null&&Et!==M||Y!=null&&Y!==M;return(0,l.jsxs)(a.default.Fragment,{children:[(0,l.jsx)(Ul,{method:M,themeId:q,submitting:ke,disabled:be,highlighted:K,hasNextStep:(0,u.needsStripeMethodExplicitConfirm)(M),onClick:()=>Ie(M),backgroundColor:ce?.backgroundColor,borderColor:ce?.borderColor,textColor:ce?.textColor,borderRadius:ce?.borderRadius,fontFamily:ce?.fontFamily}),!le&&_e===M&&Pe&&c&&(0,l.jsx)(Ft.Elements,{stripe:c,options:Pe,children:(0,l.jsx)(ja,{method:M,sessionId:e,nonce:t,email:n,billingName:r,onBuyerIdentityReady:o,billingApiUrl:i,onTokenizedBody:y,onErrorChange:b,onDecline:F,onCancel:()=>Te(null),runBeforeButtonClick:A,onButtonClick:P,isProcessing:S,submitButtonColor:ye,submitButtonBorderRadius:U,submitButtonStyle:w})},M)]},M)})})}function ql({sessionId:e,nonce:t,billingApiUrl:n,email:r,userId:o,onComplete:i,onError:d,onDecline:c,onTokenizedBody:C,firstName:y,lastName:b,chv:P,className:F,isProcessing:A,error:m,onErrorChange:S,showPayPal:ye=!0,showStripe:U=!0,enabledPaymentMethods:w,enabledPaymentMethodCountries:ce,showApplePay:q=!0,showGooglePay:le=!0,layout:Y="default",theme:ge,buttonsTheme:qe,buttonsStyles:we,appearance:Et,cardButtonContent:Oe,cardBackButtonContent:Ee,cardTitleContent:Re,showSecurityFooter:oe,onButtonClick:ee,onBeforeButtonClick:L,onBuyerIdentityReady:_e,enableAVS:Te,cardFieldOrder:G,cardPreFormSlot:Ie,avsLayout:Pe="row",country:M,zip:K,addressLine1:ke,addressLine2:be,city:Q,state:Be,onCountryChange:it,onZipChange:vt,avsCheck:Ke,checkoutType:te,checkoutLayout:$,totalAmount:O=0,currency:He="usd",initialCardOpen:Je=!1,directPaypal:fe,isSubscription:st=!1,session:E,dataAttachmentPending:R=!1,dataAttachmentRequiresIdentity:De=!1,debug:ue=!1}){let ae=lr(),rt=Yo(),Ne=(0,a.useContext)(Yn),{emitInstrument:et}=(0,a.useContext)(Fn),Mt=E??Ne.session,_=Mt?.gateways?.paypal?.providerObjectType??fe?.providerObjectType,J=R||Ne.claimPending===!0,lt=De||Ne.claimRequiresIdentity===!0,Xe=J&&!lt,Zt=Ki(),[Ht,B]=(0,a.useState)(!1),[ft,Tt]=(0,a.useState)(null),[ct,Rt]=(0,a.useState)(M??"US"),[dn,rn]=(0,a.useState)(K??""),[un,Dt]=(0,a.useState)(ke??""),[Cn,Qt]=(0,a.useState)(be??""),[gt,dt]=(0,a.useState)(Q??""),[ht,on]=(0,a.useState)(Be??""),[tt,Jn]=(0,a.useState)(""),[pt,en]=(0,a.useState)({}),Pt=(0,a.useRef)(K??""),Yt=(0,a.useRef)(M??"US"),Sn=(0,a.useRef)(ke??""),pn=(0,a.useRef)(be??""),_n=(0,a.useRef)(Q??""),an=(0,a.useRef)(Be??""),Tn=(0,a.useRef)(""),qt=(0,a.useRef)({});(0,a.useEffect)(()=>{let s=(h,V,Le,W,Fe)=>{if(qt.current[h])return;let Ve=V?.trim();!Ve||Ve===Le.current||(Le.current=Ve,W(Ve),Fe?.(Ve))};s("country",M,Yt,Rt,it),s("zip",K,Pt,rn,vt),s("addressLine1",ke,Sn,Dt),s("addressLine2",be,pn,Qt),s("city",Q,_n,dt),s("state",Be,an,on)},[M,K,ke,be,Q,Be,it,vt]);let ie=(0,a.useMemo)(()=>(0,u.resolveAVSConfig)(Te),[Te]),mn=ie!==null,On=(0,a.useMemo)(()=>(0,u.isAuthorizationOnlySession)(E),[E]),Xn=!!E?.vault?.html,Cr=!!E?.gateways?.pcivault,mr=!!(E?.gateways?.stripe?.enabledPaymentMethods??w)?.includes("card"),Lt=Xn||mr||Cr,Ye=!!(U&&Lt&&ae&&e),[yr,T]=(0,a.useState)(()=>Y!=="buttons"||Je?e??null:null),[ut,Vt]=(0,a.useState)(0),wn=Y!=="buttons"||Je||!!e&&yr===e,Ce=(0,a.useMemo)(()=>!ae||!Ye||!e||!wn?null:ae.cardCapture({sessionId:e,captureMethod:E?.captureMethod}),[ae,Ye,e,wn,E?.captureMethod]),sn=(0,a.useMemo)(()=>{let s=ct,h=ie?(0,u.isAVSFieldVisible)(ie.postal_code,s):!1;return Nl(s,dn,h)},[ie,ct,dn]),{avsInvalid:wr,invalidAvsFields:Br}=(0,a.useMemo)(()=>{let s={line1:!1,city:!1,state:!1,zip:!1};if(!Ye||!ie)return{avsInvalid:!1,invalidAvsFields:s};let h=ct,V=(Fe,Ve)=>(0,u.isAVSFieldVisible)(Fe,h)&&!Ve.trim(),Le={line1:V(ie.address_line_1,un),city:V(ie.city,gt),state:V(ie.state,ht),zip:sn.empty||sn.malformed};return{avsInvalid:Le.line1||Le.city||Le.state||Le.zip,invalidAvsFields:Le}},[Ye,ie,ct,un,gt,ht,sn]),[yn,fr]=(0,a.useState)(!1),[Zn,zn]=(0,a.useState)(!1),[Nt,Un]=(0,a.useState)(!1),[Qn,fn]=(0,a.useState)({line1:!1,city:!1,state:!1}),tn=(0,a.useRef)(!1),qn=(0,a.useRef)({email:!1,line1:!1,city:!1,state:!1,zip:!1}),$n=(0,a.useRef)(!1),mt=(0,a.useCallback)(s=>{qn.current[s]=!0,$n.current=!0},[]),gn=(0,a.useCallback)(s=>!tn.current&&qn.current[s],[]),hn=(0,a.useCallback)(s=>{gn(s)&&fn(h=>h[s]?h:{...h,[s]:!0})},[gn]),[jn,xn]=(0,a.useState)(()=>Ua(E?.vault)),[xe,nn]=(0,a.useState)(Je&&Lt?"card":"buttons"),[Ot,gr]=(0,a.useState)(null),Vn=xe==="expanding"||xe==="card",hr=E?.gateways?.stripe?"stripe":void 0,kn=(0,a.useCallback)(()=>{et?.({class:"card_surface",provider:hr})},[hr,et]),Mn=(0,a.useRef)(null),zt=(0,a.useCallback)(s=>{Mn.current&&clearTimeout(Mn.current),Mn.current=setTimeout(()=>{Mn.current=null,s()},xr)},[]);(0,a.useEffect)(()=>()=>{Mn.current&&clearTimeout(Mn.current)},[]);let N=(0,a.useCallback)(()=>{kn(),T(e??null),Vt(s=>s+1),nn("expanding"),zt(()=>nn("card"))},[zt,kn,e]),j=(0,a.useCallback)(()=>{nn("collapsing"),zt(()=>nn("buttons"))},[zt]),ne=(0,a.useCallback)(s=>{gr(s),nn("apm-expanding"),zt(()=>nn("apm-form"))},[zt]),re=(0,a.useCallback)(()=>{nn("apm-collapsing"),zt(()=>{nn("buttons"),gr(null)})},[zt]);(0,a.useEffect)(()=>{Y==="buttons"&&Je&&Lt&&(T(e??null),nn("card"))},[Y,Je,Lt,e]);let[Me,z]=(0,a.useState)(null),X=(0,a.useRef)(!1),f=(0,a.useRef)(null),H=(0,a.useRef)("idle"),[Z,bt]=(0,a.useState)(null),Ct=(0,a.useRef)(Z);(0,a.useEffect)(()=>{Ct.current=Z},[Z]);let de=n||Zt,Ae=(0,a.useRef)(null),Wt=(0,a.useMemo)(()=>{if(_e||Ne.claimBuyerIdentity||E?.buyerIdentified!==!1||!e||!t)return;let s=`${de}|${e}|${t}`;Ae.current?.key!==s&&(Ae.current={key:s,claim:Vr(new ur.PaymentAPI(de,{telemetry:!1}),e,t,{...o?{userId:o}:{},...y?{firstName:y}:{},...b?{lastName:b}:{}})});let h=Ae.current.claim;return async V=>{await h(V)}},[_e,Ne.claimBuyerIdentity,E?.buyerIdentified,e,t,de,o,y,b]),ot=_e??Ne.claimBuyerIdentity??Wt,g=m??ft,p=(0,a.useMemo)(()=>(0,u.resolveTheme)(ge),[ge]),v=(0,a.useMemo)(()=>{let s=p?.buttonsLayout??(0,u.resolveButtonsLayoutTheme)(qe);return we?{...s,...we,cardButton:{...s.cardButton,...we.cardButton},cardFormContainer:{...s.cardFormContainer,...we.cardFormContainer},backButton:{...s.backButton,...we.backButton},backButtonIcon:{...s.backButtonIcon,...we.backButtonIcon},submitButton:{...s.submitButton,...we.submitButton},title:{...s.title,...we.title}}:s},[p,qe,we]),Se=Et??p?.appearance,pe=(0,a.useMemo)(()=>ra({appearance:Se,buttonsStyles:v,layout:Y}),[Se,v,Y]),We=Ne.inlineSessionPatchProcessing??!1,Ze=(A??Ht)||We,se=de.replace(/\/+$/,""),D=(0,a.useMemo)(()=>Ma({userId:o,email:r,firstName:y,lastName:b,country:M,zip:K},pt),[o,r,y,b,M,K,pt]),me=[D.firstName,D.lastName].filter(s=>!!s?.trim()).join(" "),Ge=!(0,u.isValidEmail)(D.email?.trim()),$e=(0,a.useRef)(null);Ye&&$e.current===null&&($e.current=Ge);let St=Ye&&($e.current??Ge),je=(0,a.useMemo)(()=>Ol(tt,St),[tt,St]),$t=je.empty||je.malformed,In=(0,a.useMemo)(()=>ae?ae.getRawProvider():null,[ae]),Fr=(0,a.useMemo)(()=>rt?rt.getRawProvider():null,[rt]),no=O||100,Dr=He.toLowerCase(),ya=(0,a.useMemo)(()=>Se?(0,ur.toStripeAppearance)(Se):null,[Se]),Lr=ya,ri=(0,a.useMemo)(()=>{let s=ya??{},h=s.rules??{};return{...s,rules:{...h,".AccordionItem":{padding:"10px 14px",boxShadow:"none",...h[".AccordionItem"]??{}},".AccordionItemContents":{padding:"6px 14px 12px",boxShadow:"none",...h[".AccordionItemContents"]??{}}}}},[ya]),oi=(0,a.useMemo)(()=>({...qi(O,E?.captureMethod),currency:Dr,...Lr?{appearance:Lr}:null}),[O,Dr,E?.captureMethod,Lr]),ai=(0,a.useMemo)(()=>({mode:"payment",amount:no,currency:Dr,captureMethod:"manual",setupFutureUsage:"off_session",...Lr?{appearance:Lr}:null}),[no,Dr,Lr]),he=(0,a.useCallback)(s=>{Tt(s),S?.(s)},[S]),fa=(0,a.useRef)(""),[ii,Ms]=(0,a.useState)(!1),ga=(0,a.useCallback)(()=>{Ms(!0)},[]);(0,a.useEffect)(()=>{if(!Ye||!St||!ot||!ii||$t||fa.current)return;let s=Pn({email:(0,u.isValidEmail)(D.email?.trim())?D.email?.trim():Tn.current.trim(),firstName:D.firstName?.trim(),lastName:D.lastName?.trim()});fa.current=JSON.stringify(s),en(h=>({...h,...s})),Promise.resolve(ot(s)).catch(h=>{fa.current="",he(h instanceof Error?h.message:"Failed to attach buyer details.")})},[Ye,St,ot,ii,$t,D.email,D.firstName,D.lastName,he]),(0,a.useEffect)(()=>{!Ye||!Ce||Ce.setCardFieldOrder?.(G??null,ie==null&&!St)},[Ye,Ce,G,ie,St]),(0,a.useEffect)(()=>{(xe==="expanding"||xe==="collapsing"||xe==="apm-expanding"||xe==="apm-collapsing")&&he(null)},[xe,he]);let Kn=(0,a.useCallback)((s,h,V)=>{c?.(Kt(s,h,V))},[c]),Nr=(0,a.useCallback)((s,h,V)=>{let Le=V?.popupBlocked??vr(h),W=Dl(s,Le),Fe=_r(V?.code)??sr(h)??"external_payment_method_failed",Ve=new u.FloPayError(W,"api_error",{code:"external_payment_method_failed",param:s});z(null),Y==="buttons"&&(nn("buttons"),gr(null)),he(W),d?.(Ve),console.error("[FloPay] External payment method failed:",{method:s,code:Fe,popupBlocked:Le})},[Y,d,he]);(0,a.useEffect)(()=>{if(!Ye||!e){xn(null);return}let s=Ua(E?.vault);if(s){xn(s);return}if(!wn){xn(null);return}xn(null);let h=!0;return new ur.PaymentAPI(se).getVaultCapture(e,t).then(V=>{if(!h)return;let Le=Ua(V);Le?xn(Le):he("Failed to load the secure card form.")}).catch(V=>{h&&he(V instanceof Error?V.message:"Failed to load the secure card form.")}),()=>{h=!1}},[Ye,wn,ut,e,E?.vault,se,t,he]);let er=(0,a.useRef)({onComplete:i,onError:d,updateError:he,emitDecline:Kn,resolvedAccount:D,avsConfig:ie,avsCheckProp:Ke,sessionId:e,nonce:t,baseUrl:se,captureMethod:E?.captureMethod,paymentId:E?.paymentId,authorizationExpiresAt:E?.authorizationExpiresAt});er.current={onComplete:i,onError:d,updateError:he,emitDecline:Kn,resolvedAccount:D,avsConfig:ie,avsCheckProp:Ke,sessionId:e,nonce:t,baseUrl:se,captureMethod:E?.captureMethod,paymentId:E?.paymentId,authorizationExpiresAt:E?.authorizationExpiresAt};let ha=(0,a.useRef)(!1),si=(0,a.useCallback)(()=>{let{resolvedAccount:s,avsConfig:h,avsCheckProp:V}=er.current,Le=s.email?.trim(),W=(0,u.isValidEmail)(Le)?Le:Tn.current.trim();if(!(0,u.isValidEmail)(W))return null;let Fe=s.firstName?.trim(),Ve=s.lastName?.trim(),yt=Yt.current||s.country||"US",Gt=h?(0,u.isAVSFieldVisible)(h.state,yt):!1,wt=h?(0,u.isAVSFieldVisible)(h.address_line_1,yt):!1,kt=h?(0,u.isAVSFieldVisible)(h.postal_code,yt):!1,at=h?(0,u.isAVSFieldVisible)(h.city,yt):!1,ln=h?(0,u.isAVSFieldVisible)(h.address_line_2,yt):!1,Qe=wt&&!Gt&&kt?(0,u.getStateFromPostalCode)(yt,(Pt.current??"").trim()):null,cn=Gt?an.current:Qe;return{accountData:{userId:s.userId??"",email:W,...Fe?{firstName:Fe}:{},...Ve?{lastName:Ve}:{},...kt&&Pt.current?{zip:Pt.current}:{},...at&&_n.current?{city:_n.current}:{},...cn?{state:cn}:{},...wt&&Sn.current?{addressLine1:Sn.current}:{},...ln&&pn.current?{addressLine2:pn.current}:{},country:yt},...V!==void 0?{avsCheck:V}:{},...h?{avsConfig:{country:(0,u.isAVSFieldVisible)(h.country,yt),postal_code:kt,address_line_1:wt,address_line_2:ln,city:at,state:Gt}}:{}}},[]),li=(0,a.useRef)(J);li.current=J,(0,a.useEffect)(()=>{J||g!==ss||er.current.updateError(null)},[J,g]),(0,a.useEffect)(()=>{!Ye||!Ce||Ce.setSubmitGate?.(wr||J||$t)},[Ye,Ce,wr,J,$t]),(0,a.useEffect)(()=>{if(!Ye||!Ce)return;ha.current=!1;let s=!1,h=Ce.on("submitting",()=>{fr(!0),f.current&&clearTimeout(f.current),H.current="validation-window",f.current=setTimeout(()=>{f.current=null,H.current==="validation-window"&&(H.current="processing")},_l),z("processing");let{baseUrl:Ve,sessionId:yt,nonce:Gt,updateError:wt,onError:kt}=er.current;if(!yt||!Gt)return;let at=si();if(!at){wt("Enter a valid email address."),H.current="idle",z(null);return}new ur.PaymentAPI(Ve).patchAccountSnapshot(yt,Gt,at,{telemetryMode:"best_effort"}).catch(ln=>{if(!Tl(ln))return;let Qe=ln instanceof Error?ln.message:"Please check your billing address and try again.";wt(Qe),H.current="idle",z(null),kt?.(ln instanceof u.FloPayError?ln:new u.FloPayError(Qe,"api_error"))})}),V=Ce.on("complete",async Ve=>{if(Xr(Ve.sessionId??er.current.sessionId),H.current="terminal",z("success"),await new Promise(wt=>setTimeout(wt,1200)),ha.current)return;ha.current=!0;let yt=er.current,Gt=(0,u.isAuthorizationOnlySession)(yt)||Ve.outcome==="authorized";er.current.onComplete?.(Gt?{status:"authorized",paymentIntentId:Ve.intentId,paymentId:Ve.paymentId??yt.paymentId,sessionId:Ve.sessionId??yt.sessionId,authorizationExpiresAt:Ve.authorizationExpiresAt??yt.authorizationExpiresAt,checkoutMethod:"card"}:{status:"succeeded",paymentIntentId:Ve.intentId,checkoutMethod:"card"})}),Le=Ce.on("decline",async Ve=>{let{updateError:yt,emitDecline:Gt}=er.current,wt=Ve.message??"Your payment was declined. Please try another card or contact your bank.";H.current="terminal",yt(wt),z("error");let kt=Ve.failureOutcome??(0,u.normalizeCheckoutFailureOutcome)(Ve.declineReason)??"authorization_declined";Gt("card",wt,{code:kt,declineCode:kt}),await new Promise(at=>setTimeout(at,1500)),!s&&(H.current="idle",z(null))}),W=Ce.on("error",async Ve=>{let{updateError:yt,onError:Gt}=er.current,wt=Ve.message??"There was a problem processing your payment. Please try again.";H.current="terminal",yt(wt),z("error"),Gt?.(new u.FloPayError(wt,"api_error",{code:Ve.failureOutcome??"capture_failed"})),await new Promise(kt=>setTimeout(kt,1500)),!s&&(H.current="idle",z(null))}),Fe=Ce.on("blocked",()=>{if(!li.current){fr(!0);return}ga(),er.current.updateError(ss)});return()=>{s=!0,f.current&&(clearTimeout(f.current),f.current=null),H.current="idle",h(),V(),Le(),W(),Fe()}},[Ye,Ce,ga,si]);let tr=!!fe?.clientId,ro=Array.isArray(w),Fo=ro&&w.length>0,As=ro&&w.includes("paypal"),{expressMethods:Do,paymentElementMethods:oo}=(0,a.useMemo)(()=>(0,u.partitionStripeMethods)(w,{excludePaypal:tr}),[w,tr]),ci=tr||!!rt,Bs=(0,a.useMemo)(()=>ci?Do.filter(s=>s!=="paypal"):Do,[Do,ci]),Fs=(0,a.useMemo)(()=>{let s=[];return q&&s.push("apple_pay"),le&&s.push("google_pay"),s},[q,le]),Or=ro?Bs:Fs,Ds=U&&Or.length>0,ba=mn?ct:M,Lo=(0,a.useMemo)(()=>{let s=ba?.trim().toUpperCase();return s?ce?oo.filter(h=>{let V=ce[h];return!V||V.length===0||V.includes(s)}):(0,u.filterStripeMethodsByCountry)(oo,ba):oo},[oo,ba,ce]),va=(0,a.useMemo)(()=>({mode:"payment",amount:no,currency:Dr,paymentMethodCreation:"manual",appearance:ri}),[no,Dr,ri]),[di,ui]=(0,a.useState)("loading"),[pi,mi]=(0,a.useState)("loading"),[yi,fi]=(0,a.useState)("loading"),[Ls,Pa]=(0,a.useState)(!1),[gi,Ca]=(0,a.useState)("loading"),[No,Ns]=(0,a.useState)();(0,a.useEffect)(()=>{Ns(rs())},[]);let hi=ye&&(tr||(ro?As:No===!1)),bi=U&&Ds,ao=!Xe&&hi&&tr,vi=gi==="retrying"||gi==="exhausted",io=!Xe&&hi&&!!Fr&&(!tr||vi),so=!Xe&&bi&&!!In,lo=!Xe&&U&&Fo&&Lo.length>0&&!!In,Os=ao&&!vi?Ls:io&&ds(di),zs=so&&ds(pi),Us=lo&&yi!=="load_error",Pi=s=>s==="loading"||s==="ready",Ci=ao||io&&Pi(di)||so&&Pi(pi)||lo&&yi!=="load_error",Oo=(0,a.useRef)(!1);(0,a.useEffect)(()=>{if(!Oo.current){if(!U&&!ye){Oo.current=!0;let s=new u.FloPayError("FloPay: both `showStripe` and `showPayPal` are false \u2014 nothing to render.","validation_error");d?.(s),he(s.message)}else if(!U&&ye&&!tr&&!Fr){Oo.current=!0;let s=new u.FloPayError("FloPay: `showStripe` is false and no PayPal gateway is configured for this session \u2014 nothing to render.","validation_error");d?.(s),he(s.message)}else if(No!==void 0&&!Xe&&!Lt&&!Ci){Oo.current=!0;let s=new u.FloPayError("FloPay: this checkout session has no vault card capability and no usable supported non-card payment methods. Upgrade the billing backend integration.","api_error",{code:"UnsupportedBackendVaultCapability"});d?.(s),he(s.message)}}},[U,ye,tr,Fr,No,Xe,Lt,Ci,d,he]);let Si=(0,a.useRef)(!1);(0,a.useEffect)(()=>{if(Si.current||!Fo)return;let s=[];q!==!0&&s.push("showApplePay"),le!==!0&&s.push("showGooglePay"),s.length!==0&&(Si.current=!0,console.warn(`[FloPay] ${s.join(" / ")} ${s.length===1?"is":"are"} deprecated: the Apple Pay / Google Pay surface is now driven by \`gateways.stripe.enabledPaymentMethods\` on the session response. Remove the legacy prop(s) to silence this warning.`))},[Fo,q,le]);let wi=(0,a.useCallback)((s,h)=>Ne.applyInlineSessionPatch?Ne.applyInlineSessionPatch(s).then(V=>({error:null,sessionId:V.sessionId||e,nonce:V.session?.clientSecret||t})).catch(V=>{let Le=cs(h,V);return he(Le.message),d?.(Le),{error:Le,sessionId:e,nonce:t}}):Promise.resolve({error:null,sessionId:e,nonce:t}),[Ne.applyInlineSessionPatch,t,d,e,he]),Hn=(0,a.useCallback)(async s=>{if(!L)return{proceed:!0};try{let h=await L({method:s,sessionId:e||void 0,createSession:Ne.inlineSessionDraft});if(h===!1)return{proceed:!1};if(h&&typeof h=="object"){h.account&&en(Le=>({...Le??{},...h.account}));let V=await wi(h,s);return V.error?{proceed:!1,accountPatch:h.account}:{proceed:!0,accountPatch:h.account,sessionId:V.sessionId,nonce:V.nonce}}return{proceed:!0}}catch(h){let V=cs(s,h);return he(V.message),d?.(V),{proceed:!1}}},[wi,Ne.inlineSessionDraft,L,d,e,he]),ki=(0,a.useCallback)(async(s,h)=>{if(X.current)return;X.current=!0,B(!0),z("processing"),he(null);let V=h?.sessionId??e,Le=h?.nonce??t,W=Ma(D,h?.accountPatch),Fe=h?.completionPaymentMethodId??vo(s),Ve=s.originalPaymentMethodId?{...s,originalPaymentMethodId:void 0}:s,yt=s.gateway==="stripe"?"stripe":s.gateway==="paypal"||s.isPaypal?"paypal":void 0,Gt=()=>{et?.({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:"process_payment",provider:yt})};try{let kt=await new ur.PaymentAPI(se).processPayment(W.userId??"",{sessionId:V,nonce:Le,paymentMethodCategory:h?.paymentMethodCategory??Bl(s),tokenizedData:Ve,accountData:{...h?.accountPatch,userId:W.userId??"",email:W.email??"",...W.firstName?{firstName:W.firstName}:{},...W.lastName?{lastName:W.lastName}:{},...ie?(()=>{let Qe=Yt.current,cn=(0,u.isAVSFieldVisible)(ie.state,Qe),Bn=(0,u.isAVSFieldVisible)(ie.address_line_1,Qe),Jt=(0,u.isAVSFieldVisible)(ie.postal_code,Qe),fo=Bn&&!cn&&Jt?(0,u.getStateFromPostalCode)(Qe,(Pt.current??"").trim()):null,go=cn?an.current:fo;return{country:Qe,...Jt&&Pt.current?{zip:Pt.current}:{},...(0,u.isAVSFieldVisible)(ie.city,Qe)&&_n.current?{city:_n.current}:{},...go?{state:go}:{},...Bn&&Sn.current?{addressLine1:Sn.current}:{},...(0,u.isAVSFieldVisible)(ie.address_line_2,Qe)&&pn.current?{addressLine2:pn.current}:{}}})():{}},chv:P,avsCheck:Ke??!1,checkoutType:te,checkoutLayout:$,avsConfig:ie?{country:(0,u.isAVSFieldVisible)(ie.country,Yt.current),postal_code:(0,u.isAVSFieldVisible)(ie.postal_code,Yt.current),address_line_1:(0,u.isAVSFieldVisible)(ie.address_line_1,Yt.current),address_line_2:(0,u.isAVSFieldVisible)(ie.address_line_2,Yt.current),city:(0,u.isAVSFieldVisible)(ie.city,Yt.current),state:(0,u.isAVSFieldVisible)(ie.state,Yt.current)}:void 0});if(kt.ok){let Qe=kt.status===204?null:await kt.json().catch(()=>null),cn=(0,u.isAuthorizationOnlySession)(E)||Qe?.status==="authorized";Xr(V),z("success"),bt(null),await new Promise(Bn=>setTimeout(Bn,1200)),i?.(cn?{status:"authorized",...typeof Qe?.paymentId=="string"?{paymentId:Qe.paymentId}:E?.paymentId?{paymentId:E.paymentId}:{},sessionId:typeof Qe?.sessionId=="string"?Qe.sessionId:V,...typeof Qe?.authorizationExpiresAt=="string"?{authorizationExpiresAt:Qe.authorizationExpiresAt}:E?.authorizationExpiresAt?{authorizationExpiresAt:E.authorizationExpiresAt}:{},paymentIntentId:s.threeDSecureActionResultTokenId,paymentMethodId:Fe,checkoutMethod:s.isPaypal?"paypal":"card"}:{status:"succeeded",paymentIntentId:s.threeDSecureActionResultTokenId,paymentMethodId:Fe,checkoutMethod:s.isPaypal?"paypal":"card"});return}let at=await kt.json().catch(()=>null);if(at?.type==="paypal_redirect_required"){let Qe=at.threeDSecureToken,cn=at.paymentMethodId||s.id||"";if(!ae||!Qe){z("error"),he("PayPal authorization required but no token provided.");return}try{let Bn=rt?.getRawProvider();if(!Bn){he("PayPal is not available.");return}let Jt={return_url:window.location.href};cn&&(Jt.payment_method=cn);let{error:fo}=await Bn.confirmPayment({clientSecret:Qe,confirmParams:Jt,redirect:"if_required"});if(fo){z("error");let go=fo.message??"PayPal payment failed.";he(go),Kn("paypal",go,{code:fo.code})}}catch(Bn){z("error"),he(Bn instanceof Error?Bn.message:"PayPal authorization failed.")}return}if(at?.type==="paypal_direct_required"){let Qe=at.orderId;if(!Qe){z("error"),he("PayPal retry required but no order id provided.");return}let cn=Ct.current?.attempts??0;if(cn>=2){z("error"),he("PayPal payment could not be completed after multiple attempts."),Kn("paypal","paypal_direct_required retry limit exceeded");return}Pa(!1),Ca("loading"),bt({orderId:Qe,attempts:cn+1}),z(null);return}(0,u.classifyPaymentRejection)(kt.status,at)||Gt(),z("error");let ln=at?.message??"Payment failed. Please try again.";he(ln),Kn(s.isPaypal?"paypal":"card",ln,{code:at?.code??at?.gatewayErrorCode,declineCode:at?.declineCode??at?.gatewayDeclineReason}),await new Promise(Qe=>setTimeout(Qe,1500))}catch(wt){fs(wt)||Gt(),z("error"),he(wt instanceof Error?wt.message:"An unexpected error occurred"),await new Promise(kt=>setTimeout(kt,1500))}finally{B(!1),z(null),X.current=!1}},[se,e,t,D,ie,Ke,te,$,P,ae,rt,E,i,he,Kn,et]),bn=(0,a.useCallback)((s,h)=>{C?C(s):ki(s,h)},[C,ki]),co=`${ys}:${e}`;(0,a.useEffect)(()=>{if(typeof window>"u")return;let s=localStorage.getItem(co);if(!s)return;let h;try{h=JSON.parse(s)}catch{localStorage.removeItem(co);return}if(!h||typeof h.createdAt!="number"||Date.now()-h.createdAt<0||Date.now()-h.createdAt>Il||typeof h.paymentMethodId!="string"||typeof h.providerIntentId!="string"||typeof h.paymentMethodType!="string"||h.sessionId!==e||!t||h.nonce!==t||!Or.includes(h.paymentMethodType)){localStorage.removeItem(co);return}localStorage.removeItem(co),bn({id:h.paymentMethodId,type:"card",threeDSecureActionResultTokenId:h.providerIntentId,gateway:"stripe",paymentMethodType:h.paymentMethodType},{...h.accountPatch?{accountPatch:h.accountPatch}:{},paymentMethodCategory:"wallet",sessionId:e,nonce:t})},[bn,t,e,co,Or]);let Ii=(0,a.useRef)(!1);(0,a.useEffect)(()=>{if(typeof window>"u"||Ii.current)return;let s=new URLSearchParams(window.location.search),h=s.get("payment_intent"),V=s.get("payment_intent_client_secret"),Le=s.get("redirect_status");if(!h||!V)return;let W=kt=>{let at=localStorage.getItem(kt);if(!at)return null;try{return JSON.parse(at)}catch{return localStorage.removeItem(kt),null}},Fe=W(nr)??W(is),Ve;if(Fe?.clientSecret){if(Fe.clientSecret!==V)return;Ve={...Fe.accountPatch?{accountPatch:Fe.accountPatch}:{},...Fe.sessionId?{sessionId:Fe.sessionId}:{},...Fe.nonce?{nonce:Fe.nonce}:{}}}else if(Fe?.sessionId&&Fe.sessionId!==e)return;Ii.current=!0,localStorage.removeItem(nr),localStorage.removeItem(is);let yt=new URL(window.location.href);yt.searchParams.delete("payment_intent"),yt.searchParams.delete("payment_intent_client_secret"),yt.searchParams.delete("redirect_status"),window.history.replaceState({},"",yt.toString());let Gt=Fe?.paymentMethodType??Fe?.tokenType??"card",wt="card";(async()=>{let kt=ae?.getRawProvider();if(!kt){let Jt="Payment is not available \u2014 please refresh and try again.";he(Jt),Kn(wt,Jt);return}if(Le==="failed"){let Jt="Payment was declined. Please try again.";he(Jt),Kn(wt,Jt);return}let{paymentIntent:at,error:ln}=await kt.retrievePaymentIntent(V);if(ln){let Jt=ln.message??"Failed to retrieve payment status.";he(Jt),Kn(wt,Jt,{code:ln.code});return}let Qe=at?.status,cn=bo(Qe);if(!at||!cn){let Jt=Qe==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";he(Jt),Kn(wt,Jt,{code:Qe??"missing_payment_intent"});return}let Bn=typeof at.payment_method=="string"?at.payment_method:at.payment_method?.id;bn({id:Bn??Fe?.paymentMethodId??Fe?.tokenId??at.id,type:"card",threeDSecureActionResultTokenId:at.id,gateway:Fe?.gateway??"stripe",paymentMethodType:Gt},Ve)})()},[e,bn,ae,he,Kn]);let Sa=(0,a.useCallback)(s=>{s.preventDefault()},[]);if(!(ae!==null))return(0,l.jsx)("div",{"data-testid":"flopay-loading","aria-busy":"true",children:"Loading payment form..."});let uo=Y==="buttons",vn=Se?.variables,qs=new Set(["#FFFFFF","#ffffff","#fff","#FFF","white"]),wa=vn?.colorBackground,$s=wa&&!qs.has(wa)?wa:void 0,po=v.cardInputBorder??(uo?"#e5e7eb":"#A4A4FF"),Ei=vn?.colorDanger??"#dc2626",xt=s=>Br[s]&&(Qn[s]||yn),zo=$t&&(Nt||yn),An=s=>s?Ei:po,Uo=(sn.malformed||sn.empty)&&(Zn||yn),js=An(Uo),ka=v.cardFormContainer?.backgroundColor??$s??(uo?"white":"#EDEDFF"),zr=v.cardInputBackground??vn?.colorBackground??"white",Ia=qr(Ee),Ri=qr(Re),Ur=v.nameInput,_i=v.cardInputFontSize??zl(Ur?.fontSize)??vn?.fontSizeBase??"16px",Ti=typeof Ur?.fontFamily=="string"?Ur.fontFamily:vn?.fontFamily??"Poppins, sans-serif",xi=Oa(Ur?.fontWeight)??400,Vs=v.cardInputColor??(typeof Ur?.color=="string"?Ur.color:void 0)??vn?.colorText??"#262833",Ks=v.cardInputPlaceholderColor??"#9ca3af",At=vn?.borderRadius??"8px",kr=vn?.borderRadius??v.cardButton?.borderRadius??At,Ir=vn?.colorPrimary??"#4A49FF",Hs=vn?.colorPrimaryHover??to(Ir,.12),Ea=vn?.colorText??"#262833",Ra={fontSize:_i,fontFamily:Ti,fontWeight:xi,color:Vs,WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},mo={marginTop:"0.375rem",...Ra,fontSize:"0.75rem",lineHeight:1.4,color:Ei},Ys={"--flopay-input-placeholder-color":Ks,"--flopay-input-font-size":_i,"--flopay-input-font-family":Ti,"--flopay-input-font-weight":String(xi)},yo=v.cardFormContainer??{},_a=yo.padding??(uo?"0":"1rem"),Ta=yo.borderRadius??At,Ws=Ce&&jn?(0,l.jsx)(eo,{capture:Ce,html:jn.html,messageToken:jn.messageToken,expectedOrigin:jn.expectedOrigin,theme:pe,onReady:()=>{if(!St&&!ie||typeof document>"u")return;let s=()=>{let V=(document.querySelector('[data-testid="flopay-vault-identity-fields"]')??document.querySelector('[data-testid="flopay-avs-fields"]'))?.querySelector("input:not([disabled]), select:not([disabled])");if(V){tn.current=!0;try{V.focus()}finally{tn.current=!1}}};$n.current||s()},onError:s=>he(s),onValidation:s=>{let h=H.current;(h==="idle"||h==="validation-window")&&(he(s),s&&H.current==="validation-window"&&(f.current&&(clearTimeout(f.current),f.current=null),H.current="idle",z(null)))}}):(0,l.jsx)("div",{"data-testid":"flopay-vault-loading",style:{minHeight:120,display:"flex",alignItems:"center",justifyContent:"center",color:"#6b7280",fontSize:14},children:"Loading secure card form\u2026"}),Mi=(0,l.jsxs)("div",{onFocusCapture:s=>{["INPUT","SELECT","TEXTAREA","IFRAME"].includes(s.target.tagName)&&kn()},style:{backgroundColor:ka,borderRadius:Ta,...yo,padding:_a,...Ys,display:"flex",flexDirection:"column"},children:[(0,l.jsx)("style",{children:`
|
|
30
|
+
`,aa=44,xr=280;function Ka(e){if(!e.themeBundle&&!e.explicitPrimaryColor)return{backgroundColor:"white",color:"#262833",border:"1px solid #d1d5db",borderRadius:e.resolvedBorderRadius,boxShadow:"0 1px 2px rgba(0,0,0,0.04)"};let t=e.themeBundle?e.submitButtonStyle??{}:{};return{backgroundColor:e.resolvedPrimaryColor,color:t.color??"white",border:t.border??"none",borderRadius:t.borderRadius??e.resolvedBorderRadius,boxShadow:t.boxShadow}}var Bl={visibility:"hidden",position:"absolute",pointerEvents:"none",width:"100%",height:0,overflow:"hidden"};function Fl(e){return e.isPaypal||e.gateway==="paypal"||e.paymentMethodType==="paypal"?"paypal":e.paymentMethodType==="apple_pay"||e.paymentMethodType==="google_pay"?"wallet":e.paymentMethodType&&e.paymentMethodType!=="card"?"apm":"card"}var bs={width:"100%",minHeight:aa,margin:"0 0 0.5rem",padding:"0.75rem 0.875rem",border:"1px solid #2563eb",borderRadius:8,background:"#eff6ff",color:"#1d4ed8",fontSize:"0.95rem",fontWeight:700,cursor:"pointer"};function Dl(e){switch(e){case"paypal":return"PayPal";case"apple_pay":return"Apple Pay";case"google_pay":return"Google Pay";default:return"Card"}}function cs(e){return e==="paypal"?"paypal":e==="apple_pay"?"apple_pay":"google_pay"}function $a(e){return e==="paypal"?"PayPal":(0,u.getStripeMethodDisplayName)(e)}function Ll(e,t){let n=`We couldn't open ${$a(e)}. Try again or choose another payment method.`;return t?`${n} Allow pop-ups for this site, then try again.`:n}function vs(e){let t=(0,a.useRef)(0),n=(0,a.useRef)(null),r=(0,a.useRef)(null),o=(0,a.useCallback)((m=r.current)=>{let S=m;S?.timer&&(clearTimeout(S.timer),S.timer=null)},[]),i=(0,a.useCallback)((m,S)=>{typeof document<"u"&&document.visibilityState!=="visible"||(o(m),m.timer=setTimeout(()=>{m.timer=null,r.current?.generation===m.generation&&(r.current=null,n.current=m.generation,e(m.method,new Error("External payment method returned without a terminal callback."),{code:"external_method_missing_terminal_callback"}))},S))},[o,e]),d=(0,a.useCallback)(m=>{m.yieldedControl&&i(m,600)},[i]),c=(0,a.useCallback)(m=>{o();let S=t.current+1;t.current=S,n.current=null;let ye={generation:S,method:m,timer:null,yieldedControl:!1};return r.current=ye,S},[o]),C=(0,a.useCallback)(m=>{let S=r.current;return typeof m=="number"&&S?.generation!==m?!1:(o(S),r.current=null,(typeof m!="number"||n.current===m)&&(n.current=null),!0)},[o]),y=(0,a.useCallback)(m=>{let S=r.current,ye=m??S?.generation??t.current;(!m||S?.generation===m)&&(o(S),r.current=null),n.current=ye},[o]),b=(0,a.useCallback)(m=>n.current===(m??t.current),[]),P=(0,a.useCallback)(m=>r.current?.generation===m&&n.current!==m,[]),F=(0,a.useCallback)(()=>{let m=r.current;m&&d(m)},[d]),A=(0,a.useCallback)(()=>{let m=r.current;m&&(m.yieldedControl=!0,o(m))},[o]);return(0,a.useEffect)(()=>{let m=()=>{document.visibilityState==="visible"?F():A()},S=()=>{A()};return document.addEventListener("visibilitychange",m),window.addEventListener("blur",S),window.addEventListener("focus",F),()=>{document.removeEventListener("visibilitychange",m),window.removeEventListener("blur",S),window.removeEventListener("focus",F),o()}},[o,A,F]),{startAttempt:c,finishAttempt:C,invalidateAttempt:y,isAttemptInvalidated:b,isAttemptCurrent:P,generationRef:t}}function Nl(e){let t=(0,u.getPostalCodeExample)(e);return`Enter a valid ${(0,u.getPostalCodeLabel)(e)}${t?` (e.g. ${t})`:""}`}function Ol(e,t,n){let r=(0,u.isPostalCodeSupported)(e),o=t.trim(),i=n&&r,d=i&&!o,c=i&&!!o&&!(0,u.isValidPostalCode)(e,o);return{visible:n,supported:r,required:i,empty:d,malformed:c}}function zl(e,t){let n=e.trim(),r=t&&!n,o=t&&!!n&&!(0,u.isValidEmail)(n);return{required:t,empty:r,malformed:o,value:n}}function ds(e,t){return t instanceof u.FloPayError?t:new u.FloPayError(t instanceof Error?t.message:`${Dl(e)} before-click hook failed.`,"validation_error")}function qa(){return(0,l.jsx)("style",{children:Al})}function Ul(e){return typeof e=="number"?`${e}px`:e}function Ps(e,t){let n=e.availablePaymentMethods;return n&&t.some(r=>n[r])?"ready":"unavailable"}function Cs({state:e,placeholderTestId:t,borderRadius:n=8,children:r}){return e==="unavailable"||e==="load_error"?null:(0,l.jsxs)("div",{style:{position:"relative",minHeight:44},children:[(0,l.jsx)("div",{"data-testid":t,"aria-hidden":e==="ready",style:{position:"absolute",inset:0,height:44,borderRadius:n,background:"#e5e7eb",animation:e==="ready"?void 0:"flopay-pulse 1.5s ease-in-out infinite",opacity:e==="ready"?0:1,transform:e==="ready"?"scale(0.985)":"scale(1)",transition:"opacity 140ms ease-out, transform 140ms ease-out",pointerEvents:"none"}}),(0,l.jsx)("div",{style:{minHeight:44,opacity:e==="ready"?1:0,transform:e==="ready"?"translateY(0)":"translateY(2px)",transition:"opacity 140ms ease-out, transform 140ms ease-out",pointerEvents:e==="ready"?"auto":"none"},children:r})]})}function us(e){return e!=="unavailable"&&e!=="load_error"}function la(e){return(0,l.jsx)($l,{...e})}function ps({sessionId:e,nonce:t,email:n,billingApiUrl:r,onTokenizedBody:o,onErrorChange:i,isProcessing:d=!1,onButtonClick:c,onDecline:C,onTechnicalFailure:y,runBeforeButtonClick:b,billingName:P,onBuyerIdentityReady:F,onLoadStateChange:A,placeholderBorderRadius:m}){let S=lr(),{emitInstrument:ye}=(0,a.useContext)(Fn),U=(0,Ft.useStripe)(),w=(0,Ft.useElements)(),[ce,q]=(0,a.useState)("loading");(0,a.useEffect)(()=>{A?.(ce)},[ce,A]);let[le,Y]=(0,a.useState)(!1),ge=!(0,u.isValidEmail)(n?.trim())||!P?.trim(),{request:qe,collect:we,finish:Et}=Hr(),Oe=(0,a.useRef)(!1),Ee=(0,a.useRef)(null),Re=(0,a.useRef)(null),[oe,ee]=(0,a.useState)(0),[L,_e]=(0,a.useState)(!1),Te=(0,a.useRef)(!1),G=(0,a.useRef)(new Map),{startAttempt:Ie,finishAttempt:Pe,invalidateAttempt:M,isAttemptInvalidated:K,isAttemptCurrent:ke}=vs((te,$,O)=>{y?.(te,$,{...O,popupBlocked:O?.popupBlocked??vr($)}),_e(!0),ee(He=>He+1)});(0,a.useEffect)(()=>{L&&Re.current?.focus()},[L,oe]);let be=(0,a.useCallback)(()=>{ee(te=>te+1)},[]),Q=(0,a.useCallback)((te,$,O)=>{M(O),y?.("paypal",te,{code:$,popupBlocked:vr(te)}),_e(!0),be()},[M,y,be]),Be=(0,a.useCallback)(()=>{window.setTimeout(()=>{(Ee.current?.querySelector("iframe")??Ee.current)?.focus()},0)},[]);(0,a.useEffect)(()=>{Te.current&&(Te.current=!1,Be())},[Be,oe]);let st=(0,a.useCallback)(()=>{_e(!1),i?.(null),Be()},[Be,i]);(0,a.useEffect)(()=>{if(!U||Oe.current)return;let te=new URLSearchParams(window.location.search),$=te.get("payment_intent"),O=te.get("payment_intent_client_secret"),He=te.get("redirect_status");if(!$||!O)return;Oe.current=!0;let Je;try{let lt=localStorage.getItem(To);if(lt){let E=JSON.parse(lt);E.clientSecret===O&&(Je={...E.accountPatch?{accountPatch:E.accountPatch}:{},...E.sessionId?{sessionId:E.sessionId}:{},...E.nonce?{nonce:E.nonce}:{}})}}catch{}try{localStorage.removeItem(To)}catch{}let fe=new URL(window.location.href);fe.searchParams.delete("payment_intent"),fe.searchParams.delete("payment_intent_client_secret"),fe.searchParams.delete("redirect_status"),window.history.replaceState({},"",fe.toString()),(async()=>{try{if(Y(!0),He==="failed"){let R="PayPal payment was declined. Please try again.";i?.(R),C?.(Kt("paypal",R));return}let{paymentIntent:lt,error:E}=await U.retrievePaymentIntent(O);if(E){i?.(E.message??"Failed to retrieve PayPal payment status.");return}if(lt&&(lt.status==="requires_capture"||lt.status==="succeeded")){let R=typeof lt.payment_method=="string"?lt.payment_method:lt.payment_method?.id;o({id:R??lt.id,type:"card",threeDSecureActionResultTokenId:lt.id,isPaypal:!0},Je)}else{let R="PayPal payment was not completed. Please try again.";i?.(R),C?.(Kt("paypal",R))}}catch(lt){i?.(lt instanceof Error?lt.message:"Failed to complete PayPal payment.")}finally{Y(!1)}})()},[U,o,i,C]);let vt=(0,a.useCallback)(async te=>{if(d||le){te.reject();return}let $=b?await b("paypal"):{proceed:!0};if(!$.proceed){G.current.delete(oe),te.reject();return}let O=Ie("paypal");G.current.set(oe,{generation:O,accountPatch:$.accountPatch,sessionId:$.sessionId,nonce:$.nonce}),_e(!1),c?.("paypal"),te.resolve()},[d,c,b,Ie,le,oe]),Ke=(0,a.useCallback)(async te=>{if(!U||!w)return;let $=G.current.get(oe);if($&&!ke($.generation)){G.current.delete(oe);return}if(!$&&K()||$&&!Pe($.generation))return;$||Pe();let O=$??null;if(G.current.delete(oe),!O&&b){let R=await b("paypal");if(!R.proceed){te.paymentFailed({reason:"fail",message:"PayPal checkout was cancelled."});return}O={accountPatch:R.accountPatch,sessionId:R.sessionId,nonce:R.nonce}}let He=O?.sessionId??e,Je=O?.nonce??t,fe=await Ml({event:te,prepared:O,email:n,billingName:P,methodLabel:"PayPal",collect:we});if(!fe){te.paymentFailed({reason:"fail",message:"Buyer details are required."});return}let lt=fe.email,E=Pn({...O?.accountPatch,...fe});try{if(Y(!0),i?.(null),!He||!(0,u.isValidEmail)(lt))throw new Error("Missing sessionId or email for PayPal payment");await F?.(fe);let R=U.createPaymentMethod,{error:De,paymentMethod:ue}=await R({type:"paypal"});if(De){Q(De,"stripe_paypal_create_payment_method_failed",$?.generation),te.paymentFailed({reason:"fail"});return}let ae=await ia(r,ye,He,Je??"",{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:"paypal",paymentMethodId:ue?.id??null,intentKind:"payment"});if(ae.provider!=="stripe")throw new Error("Invalid provider returned for PayPal intent");let ot=ae.clientSecret,Ne={return_url:window.location.href};if(ue?.id&&(Ne.payment_method=ue.id),typeof window<"u")try{localStorage.setItem(To,JSON.stringify({clientSecret:ot,sessionId:He,nonce:Je,accountPatch:E}))}catch{}let{error:Xe,paymentIntent:Mt}=await U.confirmPayment({clientSecret:ot,confirmParams:Ne,redirect:"if_required"});if(Xe){if(typeof window<"u")try{localStorage.removeItem(To)}catch{}if(Po(Xe)){let J=Xe.message??"Your payment was declined.";i?.(J),C?.(Kt("paypal",J,{code:sr(Xe),declineCode:Wr(Xe)})),await sa({billingApiUrl:r,sessionId:He,nonce:Je,request:{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:"paypal",providerDeclineReason:sr(Xe)??"provider_declined"}})}else Q(Xe,"stripe_paypal_confirm_failed",$?.generation);return}if(typeof window<"u")try{localStorage.removeItem(To)}catch{}let _=typeof Mt?.payment_method=="string"?Mt.payment_method:Mt?.payment_method?.id;o({id:_??Mt?.id,type:"card",threeDSecureActionResultTokenId:Mt?.id,isPaypal:!0},{accountPatch:E,paymentMethodCategory:"paypal",sessionId:He,nonce:Je});return}catch(R){Q(R,"stripe_paypal_failed",$?.generation)}finally{Y(!1)}},[U,w,e,t,n,P,we,F,r,ye,o,i,C,b,Q,Pe,ke,K,oe]);return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(Cs,{state:ce,placeholderTestId:"flopay-paypal-placeholder",borderRadius:m,children:(0,l.jsxs)("div",{ref:Ee,tabIndex:-1,"data-testid":"flopay-paypal-focus-target",role:"group","aria-label":"PayPal payment method",style:{borderRadius:8,outlineOffset:4},children:[L&&(0,l.jsx)("button",{ref:Re,type:"button","data-testid":"flopay-paypal-retry-button",onClick:st,style:bs,children:"Try PayPal again"}),qe&&(0,l.jsx)(Yr,{identity:qe.identity,methodLabel:qe.methodLabel,onComplete:Et,onCancel:()=>Et(null)},qe.id),(0,l.jsx)("div",{style:{display:qe?"none":void 0},children:(0,l.jsx)(Ft.ExpressCheckoutElement,{onReady:te=>q(Ps(te,["paypal"])),onLoadError:()=>{q("load_error"),Va(jt(S),"paypal","paypal")},onClick:vt,onConfirm:Ke,onCancel:()=>{let te=G.current.get(oe);G.current.delete(oe),jt(S)?.terminal({outcome:"payment_cancelled",provider:"paypal",paymentMethodCategory:"paypal"}),M(te?.generation),_e(!1),Te.current=!0,be()},options:{buttonType:{paypal:"paypal"},billingAddressRequired:ge,emailRequired:ge,phoneNumberRequired:!1,shippingAddressRequired:!1,paymentMethods:{applePay:"never",googlePay:"never",paypal:"auto",link:"never"}}},oe)})]})}),le&&(0,l.jsx)(Ln,{status:"processing"})]})}function ms({sessionId:e,nonce:t,email:n,billingApiUrl:r,intentKind:o,expressMethods:i,onTokenizedBody:d,onErrorChange:c,onButtonClick:C,onDecline:y,onTechnicalFailure:b,runBeforeButtonClick:P,billingName:F,onBuyerIdentityReady:A,onLoadStateChange:m,placeholderBorderRadius:S}){let ye=lr(),{emitInstrument:U}=(0,a.useContext)(Fn),w=(0,Ft.useStripe)(),ce=(0,Ft.useElements)(),[q,le]=(0,a.useState)("loading");(0,a.useEffect)(()=>{m?.(q)},[q,m]);let[Y,ge]=(0,a.useState)(!1),qe=(0,a.useRef)(!(0,u.isValidEmail)(n?.trim())||!F?.trim()).current,{request:we,collect:Et,finish:Oe}=Hr(),Ee=(0,a.useRef)(null),Re=(0,a.useRef)(null),[oe,ee]=(0,a.useState)(0),[L,_e]=(0,a.useState)(!1),[Te,G]=(0,a.useState)("google_pay"),Ie=(0,a.useRef)(!1),Pe=(0,a.useRef)("google_pay"),M=(0,a.useRef)("google_pay"),K=(0,a.useRef)(null),ke=(0,a.useRef)(new Map),{startAttempt:be,finishAttempt:Q,invalidateAttempt:Be,isAttemptInvalidated:st,isAttemptCurrent:vt,generationRef:Ke}=vs((E,R,De)=>{b?.(E,R,{...De,popupBlocked:De?.popupBlocked??vr(R)}),G(E),_e(!0),ee(ue=>ue+1)});(0,a.useEffect)(()=>{L&&Re.current?.focus()},[L,oe]);let te=(0,a.useCallback)(()=>{ee(E=>E+1)},[]),$=(0,a.useCallback)((E,R,De,ue)=>{Be(ue),b?.(E,R,{code:De,popupBlocked:vr(R)}),G(E),_e(!0),te()},[Be,b,te]),O=(0,a.useCallback)(()=>{window.setTimeout(()=>{(Ee.current?.querySelector("iframe")??Ee.current)?.focus()},0)},[]);(0,a.useEffect)(()=>{Ie.current&&(Ie.current=!1,O())},[O,oe]);let He=(0,a.useCallback)(()=>{_e(!1),c?.(null),O()},[O,c]),Je=(0,a.useCallback)(async E=>{let R=!1,De=B=>{R||(R=!0,E.paymentFailed({reason:"fail",...B?{message:B}:{}}))};if(!w||!ce){De();return}let ue=ke.current.get(oe);if(ue&&!vt(ue.generation)){ke.current.delete(oe),De();return}if(!ue&&st()){De();return}if(ue&&!Q(ue.generation)){De();return}ue||Q();let ae=E.expressPaymentType??ue?.method??Pe.current,ot=ue??null,Ne=cs(ae),Xe=jt(ye),Mt=Xe?.now()??globalThis.performance?.now()??Date.now(),_=new AbortController,J=!1,ct,Ze=new Promise((B,ft)=>{ct=ft}),Qt=window.setTimeout(()=>{J=!0,_.abort(),ct(oa)},_l),Ht=async(B,ft,Tt)=>{let dt=Xe?.now()??globalThis.performance?.now()??Date.now();try{return await Promise.race([Tt,Ze])}finally{let Rt=Xe?.now()??globalThis.performance?.now()??Date.now();Xe?.performance({stage:B,durationMs:Math.max(0,Rt-dt),durationMode:"machine",requestCategory:ft,paymentMethodCategory:"wallet",provider:"stripe",...J?{statusClass:"timeout"}:{}})}};try{if(ge(!0),c?.(null),!ot&&P){let Qe=await Ht("processing","other",P(Ne));if(!Qe.proceed){De();return}ot={accountPatch:Qe.accountPatch,sessionId:Qe.sessionId,nonce:Qe.nonce}}let B=ot?.sessionId??e,ft=ot?.nonce??t,Tt=hs({event:E,fallbackEmail:K.current?.email??ot?.accountPatch?.email??n,fallbackName:[K.current?.firstName??ot?.accountPatch?.firstName,K.current?.lastName??ot?.accountPatch?.lastName].filter(Boolean).join(" ")||F});if(!(0,u.isValidEmail)(Tt.email)){De("Buyer details are required."),Et($a(ae),Tt).then(Qe=>{Qe&&(K.current=Qe)});return}K.current=null;let dt=Pn({...ot?.accountPatch,...Tt});await Ht("processing","provider_sdk",Promise.resolve(A?.(Tt)));let{error:Rt}=await Ht("tokenization","provider_sdk",ce.submit());if(Rt){De(),$(ae,Rt,"stripe_wallet_submit_failed",ue?.generation);return}if(!B)throw new Error("Missing sessionId or email for payment.");let dn=await Ht("processing","intent_create",ia(r,U,B,ft??"",{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:ae,paymentMethodId:null,intentKind:o},{signal:_.signal}));if(dn.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let rn=dn.clientSecret,un=(0,u.isSetupIntentClientSecret)(rn)?w.confirmSetup({elements:ce,clientSecret:rn,redirect:"if_required"}):w.confirmPayment({elements:ce,clientSecret:rn,redirect:"if_required"}),Dt=!1,Cn=Qe=>{if(Dt||Qe.error||ue&&Ke.current!==ue.generation)return;let ht=Qe.setupIntent??Qe.paymentIntent,on=ht?.id,nt=ht?.status,Jn=Qe.setupIntent?nt==="succeeded":bo(typeof nt=="string"?nt:void 0),pt=ht?.payment_method,en=typeof pt=="string"?pt:typeof pt?.id=="string"?pt.id:null;if(!Jn||typeof on!="string"||!en)return;Dt=!0;let Pt=`${fs}:${B}`;if(typeof window<"u")try{localStorage.setItem(Pt,JSON.stringify({createdAt:Date.now(),sessionId:B,nonce:ft,accountPatch:dt,paymentMethodId:en,providerIntentId:on,paymentMethodType:ae}))}catch{}try{d({id:en,type:"card",threeDSecureActionResultTokenId:on},{accountPatch:dt,paymentMethodCategory:"wallet",sessionId:B,nonce:ft})}finally{if(typeof window<"u")try{localStorage.removeItem(Pt)}catch{}}};un.then(Qe=>{J&&Cn(Qe)},()=>{});let Yt;try{Yt=await Ht("three_ds_handoff","provider_sdk",un)}catch(Qe){throw Qe!==oa&&Xe?.error({...$i(Qe),stage:"three_ds_handoff",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",provider:"stripe",statusClass:"unknown"}),Qe}let gt=Yt.error;if(gt){if(Po(gt)){let Qe=gt.message??"Your payment was declined.";De(Qe),c?.(Qe),y?.(Kt(Ne,Qe,{code:sr(gt),declineCode:Wr(gt)})),sa({billingApiUrl:r,sessionId:B,nonce:ft,request:{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:ae,providerDeclineReason:sr(gt)??"provider_declined"}})}else De(),$(ae,gt,"stripe_wallet_confirm_failed",ue?.generation);return}if(Cn(Yt),!Dt)throw new Error("Invalid provider returned for APM intent")}catch(B){B===oa&&Xe?.error({errorCode:"REQUEST_TIMEOUT",stage:"callback",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",provider:"stripe",statusClass:"timeout",failureCategory:"provider_runtime"}),De(),$(ae,B,B===oa?"stripe_wallet_authorization_timeout":"stripe_wallet_failed",ue?.generation)}finally{window.clearTimeout(Qt);let B=Xe?.now()??globalThis.performance?.now()??Date.now();Xe?.performance({stage:"callback",durationMs:Math.max(0,B-Mt),durationMode:"machine",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",provider:"stripe",...J?{statusClass:"timeout"}:{}}),ge(!1)}},[w,ce,e,t,n,F,Et,A,r,U,o,d,c,y,P,$,Q,vt,st,Ke,ye,oe]),fe=(0,a.useMemo)(()=>{let E=["applePay","googlePay","paypal","link","amazonPay","klarna"],R=new Set(["applePay","googlePay"]),De=new Set(i.map(u.stripeExpressMethodToOptionKey)),ue={};for(let ae of E)De.has(ae)?ue[ae]=R.has(ae)?"always":"auto":ue[ae]="never";return ue},[i]),lt=(0,a.useMemo)(()=>i.map(u.stripeExpressMethodToOptionKey),[i]);return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(Cs,{state:q,placeholderTestId:"flopay-wallet-placeholder",borderRadius:S,children:(0,l.jsxs)("div",{ref:Ee,tabIndex:-1,"data-testid":"flopay-wallet-focus-target",role:"group","aria-label":"Wallet payment methods",style:{borderRadius:8,outlineOffset:4},children:[L&&(0,l.jsxs)("button",{ref:Re,type:"button","data-testid":"flopay-wallet-retry-button",onClick:He,style:bs,children:["Try ",$a(Te)," again"]}),we&&(0,l.jsx)(Yr,{identity:we.identity,methodLabel:we.methodLabel,onComplete:Oe,onCancel:()=>Oe(null)},we.id),(0,l.jsx)("div",{style:{display:we?"none":void 0},children:(0,l.jsx)(Ft.ExpressCheckoutElement,{onReady:E=>{le(Ps(E,lt))},onLoadError:E=>{le("load_error"),Va(jt(ye),"stripe","wallet")},onClick:async E=>{Pe.current=E.expressPaymentType,M.current=cs(E.expressPaymentType);let R=!0,De=window.setTimeout(()=>{R=!1,E.reject()},Rl),ue=P?await P(M.current):{proceed:!0};if(window.clearTimeout(De),!R)return;if(!ue.proceed){ke.current.delete(oe),E.reject();return}let ae=be(E.expressPaymentType);ke.current.set(oe,{generation:ae,method:E.expressPaymentType,accountPatch:ue.accountPatch,sessionId:ue.sessionId,nonce:ue.nonce}),_e(!1),C?.(M.current),E.resolve()},onConfirm:Je,onCancel:()=>{let E=ke.current.get(oe);ke.current.delete(oe),jt(ye)?.terminal({outcome:"payment_cancelled",provider:"stripe",paymentMethodCategory:"wallet"}),Be(E?.generation),_e(!1),Ie.current=!0,te()},options:{buttonType:{applePay:"plain",googlePay:"plain"},paymentMethods:fe,emailRequired:qe,billingAddressRequired:qe,layout:{maxColumns:1,overflow:"never"}}},oe)})]})}),Y&&(0,l.jsx)(Ln,{status:"processing"})]})}function ql({method:e,themeId:t,submitting:n=!1,disabled:r=!1,highlighted:o=!1,hasNextStep:i=!1,onClick:d,backgroundColor:c,borderColor:C,textColor:y,borderRadius:b,fontFamily:P}){let F=(0,u.resolveStripeMethodBrandVariant)(e,t),A=as[e],[m,S]=(0,a.useState)(!1),ye=F?.backgroundColor??c??"#ffffff",U=F?.borderColor??C??"#d1d5db",w=F?.textColor??y??"#262833";return(0,l.jsx)("button",{type:"button","data-testid":`flopay-stripe-method-button-${e}`,"data-method":e,onClick:()=>{!n&&!r&&d()},disabled:n||r,"aria-busy":n||void 0,style:{position:"relative",width:"100%",boxSizing:"border-box",height:aa,padding:"0 1rem",backgroundColor:ye,color:w,border:`1px solid ${U}`,borderRadius:b??8,fontSize:"0.95rem",fontWeight:600,fontFamily:P,cursor:n||r?"not-allowed":"pointer",opacity:r&&!n?.55:1,animation:n?"flopay-pulse 1.5s ease-in-out infinite":void 0,display:"flex",alignItems:"center",justifyContent:"center",gap:8,transition:"transform 0.1s, opacity 140ms ease-out, border-color 140ms ease-out",boxShadow:o?"0 0 0 2px rgba(74, 73, 255, 0.15)":void 0},children:n?(0,l.jsx)("span",{style:{margin:"0 auto"},children:`Connecting to ${(0,u.getStripeMethodDisplayName)(e)}\u2026`}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:(0,u.hasVendoredStripeMethodLogo)(e)?8:0},children:[A&&!m?(0,l.jsx)("img",{src:A,alt:"","aria-hidden":"true",onError:()=>S(!0),loading:"lazy",decoding:"async",width:30,height:20,style:{width:30,height:20,flexShrink:0,borderRadius:3,objectFit:"contain",display:"inline-flex"}}):F?.logoSvg?(0,l.jsx)("span",{"aria-hidden":"true",style:{width:30,height:20,flexShrink:0,display:"inline-flex",borderRadius:3,overflow:"hidden"},dangerouslySetInnerHTML:{__html:F.logoSvg}}):null,(0,l.jsx)("span",{children:(0,u.getStripeMethodDisplayName)(e)})]}),i&&(0,l.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:w,strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",style:{position:"absolute",right:"1rem",top:"50%",transform:"translateY(-50%)",flexShrink:0,opacity:.7},"aria-hidden":"true",children:(0,l.jsx)("path",{d:"M9 18l6-6-6-6"})})]})})}function ja({method:e,sessionId:t,nonce:n,email:r,billingName:o,onBuyerIdentityReady:i,billingApiUrl:d,onTokenizedBody:c,onErrorChange:C,onDecline:y,onCancel:b,runBeforeButtonClick:P,onButtonClick:F,isProcessing:A,submitButtonColor:m,submitButtonBorderRadius:S,submitButtonStyle:ye,errorText:U}){let w=lr(),{emitInstrument:ce}=(0,a.useContext)(Fn),q=(0,Ft.useStripe)(),le=(0,Ft.useElements)(),[Y,ge]=(0,a.useState)(!1),qe=(0,a.useRef)(!1),[we,Et]=(0,a.useState)(!1),[Oe,Ee]=(0,a.useState)("loading"),[Re,oe]=(0,a.useState)(""),ee=!(0,u.isValidEmail)(r?.trim()),L=!ee||(0,u.isValidEmail)(Re.trim()),_e=(0,a.useCallback)(async()=>{if(!q||!le||A||qe.current||!we)return;qe.current=!0,ge(!0);let Te=P?await P("card"):{proceed:!0};if(!Te.proceed){qe.current=!1,ge(!1);return}F?.("card");let G=Te.sessionId??t,Ie=Te.nonce??n,Pe=Er(o?.trim()),M=Pn({email:Te.accountPatch?.email?.trim()||r?.trim()||Re.trim(),firstName:Te.accountPatch?.firstName?.trim()||Pe.firstName,lastName:Te.accountPatch?.lastName?.trim()||Pe.lastName}),K=M.email,ke=Pn({...Te.accountPatch,...M});try{if(C?.(null),!(0,u.isValidEmail)(K))throw new Error("A valid email address is required for payment.");await i?.(M);let be=await le.submit();if(be.error){C?.(be.error.message??"Payment failed.");return}let Q=[M.firstName,M.lastName].filter(Boolean).join(" "),Be=await q.createPaymentMethod({elements:le,params:{billing_details:{email:K,...Q?{name:Q}:{}}}});if(Be.error||!Be.paymentMethod){C?.(Be.error?.message??"Failed to create payment method.");return}let st=Be.paymentMethod;if(!G||!K)throw new Error("Missing sessionId or email for payment.");let vt=st.type||e,Ke=await ia(d,ce,G,Ie??"",{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:vt,paymentMethodId:null,intentKind:"payment"});if(Ke.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let te=Ke.clientSecret;if(typeof window<"u")try{localStorage.setItem(nr,JSON.stringify({clientSecret:te,sessionId:G,nonce:Ie,accountPatch:ke,paymentMethodId:st.id,paymentMethodType:st.type??e,gateway:"stripe"}))}catch{}let{error:$,paymentIntent:O}=await q.confirmPayment({clientSecret:te,confirmParams:{return_url:window.location.href,payment_method:st.id},redirect:"if_required"});if($){if(typeof window<"u")try{localStorage.removeItem(nr)}catch{}let fe=$.message??"Payment failed.";C?.(fe),y?.(Kt("card",fe,{code:$.code})),await sa({billingApiUrl:d,sessionId:G,nonce:Ie,request:{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:e,providerDeclineReason:$.code??"provider_declined"}});return}let He=O?.status;if(!bo(He)){if(typeof window<"u")try{localStorage.removeItem(nr)}catch{}let fe=He==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";C?.(fe),y?.(Kt("card",fe,{code:He??"missing_payment_intent"}));return}if(typeof window<"u")try{localStorage.removeItem(nr)}catch{}let Je=typeof O?.payment_method=="string"?O.payment_method:O?.payment_method?.id;c({id:Je??st.id,type:"card",threeDSecureActionResultTokenId:O?.id,gateway:"stripe",paymentMethodType:st.type??e},{accountPatch:ke,paymentMethodCategory:"apm",sessionId:G,nonce:Ie})}catch(be){C?.(be instanceof Error?be.message:"Payment failed. Please try again.")}finally{qe.current=!1,ge(!1)}},[q,le,A,we,P,F,t,n,r,o,Re,i,d,ce,e,c,C,y]);return(0,l.jsxs)("div",{"data-testid":`flopay-stripe-method-form-${e}`,style:{display:"flex",flexDirection:"column"},children:[ee&&(0,l.jsx)("div",{"data-testid":"flopay-apm-identity-fields",style:{display:"flex",flexDirection:"column",gap:"0.75rem",marginBottom:"0.75rem"},children:ee&&(0,l.jsxs)("label",{style:{display:"flex",flexDirection:"column",gap:"0.375rem"},children:["Email address",(0,l.jsx)("input",{type:"email",autoComplete:"email",required:!0,value:Re,onChange:Te=>oe(Te.target.value),style:{minHeight:42,padding:"0 0.75rem",border:"1px solid #d1d5db",borderRadius:6}})]})}),(0,l.jsx)(Ft.PaymentElement,{onReady:()=>Ee("ready"),onLoadError:()=>{Ee("load_error"),Va(jt(w),"stripe","apm")},onChange:Te=>{Et(!!Te.complete)},options:{layout:{type:"accordion",defaultCollapsed:!1,radios:"never"},fields:{billingDetails:{email:"never"}},defaultValues:{billingDetails:{...o?.trim()?{name:o.trim()}:{},...(0,u.isValidEmail)(r?.trim())?{email:r?.trim()}:{}}}}}),(0,l.jsx)("button",{type:"button","data-testid":`flopay-stripe-method-pay-${e}`,onClick:()=>{_e()},disabled:!we||!L||Y||A||Oe!=="ready",style:{width:"100%",marginTop:"0.75rem",padding:"0.875rem",backgroundColor:m,color:"white",border:"none",borderRadius:S,fontSize:"1rem",fontWeight:600,cursor:!we||!L||Y||A||Oe!=="ready"?"not-allowed":"pointer",opacity:!we||!L||Y||A||Oe!=="ready"?.5:1,transition:"opacity 120ms ease-out",...ye??{}},children:Y?"Processing\u2026":`Pay with ${(0,u.getStripeMethodDisplayName)(e)}`}),U&&(0,l.jsx)(Jr,{margin:"0.75rem 0 0",children:U})]})}function ys({sessionId:e,nonce:t,email:n,billingName:r,onBuyerIdentityReady:o,billingApiUrl:i,paymentElementMethods:d,stripeInstance:c,paymentElementBaseOptions:C,onTokenizedBody:y,onErrorChange:b,onButtonClick:P,onDecline:F,runBeforeButtonClick:A,onLoadStateChange:m,isProcessing:S=!1,submitButtonColor:ye="#4A49FF",submitButtonBorderRadius:U=8,submitButtonStyle:w,buttonAppearance:ce,themeId:q,onExpandApm:le,expandedApmMethod:Y}){let{emitInstrument:ge}=(0,a.useContext)(Fn),[qe,we]=(0,a.useState)(null),[Et,Oe]=(0,a.useState)(null),Ee=(0,a.useRef)(!1),{request:Re,collect:oe,finish:ee}=Hr();(0,a.useEffect)(()=>{d.length>0&&c?m?.("ready"):c||m?.("loading")},[d.length,c,m]);let L=(0,a.useCallback)(async M=>{if(!c||Ee.current||S)return;Ee.current=!0,Oe(M);let K=A?await A("card"):{proceed:!0};if(!K.proceed){Ee.current=!1,Oe(null);return}P?.("card");let ke=K.sessionId??e,be=K.nonce??t,Q=Er([K.accountPatch?.firstName,K.accountPatch?.lastName].filter(Boolean).join(" ")||r),Be=Pn({email:K.accountPatch?.email?.trim()||n?.trim(),firstName:K.accountPatch?.firstName?.trim()||Q.firstName,lastName:K.accountPatch?.lastName?.trim()||Q.lastName});if(!(0,u.isValidEmail)(Be.email)){Oe(null);let Ke=await oe((0,u.getStripeMethodDisplayName)(M),Be);if(!Ke){Ee.current=!1;return}Be=Ke,Oe(M)}let st=Be.email,vt=Pn({...K.accountPatch,...Be});try{if(b?.(null),!ke||!(0,u.isValidEmail)(st))throw new Error("Missing sessionId or email for payment.");await o?.(Be);let Ke=await ia(i,ge,ke,be??"",{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:M,paymentMethodId:null,intentKind:"payment"});if(Ke.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let te=Ke.clientSecret;if(typeof window<"u")try{localStorage.setItem(nr,JSON.stringify({clientSecret:te,sessionId:ke,nonce:be,accountPatch:vt,paymentMethodType:M,gateway:"stripe"}))}catch{}let{error:$,paymentIntent:O}=await c.confirmPayment({clientSecret:te,confirmParams:{return_url:window.location.href,payment_method_data:{type:M,billing_details:{name:[Be.firstName,Be.lastName].filter(Boolean).join(" "),...st?{email:st}:{}}}},redirect:"if_required"});if($){if(typeof window<"u")try{localStorage.removeItem(nr)}catch{}let fe=$.message??"Payment failed.";b?.(fe),F?.(Kt("card",fe,{code:$.code})),await sa({billingApiUrl:i,sessionId:ke,nonce:be,request:{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:M,providerDeclineReason:$.code??"provider_declined"}});return}let He=O?.status;if(!bo(He)){if(typeof window<"u")try{localStorage.removeItem(nr)}catch{}let fe=He==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";b?.(fe),F?.(Kt("card",fe,{code:He??"missing_payment_intent"}));return}if(typeof window<"u")try{localStorage.removeItem(nr)}catch{}let Je=typeof O?.payment_method=="string"?O.payment_method:O?.payment_method?.id;y({id:Je??O?.id,type:"card",threeDSecureActionResultTokenId:O?.id,gateway:"stripe",paymentMethodType:M},{accountPatch:vt,paymentMethodCategory:"apm",sessionId:ke,nonce:be})}catch(Ke){b?.(Ke instanceof Error?Ke.message:"Payment failed. Please try again.")}finally{Ee.current=!1,Oe(null)}},[c,S,A,P,e,t,n,oe,i,ge,r,o,y,b,F]),[_e,Te]=(0,a.useState)(null),G=le?Y??null:_e,Ie=(0,a.useCallback)(M=>{Ee.current||S||G&&G!==M||((0,u.needsStripeMethodExplicitConfirm)(M)?le?le(M):Te(M):L(M))},[G,S,L,le]),Pe=(0,a.useMemo)(()=>_e?{...C,paymentMethodTypes:[_e]}:null,[_e,C]);return(0,l.jsx)("div",{"data-testid":"flopay-stripe-payment-element-region",style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:Re?(0,l.jsx)(Yr,{identity:Re.identity,methodLabel:Re.methodLabel,onComplete:ee,onCancel:()=>ee(null)},Re.id):d.map(M=>{let K=Y===M,ke=Et===M,be=Et!==null&&Et!==M||Y!=null&&Y!==M;return(0,l.jsxs)(a.default.Fragment,{children:[(0,l.jsx)(ql,{method:M,themeId:q,submitting:ke,disabled:be,highlighted:K,hasNextStep:(0,u.needsStripeMethodExplicitConfirm)(M),onClick:()=>Ie(M),backgroundColor:ce?.backgroundColor,borderColor:ce?.borderColor,textColor:ce?.textColor,borderRadius:ce?.borderRadius,fontFamily:ce?.fontFamily}),!le&&_e===M&&Pe&&c&&(0,l.jsx)(Ft.Elements,{stripe:c,options:Pe,children:(0,l.jsx)(ja,{method:M,sessionId:e,nonce:t,email:n,billingName:r,onBuyerIdentityReady:o,billingApiUrl:i,onTokenizedBody:y,onErrorChange:b,onDecline:F,onCancel:()=>Te(null),runBeforeButtonClick:A,onButtonClick:P,isProcessing:S,submitButtonColor:ye,submitButtonBorderRadius:U,submitButtonStyle:w})},M)]},M)})})}function $l({sessionId:e,nonce:t,billingApiUrl:n,email:r,userId:o,onComplete:i,onError:d,onDecline:c,onTokenizedBody:C,firstName:y,lastName:b,chv:P,className:F,isProcessing:A,error:m,onErrorChange:S,showPayPal:ye=!0,showStripe:U=!0,enabledPaymentMethods:w,enabledPaymentMethodCountries:ce,showApplePay:q=!0,showGooglePay:le=!0,layout:Y="default",theme:ge,buttonsTheme:qe,buttonsStyles:we,appearance:Et,cardButtonContent:Oe,cardBackButtonContent:Ee,cardTitleContent:Re,showSecurityFooter:oe,onButtonClick:ee,onBeforeButtonClick:L,onBuyerIdentityReady:_e,enableAVS:Te,cardFieldOrder:G,cardPreFormSlot:Ie,avsLayout:Pe="row",country:M,zip:K,addressLine1:ke,addressLine2:be,city:Q,state:Be,onCountryChange:st,onZipChange:vt,avsCheck:Ke,checkoutType:te,checkoutLayout:$,totalAmount:O=0,currency:He="usd",initialCardOpen:Je=!1,directPaypal:fe,isSubscription:lt=!1,session:E,dataAttachmentPending:R=!1,dataAttachmentRequiresIdentity:De=!1,debug:ue=!1}){let ae=lr(),ot=Yo(),Ne=(0,a.useContext)(Yn),{emitInstrument:Xe}=(0,a.useContext)(Fn),Mt=E??Ne.session,_=Mt?.gateways?.paypal?.providerObjectType??fe?.providerObjectType,J=R||Ne.claimPending===!0,ct=De||Ne.claimRequiresIdentity===!0,Ze=J&&!ct,Qt=Hi(),[Ht,B]=(0,a.useState)(!1),[ft,Tt]=(0,a.useState)(null),[dt,Rt]=(0,a.useState)(M??"US"),[dn,rn]=(0,a.useState)(K??""),[un,Dt]=(0,a.useState)(ke??""),[Cn,Yt]=(0,a.useState)(be??""),[gt,Qe]=(0,a.useState)(Q??""),[ht,on]=(0,a.useState)(Be??""),[nt,Jn]=(0,a.useState)(""),[pt,en]=(0,a.useState)({}),Pt=(0,a.useRef)(K??""),Wt=(0,a.useRef)(M??"US"),Sn=(0,a.useRef)(ke??""),pn=(0,a.useRef)(be??""),_n=(0,a.useRef)(Q??""),an=(0,a.useRef)(Be??""),Tn=(0,a.useRef)(""),qt=(0,a.useRef)({});(0,a.useEffect)(()=>{let s=(h,V,Le,W,Fe)=>{if(qt.current[h])return;let Ve=V?.trim();!Ve||Ve===Le.current||(Le.current=Ve,W(Ve),Fe?.(Ve))};s("country",M,Wt,Rt,st),s("zip",K,Pt,rn,vt),s("addressLine1",ke,Sn,Dt),s("addressLine2",be,pn,Yt),s("city",Q,_n,Qe),s("state",Be,an,on)},[M,K,ke,be,Q,Be,st,vt]);let ie=(0,a.useMemo)(()=>(0,u.resolveAVSConfig)(Te),[Te]),mn=ie!==null,On=(0,a.useMemo)(()=>(0,u.isAuthorizationOnlySession)(E),[E]),Xn=!!E?.vault?.html,Cr=!!E?.gateways?.pcivault,mr=!!(E?.gateways?.stripe?.enabledPaymentMethods??w)?.includes("card"),Lt=Xn||mr||Cr,Ye=!!(U&&Lt&&ae&&e),[yr,T]=(0,a.useState)(()=>Y!=="buttons"||Je?e??null:null),[ut,Vt]=(0,a.useState)(0),wn=Y!=="buttons"||Je||!!e&&yr===e,Ce=(0,a.useMemo)(()=>!ae||!Ye||!e||!wn?null:ae.cardCapture({sessionId:e,captureMethod:E?.captureMethod}),[ae,Ye,e,wn,E?.captureMethod]),sn=(0,a.useMemo)(()=>{let s=dt,h=ie?(0,u.isAVSFieldVisible)(ie.postal_code,s):!1;return Ol(s,dn,h)},[ie,dt,dn]),{avsInvalid:wr,invalidAvsFields:Br}=(0,a.useMemo)(()=>{let s={line1:!1,city:!1,state:!1,zip:!1};if(!Ye||!ie)return{avsInvalid:!1,invalidAvsFields:s};let h=dt,V=(Fe,Ve)=>(0,u.isAVSFieldVisible)(Fe,h)&&!Ve.trim(),Le={line1:V(ie.address_line_1,un),city:V(ie.city,gt),state:V(ie.state,ht),zip:sn.empty||sn.malformed};return{avsInvalid:Le.line1||Le.city||Le.state||Le.zip,invalidAvsFields:Le}},[Ye,ie,dt,un,gt,ht,sn]),[yn,fr]=(0,a.useState)(!1),[Zn,zn]=(0,a.useState)(!1),[Nt,Un]=(0,a.useState)(!1),[Qn,fn]=(0,a.useState)({line1:!1,city:!1,state:!1}),tn=(0,a.useRef)(!1),qn=(0,a.useRef)({email:!1,line1:!1,city:!1,state:!1,zip:!1}),$n=(0,a.useRef)(!1),mt=(0,a.useCallback)(s=>{qn.current[s]=!0,$n.current=!0},[]),gn=(0,a.useCallback)(s=>!tn.current&&qn.current[s],[]),hn=(0,a.useCallback)(s=>{gn(s)&&fn(h=>h[s]?h:{...h,[s]:!0})},[gn]),[jn,xn]=(0,a.useState)(()=>Ua(E?.vault)),[xe,nn]=(0,a.useState)(Je&&Lt?"card":"buttons"),[Ot,gr]=(0,a.useState)(null),Vn=xe==="expanding"||xe==="card",hr=E?.gateways?.stripe?"stripe":void 0,kn=(0,a.useCallback)(()=>{Xe?.({class:"card_surface",provider:hr})},[hr,Xe]),Mn=(0,a.useRef)(null),zt=(0,a.useCallback)(s=>{Mn.current&&clearTimeout(Mn.current),Mn.current=setTimeout(()=>{Mn.current=null,s()},xr)},[]);(0,a.useEffect)(()=>()=>{Mn.current&&clearTimeout(Mn.current)},[]);let N=(0,a.useCallback)(()=>{kn(),T(e??null),Vt(s=>s+1),nn("expanding"),zt(()=>nn("card"))},[zt,kn,e]),j=(0,a.useCallback)(()=>{nn("collapsing"),zt(()=>nn("buttons"))},[zt]),ne=(0,a.useCallback)(s=>{gr(s),nn("apm-expanding"),zt(()=>nn("apm-form"))},[zt]),re=(0,a.useCallback)(()=>{nn("apm-collapsing"),zt(()=>{nn("buttons"),gr(null)})},[zt]);(0,a.useEffect)(()=>{Y==="buttons"&&Je&&Lt&&(T(e??null),nn("card"))},[Y,Je,Lt,e]);let[Me,z]=(0,a.useState)(null),X=(0,a.useRef)(!1),f=(0,a.useRef)(null),H=(0,a.useRef)("idle"),[Z,bt]=(0,a.useState)(null),Ct=(0,a.useRef)(Z);(0,a.useEffect)(()=>{Ct.current=Z},[Z]);let de=n||Qt,Ae=(0,a.useRef)(null),Gt=(0,a.useMemo)(()=>{if(_e||Ne.claimBuyerIdentity||E?.buyerIdentified!==!1||!e||!t)return;let s=`${de}|${e}|${t}`;Ae.current?.key!==s&&(Ae.current={key:s,claim:Vr(new ur.PaymentAPI(de,{telemetry:!1}),e,t,{...o?{userId:o}:{},...y?{firstName:y}:{},...b?{lastName:b}:{}})});let h=Ae.current.claim;return async V=>{await h(V)}},[_e,Ne.claimBuyerIdentity,E?.buyerIdentified,e,t,de,o,y,b]),at=_e??Ne.claimBuyerIdentity??Gt,g=m??ft,p=(0,a.useMemo)(()=>(0,u.resolveTheme)(ge),[ge]),v=(0,a.useMemo)(()=>{let s=p?.buttonsLayout??(0,u.resolveButtonsLayoutTheme)(qe);return we?{...s,...we,cardButton:{...s.cardButton,...we.cardButton},cardFormContainer:{...s.cardFormContainer,...we.cardFormContainer},backButton:{...s.backButton,...we.backButton},backButtonIcon:{...s.backButtonIcon,...we.backButtonIcon},submitButton:{...s.submitButton,...we.submitButton},title:{...s.title,...we.title}}:s},[p,qe,we]),Se=Et??p?.appearance,pe=(0,a.useMemo)(()=>ra({appearance:Se,buttonsStyles:v,layout:Y}),[Se,v,Y]),We=Ne.inlineSessionPatchProcessing??!1,et=(A??Ht)||We,se=de.replace(/\/+$/,""),D=(0,a.useMemo)(()=>Aa({userId:o,email:r,firstName:y,lastName:b,country:M,zip:K},pt),[o,r,y,b,M,K,pt]),me=[D.firstName,D.lastName].filter(s=>!!s?.trim()).join(" "),Ge=!(0,u.isValidEmail)(D.email?.trim()),$e=(0,a.useRef)(null);Ye&&$e.current===null&&($e.current=Ge);let St=Ye&&($e.current??Ge),je=(0,a.useMemo)(()=>zl(nt,St),[nt,St]),$t=je.empty||je.malformed,In=(0,a.useMemo)(()=>ae?ae.getRawProvider():null,[ae]),Fr=(0,a.useMemo)(()=>ot?ot.getRawProvider():null,[ot]),no=O||100,Dr=He.toLowerCase(),fa=(0,a.useMemo)(()=>Se?(0,ur.toStripeAppearance)(Se):null,[Se]),Lr=fa,ri=(0,a.useMemo)(()=>{let s=fa??{},h=s.rules??{};return{...s,rules:{...h,".AccordionItem":{padding:"10px 14px",boxShadow:"none",...h[".AccordionItem"]??{}},".AccordionItemContents":{padding:"6px 14px 12px",boxShadow:"none",...h[".AccordionItemContents"]??{}}}}},[fa]),oi=(0,a.useMemo)(()=>({...qi(O,E?.captureMethod),currency:Dr,...Lr?{appearance:Lr}:null}),[O,Dr,E?.captureMethod,Lr]),ai=(0,a.useMemo)(()=>({mode:"payment",amount:no,currency:Dr,captureMethod:"manual",setupFutureUsage:"off_session",...Lr?{appearance:Lr}:null}),[no,Dr,Lr]),he=(0,a.useCallback)(s=>{Tt(s),S?.(s)},[S]),ga=(0,a.useRef)(""),[ii,As]=(0,a.useState)(!1),ha=(0,a.useCallback)(()=>{As(!0)},[]);(0,a.useEffect)(()=>{if(!Ye||!St||!at||!ii||$t||ga.current)return;let s=Pn({email:(0,u.isValidEmail)(D.email?.trim())?D.email?.trim():Tn.current.trim(),firstName:D.firstName?.trim(),lastName:D.lastName?.trim()});ga.current=JSON.stringify(s),en(h=>({...h,...s})),Promise.resolve(at(s)).catch(h=>{ga.current="",he(h instanceof Error?h.message:"Failed to attach buyer details.")})},[Ye,St,at,ii,$t,D.email,D.firstName,D.lastName,he]),(0,a.useEffect)(()=>{!Ye||!Ce||Ce.setCardFieldOrder?.(G??null,ie==null&&!St)},[Ye,Ce,G,ie,St]),(0,a.useEffect)(()=>{(xe==="expanding"||xe==="collapsing"||xe==="apm-expanding"||xe==="apm-collapsing")&&he(null)},[xe,he]);let Kn=(0,a.useCallback)((s,h,V)=>{c?.(Kt(s,h,V))},[c]),Nr=(0,a.useCallback)((s,h,V)=>{let Le=V?.popupBlocked??vr(h),W=Ll(s,Le),Fe=_r(V?.code)??sr(h)??"external_payment_method_failed",Ve=new u.FloPayError(W,"api_error",{code:"external_payment_method_failed",param:s});z(null),Y==="buttons"&&(nn("buttons"),gr(null)),he(W),d?.(Ve),console.error("[FloPay] External payment method failed:",{method:s,code:Fe,popupBlocked:Le})},[Y,d,he]);(0,a.useEffect)(()=>{if(!Ye||!e){xn(null);return}let s=Ua(E?.vault);if(s){xn(s);return}if(!wn){xn(null);return}xn(null);let h=!0;return new ur.PaymentAPI(se).getVaultCapture(e,t).then(V=>{if(!h)return;let Le=Ua(V);Le?xn(Le):he("Failed to load the secure card form.")}).catch(V=>{h&&he(V instanceof Error?V.message:"Failed to load the secure card form.")}),()=>{h=!1}},[Ye,wn,ut,e,E?.vault,se,t,he]);let er=(0,a.useRef)({onComplete:i,onError:d,updateError:he,emitDecline:Kn,resolvedAccount:D,avsConfig:ie,avsCheckProp:Ke,sessionId:e,nonce:t,baseUrl:se,captureMethod:E?.captureMethod,paymentId:E?.paymentId,authorizationExpiresAt:E?.authorizationExpiresAt});er.current={onComplete:i,onError:d,updateError:he,emitDecline:Kn,resolvedAccount:D,avsConfig:ie,avsCheckProp:Ke,sessionId:e,nonce:t,baseUrl:se,captureMethod:E?.captureMethod,paymentId:E?.paymentId,authorizationExpiresAt:E?.authorizationExpiresAt};let ba=(0,a.useRef)(!1),si=(0,a.useCallback)(()=>{let{resolvedAccount:s,avsConfig:h,avsCheckProp:V}=er.current,Le=s.email?.trim(),W=(0,u.isValidEmail)(Le)?Le:Tn.current.trim();if(!(0,u.isValidEmail)(W))return null;let Fe=s.firstName?.trim(),Ve=s.lastName?.trim(),yt=Wt.current||s.country||"US",Jt=h?(0,u.isAVSFieldVisible)(h.state,yt):!1,wt=h?(0,u.isAVSFieldVisible)(h.address_line_1,yt):!1,kt=h?(0,u.isAVSFieldVisible)(h.postal_code,yt):!1,it=h?(0,u.isAVSFieldVisible)(h.city,yt):!1,ln=h?(0,u.isAVSFieldVisible)(h.address_line_2,yt):!1,tt=wt&&!Jt&&kt?(0,u.getStateFromPostalCode)(yt,(Pt.current??"").trim()):null,cn=Jt?an.current:tt;return{accountData:{userId:s.userId??"",email:W,...Fe?{firstName:Fe}:{},...Ve?{lastName:Ve}:{},...kt&&Pt.current?{zip:Pt.current}:{},...it&&_n.current?{city:_n.current}:{},...cn?{state:cn}:{},...wt&&Sn.current?{addressLine1:Sn.current}:{},...ln&&pn.current?{addressLine2:pn.current}:{},country:yt},...V!==void 0?{avsCheck:V}:{},...h?{avsConfig:{country:(0,u.isAVSFieldVisible)(h.country,yt),postal_code:kt,address_line_1:wt,address_line_2:ln,city:it,state:Jt}}:{}}},[]),li=(0,a.useRef)(J);li.current=J,(0,a.useEffect)(()=>{J||g!==ls||er.current.updateError(null)},[J,g]),(0,a.useEffect)(()=>{!Ye||!Ce||Ce.setSubmitGate?.(wr||J||$t)},[Ye,Ce,wr,J,$t]),(0,a.useEffect)(()=>{if(!Ye||!Ce)return;ba.current=!1;let s=!1,h=Ce.on("submitting",()=>{fr(!0),f.current&&clearTimeout(f.current),H.current="validation-window",f.current=setTimeout(()=>{f.current=null,H.current==="validation-window"&&(H.current="processing")},Tl),z("processing");let{baseUrl:Ve,sessionId:yt,nonce:Jt,updateError:wt,onError:kt}=er.current;if(!yt||!Jt)return;let it=si();if(!it){wt("Enter a valid email address."),H.current="idle",z(null);return}new ur.PaymentAPI(Ve).patchAccountSnapshot(yt,Jt,it,{telemetryMode:"best_effort"}).catch(ln=>{if(!xl(ln))return;let tt=ln instanceof Error?ln.message:"Please check your billing address and try again.";wt(tt),H.current="idle",z(null),kt?.(ln instanceof u.FloPayError?ln:new u.FloPayError(tt,"api_error"))})}),V=Ce.on("complete",async Ve=>{if(Xr(Ve.sessionId??er.current.sessionId),H.current="terminal",z("success"),await new Promise(wt=>setTimeout(wt,1200)),ba.current)return;ba.current=!0;let yt=er.current,Jt=(0,u.isAuthorizationOnlySession)(yt)||Ve.outcome==="authorized";er.current.onComplete?.(Jt?{status:"authorized",paymentIntentId:Ve.intentId,paymentId:Ve.paymentId??yt.paymentId,sessionId:Ve.sessionId??yt.sessionId,authorizationExpiresAt:Ve.authorizationExpiresAt??yt.authorizationExpiresAt,checkoutMethod:"card"}:{status:"succeeded",paymentIntentId:Ve.intentId,checkoutMethod:"card"})}),Le=Ce.on("decline",async Ve=>{let{updateError:yt,emitDecline:Jt}=er.current,wt=Ve.message??"Your payment was declined. Please try another card or contact your bank.";H.current="terminal",yt(wt),z("error");let kt=Ve.failureOutcome??(0,u.normalizeCheckoutFailureOutcome)(Ve.declineReason)??"authorization_declined";Jt("card",wt,{code:kt,declineCode:kt}),await new Promise(it=>setTimeout(it,1500)),!s&&(H.current="idle",z(null))}),W=Ce.on("error",async Ve=>{let{updateError:yt,onError:Jt}=er.current,wt=Ve.message??"There was a problem processing your payment. Please try again.";H.current="terminal",yt(wt),z("error"),Jt?.(new u.FloPayError(wt,"api_error",{code:Ve.failureOutcome??"capture_failed"})),await new Promise(kt=>setTimeout(kt,1500)),!s&&(H.current="idle",z(null))}),Fe=Ce.on("blocked",()=>{if(!li.current){fr(!0);return}ha(),er.current.updateError(ls)});return()=>{s=!0,f.current&&(clearTimeout(f.current),f.current=null),H.current="idle",h(),V(),Le(),W(),Fe()}},[Ye,Ce,ha,si]);let tr=!!fe?.clientId,ro=Array.isArray(w),Fo=ro&&w.length>0,Bs=ro&&w.includes("paypal"),{expressMethods:Do,paymentElementMethods:oo}=(0,a.useMemo)(()=>(0,u.partitionStripeMethods)(w,{excludePaypal:tr}),[w,tr]),ci=tr||!!ot,Fs=(0,a.useMemo)(()=>ci?Do.filter(s=>s!=="paypal"):Do,[Do,ci]),Ds=(0,a.useMemo)(()=>{let s=[];return q&&s.push("apple_pay"),le&&s.push("google_pay"),s},[q,le]),Or=ro?Fs:Ds,Ls=U&&Or.length>0,va=mn?dt:M,Lo=(0,a.useMemo)(()=>{let s=va?.trim().toUpperCase();return s?ce?oo.filter(h=>{let V=ce[h];return!V||V.length===0||V.includes(s)}):(0,u.filterStripeMethodsByCountry)(oo,va):oo},[oo,va,ce]),Pa=(0,a.useMemo)(()=>({mode:"payment",amount:no,currency:Dr,paymentMethodCreation:"manual",appearance:ri}),[no,Dr,ri]),[di,ui]=(0,a.useState)("loading"),[pi,mi]=(0,a.useState)("loading"),[yi,fi]=(0,a.useState)("loading"),[Ns,Ca]=(0,a.useState)(!1),[gi,Sa]=(0,a.useState)("loading"),[No,Os]=(0,a.useState)();(0,a.useEffect)(()=>{Os(os())},[]);let hi=ye&&(tr||(ro?Bs:No===!1)),bi=U&&Ls,ao=!Ze&&hi&&tr,vi=gi==="retrying"||gi==="exhausted",io=!Ze&&hi&&!!Fr&&(!tr||vi),so=!Ze&&bi&&!!In,lo=!Ze&&U&&Fo&&Lo.length>0&&!!In,zs=ao&&!vi?Ns:io&&us(di),Us=so&&us(pi),qs=lo&&yi!=="load_error",Pi=s=>s==="loading"||s==="ready",Ci=ao||io&&Pi(di)||so&&Pi(pi)||lo&&yi!=="load_error",Oo=(0,a.useRef)(!1);(0,a.useEffect)(()=>{if(!Oo.current){if(!U&&!ye){Oo.current=!0;let s=new u.FloPayError("FloPay: both `showStripe` and `showPayPal` are false \u2014 nothing to render.","validation_error");d?.(s),he(s.message)}else if(!U&&ye&&!tr&&!Fr){Oo.current=!0;let s=new u.FloPayError("FloPay: `showStripe` is false and no PayPal gateway is configured for this session \u2014 nothing to render.","validation_error");d?.(s),he(s.message)}else if(No!==void 0&&!Ze&&!Lt&&!Ci){Oo.current=!0;let s=new u.FloPayError("FloPay: this checkout session has no vault card capability and no usable supported non-card payment methods. Upgrade the billing backend integration.","api_error",{code:"UnsupportedBackendVaultCapability"});d?.(s),he(s.message)}}},[U,ye,tr,Fr,No,Ze,Lt,Ci,d,he]);let Si=(0,a.useRef)(!1);(0,a.useEffect)(()=>{if(Si.current||!Fo)return;let s=[];q!==!0&&s.push("showApplePay"),le!==!0&&s.push("showGooglePay"),s.length!==0&&(Si.current=!0,console.warn(`[FloPay] ${s.join(" / ")} ${s.length===1?"is":"are"} deprecated: the Apple Pay / Google Pay surface is now driven by \`gateways.stripe.enabledPaymentMethods\` on the session response. Remove the legacy prop(s) to silence this warning.`))},[Fo,q,le]);let wi=(0,a.useCallback)((s,h)=>Ne.applyInlineSessionPatch?Ne.applyInlineSessionPatch(s).then(V=>({error:null,sessionId:V.sessionId||e,nonce:V.session?.clientSecret||t})).catch(V=>{let Le=ds(h,V);return he(Le.message),d?.(Le),{error:Le,sessionId:e,nonce:t}}):Promise.resolve({error:null,sessionId:e,nonce:t}),[Ne.applyInlineSessionPatch,t,d,e,he]),Hn=(0,a.useCallback)(async s=>{if(!L)return{proceed:!0};try{let h=await L({method:s,sessionId:e||void 0,createSession:Ne.inlineSessionDraft});if(h===!1)return{proceed:!1};if(h&&typeof h=="object"){h.account&&en(Le=>({...Le??{},...h.account}));let V=await wi(h,s);return V.error?{proceed:!1,accountPatch:h.account}:{proceed:!0,accountPatch:h.account,sessionId:V.sessionId,nonce:V.nonce}}return{proceed:!0}}catch(h){let V=ds(s,h);return he(V.message),d?.(V),{proceed:!1}}},[wi,Ne.inlineSessionDraft,L,d,e,he]),ki=(0,a.useCallback)(async(s,h)=>{if(X.current)return;X.current=!0,B(!0),z("processing"),he(null);let V=h?.sessionId??e,Le=h?.nonce??t,W=Aa(D,h?.accountPatch),Fe=h?.completionPaymentMethodId??vo(s),Ve=s.originalPaymentMethodId?{...s,originalPaymentMethodId:void 0}:s,yt=s.gateway==="stripe"?"stripe":s.gateway==="paypal"||s.isPaypal?"paypal":void 0,Jt=()=>{Xe?.({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:"process_payment",provider:yt})};try{let kt=await new ur.PaymentAPI(se).processPayment(W.userId??"",{sessionId:V,nonce:Le,paymentMethodCategory:h?.paymentMethodCategory??Fl(s),tokenizedData:Ve,accountData:{...h?.accountPatch,userId:W.userId??"",email:W.email??"",...W.firstName?{firstName:W.firstName}:{},...W.lastName?{lastName:W.lastName}:{},...ie?(()=>{let tt=Wt.current,cn=(0,u.isAVSFieldVisible)(ie.state,tt),Bn=(0,u.isAVSFieldVisible)(ie.address_line_1,tt),Xt=(0,u.isAVSFieldVisible)(ie.postal_code,tt),fo=Bn&&!cn&&Xt?(0,u.getStateFromPostalCode)(tt,(Pt.current??"").trim()):null,go=cn?an.current:fo;return{country:tt,...Xt&&Pt.current?{zip:Pt.current}:{},...(0,u.isAVSFieldVisible)(ie.city,tt)&&_n.current?{city:_n.current}:{},...go?{state:go}:{},...Bn&&Sn.current?{addressLine1:Sn.current}:{},...(0,u.isAVSFieldVisible)(ie.address_line_2,tt)&&pn.current?{addressLine2:pn.current}:{}}})():{}},chv:P,avsCheck:Ke??!1,checkoutType:te,checkoutLayout:$,avsConfig:ie?{country:(0,u.isAVSFieldVisible)(ie.country,Wt.current),postal_code:(0,u.isAVSFieldVisible)(ie.postal_code,Wt.current),address_line_1:(0,u.isAVSFieldVisible)(ie.address_line_1,Wt.current),address_line_2:(0,u.isAVSFieldVisible)(ie.address_line_2,Wt.current),city:(0,u.isAVSFieldVisible)(ie.city,Wt.current),state:(0,u.isAVSFieldVisible)(ie.state,Wt.current)}:void 0});if(kt.ok){let tt=kt.status===204?null:await kt.json().catch(()=>null),cn=(0,u.isAuthorizationOnlySession)(E)||tt?.status==="authorized";Xr(V),z("success"),bt(null),await new Promise(Bn=>setTimeout(Bn,1200)),i?.(cn?{status:"authorized",...typeof tt?.paymentId=="string"?{paymentId:tt.paymentId}:E?.paymentId?{paymentId:E.paymentId}:{},sessionId:typeof tt?.sessionId=="string"?tt.sessionId:V,...typeof tt?.authorizationExpiresAt=="string"?{authorizationExpiresAt:tt.authorizationExpiresAt}:E?.authorizationExpiresAt?{authorizationExpiresAt:E.authorizationExpiresAt}:{},paymentIntentId:s.threeDSecureActionResultTokenId,paymentMethodId:Fe,checkoutMethod:s.isPaypal?"paypal":"card"}:{status:"succeeded",paymentIntentId:s.threeDSecureActionResultTokenId,paymentMethodId:Fe,checkoutMethod:s.isPaypal?"paypal":"card"});return}let it=await kt.json().catch(()=>null);if(it?.type==="paypal_redirect_required"){let tt=it.threeDSecureToken,cn=it.paymentMethodId||s.id||"";if(!ae||!tt){z("error"),he("PayPal authorization required but no token provided.");return}try{let Bn=ot?.getRawProvider();if(!Bn){he("PayPal is not available.");return}let Xt={return_url:window.location.href};cn&&(Xt.payment_method=cn);let{error:fo}=await Bn.confirmPayment({clientSecret:tt,confirmParams:Xt,redirect:"if_required"});if(fo){z("error");let go=fo.message??"PayPal payment failed.";he(go),Kn("paypal",go,{code:fo.code})}}catch(Bn){z("error"),he(Bn instanceof Error?Bn.message:"PayPal authorization failed.")}return}if(it?.type==="paypal_direct_required"){let tt=it.orderId;if(!tt){z("error"),he("PayPal retry required but no order id provided.");return}let cn=Ct.current?.attempts??0;if(cn>=2){z("error"),he("PayPal payment could not be completed after multiple attempts."),Kn("paypal","paypal_direct_required retry limit exceeded");return}Ca(!1),Sa("loading"),bt({orderId:tt,attempts:cn+1}),z(null);return}(0,u.classifyPaymentRejection)(kt.status,it)||Jt(),z("error");let ln=it?.message??"Payment failed. Please try again.";he(ln),Kn(s.isPaypal?"paypal":"card",ln,{code:it?.code??it?.gatewayErrorCode,declineCode:it?.declineCode??it?.gatewayDeclineReason}),await new Promise(tt=>setTimeout(tt,1500))}catch(wt){gs(wt)||Jt(),z("error"),he(wt instanceof Error?wt.message:"An unexpected error occurred"),await new Promise(kt=>setTimeout(kt,1500))}finally{B(!1),z(null),X.current=!1}},[se,e,t,D,ie,Ke,te,$,P,ae,ot,E,i,he,Kn,Xe]),bn=(0,a.useCallback)((s,h)=>{C?C(s):ki(s,h)},[C,ki]),co=`${fs}:${e}`;(0,a.useEffect)(()=>{if(typeof window>"u")return;let s=localStorage.getItem(co);if(!s)return;let h;try{h=JSON.parse(s)}catch{localStorage.removeItem(co);return}if(!h||typeof h.createdAt!="number"||Date.now()-h.createdAt<0||Date.now()-h.createdAt>El||typeof h.paymentMethodId!="string"||typeof h.providerIntentId!="string"||typeof h.paymentMethodType!="string"||h.sessionId!==e||!t||h.nonce!==t||!Or.includes(h.paymentMethodType)){localStorage.removeItem(co);return}localStorage.removeItem(co),bn({id:h.paymentMethodId,type:"card",threeDSecureActionResultTokenId:h.providerIntentId,gateway:"stripe",paymentMethodType:h.paymentMethodType},{...h.accountPatch?{accountPatch:h.accountPatch}:{},paymentMethodCategory:"wallet",sessionId:e,nonce:t})},[bn,t,e,co,Or]);let Ii=(0,a.useRef)(!1);(0,a.useEffect)(()=>{if(typeof window>"u"||Ii.current)return;let s=new URLSearchParams(window.location.search),h=s.get("payment_intent"),V=s.get("payment_intent_client_secret"),Le=s.get("redirect_status");if(!h||!V)return;let W=kt=>{let it=localStorage.getItem(kt);if(!it)return null;try{return JSON.parse(it)}catch{return localStorage.removeItem(kt),null}},Fe=W(nr)??W(ss),Ve;if(Fe?.clientSecret){if(Fe.clientSecret!==V)return;Ve={...Fe.accountPatch?{accountPatch:Fe.accountPatch}:{},...Fe.sessionId?{sessionId:Fe.sessionId}:{},...Fe.nonce?{nonce:Fe.nonce}:{}}}else if(Fe?.sessionId&&Fe.sessionId!==e)return;Ii.current=!0,localStorage.removeItem(nr),localStorage.removeItem(ss);let yt=new URL(window.location.href);yt.searchParams.delete("payment_intent"),yt.searchParams.delete("payment_intent_client_secret"),yt.searchParams.delete("redirect_status"),window.history.replaceState({},"",yt.toString());let Jt=Fe?.paymentMethodType??Fe?.tokenType??"card",wt="card";(async()=>{let kt=ae?.getRawProvider();if(!kt){let Xt="Payment is not available \u2014 please refresh and try again.";he(Xt),Kn(wt,Xt);return}if(Le==="failed"){let Xt="Payment was declined. Please try again.";he(Xt),Kn(wt,Xt);return}let{paymentIntent:it,error:ln}=await kt.retrievePaymentIntent(V);if(ln){let Xt=ln.message??"Failed to retrieve payment status.";he(Xt),Kn(wt,Xt,{code:ln.code});return}let tt=it?.status,cn=bo(tt);if(!it||!cn){let Xt=tt==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";he(Xt),Kn(wt,Xt,{code:tt??"missing_payment_intent"});return}let Bn=typeof it.payment_method=="string"?it.payment_method:it.payment_method?.id;bn({id:Bn??Fe?.paymentMethodId??Fe?.tokenId??it.id,type:"card",threeDSecureActionResultTokenId:it.id,gateway:Fe?.gateway??"stripe",paymentMethodType:Jt},Ve)})()},[e,bn,ae,he,Kn]);let wa=(0,a.useCallback)(s=>{s.preventDefault()},[]);if(!(ae!==null))return(0,l.jsx)("div",{"data-testid":"flopay-loading","aria-busy":"true",children:"Loading payment form..."});let uo=Y==="buttons",vn=Se?.variables,$s=new Set(["#FFFFFF","#ffffff","#fff","#FFF","white"]),ka=vn?.colorBackground,js=ka&&!$s.has(ka)?ka:void 0,po=v.cardInputBorder??(uo?"#e5e7eb":"#A4A4FF"),Ei=vn?.colorDanger??"#dc2626",xt=s=>Br[s]&&(Qn[s]||yn),zo=$t&&(Nt||yn),An=s=>s?Ei:po,Uo=(sn.malformed||sn.empty)&&(Zn||yn),Vs=An(Uo),Ia=v.cardFormContainer?.backgroundColor??js??(uo?"white":"#EDEDFF"),zr=v.cardInputBackground??vn?.colorBackground??"white",Ea=qr(Ee),Ri=qr(Re),Ur=v.nameInput,_i=v.cardInputFontSize??Ul(Ur?.fontSize)??vn?.fontSizeBase??"16px",Ti=typeof Ur?.fontFamily=="string"?Ur.fontFamily:vn?.fontFamily??"Poppins, sans-serif",xi=za(Ur?.fontWeight)??400,Ks=v.cardInputColor??(typeof Ur?.color=="string"?Ur.color:void 0)??vn?.colorText??"#262833",Hs=v.cardInputPlaceholderColor??"#9ca3af",At=vn?.borderRadius??"8px",kr=vn?.borderRadius??v.cardButton?.borderRadius??At,Ir=vn?.colorPrimary??"#4A49FF",Ys=vn?.colorPrimaryHover??to(Ir,.12),Ra=vn?.colorText??"#262833",_a={fontSize:_i,fontFamily:Ti,fontWeight:xi,color:Ks,WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},mo={marginTop:"0.375rem",..._a,fontSize:"0.75rem",lineHeight:1.4,color:Ei},Ws={"--flopay-input-placeholder-color":Hs,"--flopay-input-font-size":_i,"--flopay-input-font-family":Ti,"--flopay-input-font-weight":String(xi)},yo=v.cardFormContainer??{},Ta=yo.padding??(uo?"0":"1rem"),xa=yo.borderRadius??At,Gs=Ce&&jn?(0,l.jsx)(eo,{capture:Ce,html:jn.html,messageToken:jn.messageToken,expectedOrigin:jn.expectedOrigin,theme:pe,onReady:()=>{if(!St&&!ie||typeof document>"u")return;let s=()=>{let V=(document.querySelector('[data-testid="flopay-vault-identity-fields"]')??document.querySelector('[data-testid="flopay-avs-fields"]'))?.querySelector("input:not([disabled]), select:not([disabled])");if(V){tn.current=!0;try{V.focus()}finally{tn.current=!1}}};$n.current||s()},onError:s=>he(s),onValidation:s=>{let h=H.current;(h==="idle"||h==="validation-window")&&(he(s),s&&H.current==="validation-window"&&(f.current&&(clearTimeout(f.current),f.current=null),H.current="idle",z(null)))}}):(0,l.jsx)("div",{"data-testid":"flopay-vault-loading",style:{minHeight:120,display:"flex",alignItems:"center",justifyContent:"center",color:"#6b7280",fontSize:14},children:"Loading secure card form\u2026"}),Mi=(0,l.jsxs)("div",{onFocusCapture:s=>{["INPUT","SELECT","TEXTAREA","IFRAME"].includes(s.target.tagName)&&kn()},style:{backgroundColor:Ia,borderRadius:xa,...yo,padding:Ta,...Ws,display:"flex",flexDirection:"column"},children:[(0,l.jsx)("style",{children:`
|
|
31
31
|
.flopay-shared-input::placeholder {
|
|
32
32
|
color: var(--flopay-input-placeholder-color);
|
|
33
33
|
opacity: 1;
|
|
@@ -35,13 +35,13 @@ ${Zt.join(`
|
|
|
35
35
|
font-family: var(--flopay-input-font-family);
|
|
36
36
|
font-weight: var(--flopay-input-font-weight);
|
|
37
37
|
}
|
|
38
|
-
`}),uo&&Vn&&(0,l.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem",order:Ye?-2:0},children:[(0,l.jsxs)("button",{type:"button",onClick:j,style:{display:"inline-flex",alignItems:"center",gap:
|
|
38
|
+
`}),uo&&Vn&&(0,l.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem",order:Ye?-2:0},children:[(0,l.jsxs)("button",{type:"button",onClick:j,style:{display:"inline-flex",alignItems:"center",gap:Ea?0:"0.5rem",background:"none",border:"none",cursor:"pointer",color:"#4b5563",fontSize:v.backButtonFontSize??"0.85rem",fontWeight:500,padding:0,transition:"color 0.15s",flexShrink:0,...v.backButton},"aria-label":"Back to payment methods",children:[(0,l.jsx)("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",transition:"background-color 0.15s",...v.backButtonIcon},children:(0,l.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,l.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,l.jsx)(jr,{content:Ee})]}),Ri?(0,l.jsx)("div",{style:{flex:1}}):(0,l.jsx)("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:v.titleFontSize??"1.05rem",color:"#262833",paddingRight:80,...v.title},children:(0,l.jsx)(ho,{content:Re})})]}),!uo&&!Ri&&(0,l.jsx)("div",{style:{textAlign:"center",fontWeight:600,fontSize:"1.1rem",padding:"0.5rem 0",color:Ra,order:Ye?-3:0,...v.title},children:(0,l.jsx)(ho,{content:Re})}),Ye&&Ie&&(0,l.jsx)("div",{style:{order:-2,width:"100%"},children:Ie}),Ye&&St&&(0,l.jsxs)("div",{"data-testid":"flopay-vault-identity-fields",style:{order:-1,marginTop:"0.5rem"},children:[(0,l.jsx)("div",{style:{backgroundColor:zr,border:`1px solid ${An(zo)}`,borderRadius:At,padding:"10px"},children:(0,l.jsx)("input",{className:"flopay-shared-input",id:"flopay-buyer-email",name:"email",type:"email",autoComplete:"email","aria-label":"Email address",placeholder:"Email address",value:nt,onChange:s=>{mt("email"),Tn.current=s.target.value,Jn(s.target.value)},onPointerDown:()=>mt("email"),onKeyDown:()=>mt("email"),onBlur:()=>{gn("email")&&Un(!0),$t||ha()},disabled:et,required:!0,"aria-invalid":zo||void 0,"aria-describedby":zo?"flopay-buyer-email-error":void 0,"data-testid":"flopay-email",style:{width:"100%",border:"none",outline:"none",background:"transparent",..._a}})}),zo&&(0,l.jsx)("div",{id:"flopay-buyer-email-error",role:"alert","data-testid":"flopay-email-error",style:mo,children:je.empty?"Email address is required":"Enter a valid email address"})]}),ie&&(0,l.jsx)("div",{style:{order:Ye?-1:0},"data-testid":"flopay-avs-fields",children:(()=>{let s=dt,h=(W=!1)=>({backgroundColor:zr,border:`1px solid ${An(W)}`,borderRadius:At,marginTop:"0.5rem",padding:"10px"}),V=()=>({width:"100%",border:"none",outline:"none",background:"transparent",..._a}),Le=(0,u.getStateOptions)(s);return(0,l.jsxs)(l.Fragment,{children:[(0,u.isAVSFieldVisible)(ie.address_line_1,s)&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("div",{style:h(xt("line1")),children:(0,l.jsx)("input",{className:"flopay-shared-input",id:"flopay-billing-address-line1",name:"billing-address-line1",placeholder:"Street Address (e.g. 123 Main St)",autoComplete:"billing address-line1",value:un,onChange:W=>{mt("line1"),qt.current.addressLine1=!0,Sn.current=W.target.value,Dt(W.target.value)},onPointerDown:()=>mt("line1"),onKeyDown:()=>mt("line1"),onBlur:()=>hn("line1"),disabled:et,required:!0,"aria-invalid":xt("line1")||void 0,"aria-describedby":xt("line1")?"flopay-billing-address-line1-error":void 0,"data-testid":"flopay-address-line1",style:V()})}),xt("line1")&&(0,l.jsx)("div",{id:"flopay-billing-address-line1-error",role:"alert","data-testid":"flopay-address-line1-error",style:mo,children:"Street address is required"})]}),(0,u.isAVSFieldVisible)(ie.address_line_2,s)&&(0,l.jsx)("div",{style:h(),children:(0,l.jsx)("input",{className:"flopay-shared-input",id:"flopay-billing-address-line2",name:"billing-address-line2",placeholder:"Apt, Suite, Unit (optional)",autoComplete:"billing address-line2",value:Cn,onChange:W=>{qt.current.addressLine2=!0,pn.current=W.target.value,Yt(W.target.value)},disabled:et,"data-testid":"flopay-address-line2",style:V()})}),((0,u.isAVSFieldVisible)(ie.city,s)||(0,u.isAVSFieldVisible)(ie.state,s))&&(0,l.jsxs)("div",{style:{display:"flex",gap:"0",marginTop:"0.5rem"},children:[(0,u.isAVSFieldVisible)(ie.city,s)&&(0,l.jsx)("div",{style:{flex:1,backgroundColor:zr,borderTop:`1px solid ${An(xt("city"))}`,borderRight:`1px solid ${An(xt("city"))}`,borderBottom:`1px solid ${An(xt("city"))}`,borderLeft:`1px solid ${An(xt("city"))}`,padding:"10px",borderTopLeftRadius:At,borderBottomLeftRadius:At,...(0,u.isAVSFieldVisible)(ie.state,s)?{borderRight:"none",borderTopRightRadius:0,borderBottomRightRadius:0}:{borderRadius:At}},children:(0,l.jsx)("input",{className:"flopay-shared-input",id:"flopay-billing-city",name:"billing-city",placeholder:"City",autoComplete:"billing address-level2",value:gt,onChange:W=>{mt("city"),qt.current.city=!0,_n.current=W.target.value,Qe(W.target.value)},onPointerDown:()=>mt("city"),onKeyDown:()=>mt("city"),onBlur:()=>hn("city"),disabled:et,required:!0,"aria-invalid":xt("city")||void 0,"aria-describedby":xt("city")?"flopay-billing-city-error":void 0,"data-testid":"flopay-city",style:V()})}),(0,u.isAVSFieldVisible)(ie.state,s)&&(0,l.jsx)("div",{style:{flex:1,backgroundColor:zr,borderTop:`1px solid ${An(xt("state"))}`,borderRight:`1px solid ${An(xt("state"))}`,borderBottom:`1px solid ${An(xt("state"))}`,borderLeft:`1px solid ${An(xt("state"))}`,padding:"10px",borderTopRightRadius:At,borderBottomRightRadius:At,...(0,u.isAVSFieldVisible)(ie.city,s)?{borderTopLeftRadius:0,borderBottomLeftRadius:0,borderLeft:`1px solid ${An(xt("state")||xt("city"))}`}:{borderRadius:At}},children:Le?(0,l.jsxs)("select",{id:"flopay-billing-state",name:"billing-state",value:ht,onChange:W=>{mt("state"),qt.current.state=!0,an.current=W.target.value,on(W.target.value)},onPointerDown:()=>mt("state"),onKeyDown:()=>mt("state"),onBlur:()=>hn("state"),disabled:et,autoComplete:"billing address-level1",required:!0,"aria-invalid":xt("state")||void 0,"aria-describedby":xt("state")?"flopay-billing-state-error":void 0,"data-testid":"flopay-state",style:{...V(),cursor:"pointer"},children:[(0,l.jsx)("option",{value:"",children:(0,u.getStateLabel)(s)}),Le.map(W=>(0,l.jsx)("option",{value:W.code,children:W.name},W.code))]}):(0,l.jsx)("input",{className:"flopay-shared-input",id:"flopay-billing-state",name:"billing-state",placeholder:(0,u.getStateLabel)(s),autoComplete:"billing address-level1",value:ht,onChange:W=>{mt("state"),qt.current.state=!0,an.current=W.target.value,on(W.target.value)},onPointerDown:()=>mt("state"),onKeyDown:()=>mt("state"),onBlur:()=>hn("state"),disabled:et,required:!0,"aria-invalid":xt("state")||void 0,"aria-describedby":xt("state")?"flopay-billing-state-error":void 0,"data-testid":"flopay-state",style:V()})})]}),xt("city")&&(0,l.jsx)("div",{id:"flopay-billing-city-error",role:"alert","data-testid":"flopay-city-error",style:mo,children:"City is required"}),xt("state")&&(0,l.jsxs)("div",{id:"flopay-billing-state-error",role:"alert","data-testid":"flopay-state-error",style:mo,children:[(0,u.getStateLabel)(s)," is required"]}),((0,u.isAVSFieldVisible)(ie.country,s)||(0,u.isAVSFieldVisible)(ie.postal_code,s))&&(0,l.jsxs)("div",{style:{display:"flex",flexDirection:Pe==="column"?"column":"row",gap:Pe==="column"?"0.5rem":"0",marginTop:"0.5rem"},children:[(0,u.isAVSFieldVisible)(ie.country,s)&&(0,l.jsx)("div",{style:{flex:Pe==="row"?1:void 0,backgroundColor:zr,borderTop:`1px solid ${po}`,borderRight:`1px solid ${po}`,borderBottom:`1px solid ${po}`,borderLeft:`1px solid ${po}`,padding:"10px",...Pe==="row"&&(0,u.isAVSFieldVisible)(ie.postal_code,s)?{borderRadius:"0",borderTopLeftRadius:At,borderBottomLeftRadius:At,borderRight:"none"}:{borderRadius:At}},children:(0,l.jsx)("select",{id:"flopay-billing-country",name:"billing-country",value:dt,onChange:W=>{qt.current.country=!0,Wt.current=W.target.value,Rt(W.target.value),st?.(W.target.value),an.current="",on("")},disabled:et,autoComplete:"billing country","data-testid":"flopay-country",style:{...V(),cursor:"pointer"},children:u.COUNTRY_OPTIONS.map(W=>(0,l.jsxs)("option",{value:W.code,children:[W.flag," ",W.name]},W.code))})}),(0,u.isAVSFieldVisible)(ie.postal_code,s)&&(0,l.jsx)("div",{style:{flex:Pe==="row"?1:void 0,backgroundColor:zr,border:`1px solid ${Vs}`,padding:"10px",...Pe==="row"&&(0,u.isAVSFieldVisible)(ie.country,s)?{borderRadius:"0",borderTopRightRadius:At,borderBottomRightRadius:At}:{borderRadius:At}},children:(0,l.jsx)("input",{className:"flopay-shared-input",id:"flopay-billing-postal-code",name:"billing-postal-code",placeholder:(0,u.getPostalCodeLabel)(dt),autoComplete:"billing postal-code",value:dn,onChange:W=>{mt("zip"),qt.current.zip=!0,Pt.current=W.target.value,rn(W.target.value),vt?.(W.target.value)},onPointerDown:()=>mt("zip"),onKeyDown:()=>mt("zip"),onBlur:()=>{gn("zip")&&zn(!0)},disabled:et,required:sn.required,"aria-invalid":Uo||void 0,"aria-describedby":Uo?"flopay-billing-postal-code-error":void 0,"data-testid":"flopay-zip",style:V()})})]}),Uo&&(0,l.jsx)("div",{id:"flopay-billing-postal-code-error",role:"alert","data-testid":"flopay-zip-error",style:mo,children:sn.empty?`${(0,u.getPostalCodeLabel)(s)} is required`:Nl(s)})]})})()}),Ye&&Gs,g&&(0,l.jsx)(Jr,{margin:"0.75rem 0",styleOverride:v.errorBanner,children:g})]}),qo={margin:0,padding:"6px 8px",background:"#eef2ff",border:"1px solid #c7d2fe",borderRadius:6,color:"#111827",font:"11px/1.35 ui-monospace, SFMono-Regular, Menlo, monospace",whiteSpace:"pre-wrap",wordBreak:"break-word"},Ai=s=>ue?!ye||!tr?(0,l.jsx)("pre",{"data-testid":s,style:qo,children:"FloPay/DirectPayPal-debug - not enabled"}):(0,l.jsx)("pre",{"data-testid":s,style:qo,children:["FloPay/DirectPayPal-debug (parent gate)",` showPayPal=${ye}`,` directPaypalConfigured=${tr}`,` inAppBrowserDetected=${String(No)}`,` shouldRenderDirectPayPal=${ao}`,` shouldRenderStripePayPal=${io}`,` hasPaypalStripeInstance=${!!Fr}`].join(`
|
|
39
39
|
`)}):null,Bi=s=>ue?!U||!In?(0,l.jsx)("pre",{"data-testid":s,style:qo,children:"FloPay/Stripe-debug - not enabled"}):(0,l.jsx)("pre",{"data-testid":s,style:qo,children:["FloPay/Stripe-debug (parent gate)",` showStripe=${U}`,` currency=${He}`,` amountInCents=${no}`,` enabledPaymentMethods: ${JSON.stringify(w??[])}`,` enabledPaymentMethodsProvided=${ro}`,` hasEnabledMethods=${Fo}`,` expressMethods: ${JSON.stringify(Do)}`,` walletExpressMethods: ${JSON.stringify(Or)}`,` paymentElementMethods: ${JSON.stringify(oo)}`,` paymentElementMethodsForCurrency: ${JSON.stringify(Lo)}`,` hasStripeInstance=${!!In}`,` shouldRenderWallets=${so}`,` shouldRenderPaymentElement=${lo}`].join(`
|
|
40
|
-
`)}):null,Fi=xe==="apm-expanding"||xe==="apm-form"||xe==="apm-collapsing",$o=xe==="apm-expanding"?`flopay-card-enter ${xr}ms cubic-bezier(0, 0, 0.2, 1) both`:xe==="apm-collapsing"?`flopay-card-exit ${xr}ms cubic-bezier(0.4, 0, 0.2, 1) both`:void 0,jo=Ot?{...va,paymentMethodTypes:[Ot]}:null;if(Y==="buttons"){let s=xe==="buttons"||xe==="expanding"||xe==="apm-expanding",h=xe==="expanding"||xe==="card"||xe==="collapsing",V=Oe===void 0?{boxSizing:"border-box",height:oa,padding:"0 1rem"}:{padding:"0.9rem 1rem"},Le=xe==="expanding"||xe==="apm-expanding"?`flopay-buttons-exit ${xr}ms cubic-bezier(0.4, 0, 0.2, 1) both`:xe==="collapsing"||xe==="apm-collapsing"?`flopay-buttons-enter ${xr}ms cubic-bezier(0, 0, 0.2, 1) both`:void 0,W=xe==="expanding"?`flopay-card-enter ${xr}ms cubic-bezier(0, 0, 0.2, 1) both`:xe==="collapsing"?`flopay-card-exit ${xr}ms cubic-bezier(0.4, 0, 0.2, 1) both`:void 0;return(0,l.jsxs)("form",{onSubmit:Sa,className:F,noValidate:!0,style:{position:"relative"},children:[(0,l.jsx)(qa,{}),Me&&(0,l.jsx)(Ln,{status:Me,errorMessage:g,authorized:On}),(0,l.jsxs)("div",{style:{display:"grid"},children:[(0,l.jsxs)("div",{"data-testid":"flopay-buttons-panel","aria-hidden":!s&&!Le?!0:void 0,style:{gridArea:"1 / 1",display:"flex",flexDirection:"column",gap:"0.5rem",...!s&&!Le?Al:{},...Le?{animation:Le,pointerEvents:"none"}:{}},children:[Ai("flopay-direct-paypal-gate-debug"),Bi("flopay-stripe-gate-debug"),ao&&fe&&(0,l.jsxs)(l.Fragment,{children:[Z&&(0,l.jsx)("div",{"data-testid":"flopay-paypal-direct-retry-notice",style:{padding:"8px 10px",background:"#fef3c7",border:"1px solid #fcd34d",borderRadius:6,color:"#78350f",fontSize:13,lineHeight:1.4},children:"Please confirm your PayPal payment to complete checkout."}),(0,l.jsx)(wo,{sessionId:e,nonce:t,billingApiUrl:de,email:D.email,billingName:me||void 0,onBuyerIdentityReady:ot,clientId:fe.clientId,environment:fe.environment,currency:He.toUpperCase(),isSubscription:st,providerObjectType:_,onTokenizedBody:bn,onComplete:i,onErrorChange:he,onDecline:c,onTechnicalFailure:Nr,onButtonClick:ee,runBeforeButtonClick:Hn,isProcessing:Ze,onLoadStateChange:Pa,onInitializationStateChange:Ca,session:Mt,existingOrderId:Z?.orderId,debug:ue},Z?.orderId??"fresh")]}),io&&(0,l.jsx)(Ft.Elements,{stripe:Fr,options:ai,children:(0,l.jsx)(us,{sessionId:e,nonce:t,email:D.email,billingName:me||void 0,onBuyerIdentityReady:ot,billingApiUrl:de,onTokenizedBody:bn,onErrorChange:he,isProcessing:Ze,onButtonClick:ee,onDecline:c,onTechnicalFailure:Nr,runBeforeButtonClick:Hn,onLoadStateChange:ui,placeholderBorderRadius:kr})}),so?(0,l.jsx)(Ft.Elements,{stripe:In,options:oi,children:(0,l.jsx)(ps,{sessionId:e,nonce:t,email:D.email,billingName:me||void 0,onBuyerIdentityReady:ot,billingApiUrl:de,intentKind:O>0?"payment":"setup",expressMethods:Or,onTokenizedBody:bn,onErrorChange:he,onButtonClick:ee,onDecline:c,onTechnicalFailure:Nr,runBeforeButtonClick:Hn,onLoadStateChange:mi,placeholderBorderRadius:kr})}):bi?(0,l.jsx)("div",{style:{height:oa,borderRadius:kr,background:"#e5e7eb",animation:"flopay-pulse 1.5s ease-in-out infinite"}}):null,lo&&(0,l.jsx)(ms,{sessionId:e,nonce:t,email:D.email,billingName:[D.firstName,D.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:ot,billingApiUrl:de,paymentElementMethods:Lo,stripeInstance:In,paymentElementBaseOptions:va,onTokenizedBody:bn,onErrorChange:he,onButtonClick:ee,onDecline:c,runBeforeButtonClick:Hn,onLoadStateChange:fi,isProcessing:Ze,submitButtonColor:Ir,submitButtonBorderRadius:At,submitButtonStyle:v.submitButton,onExpandApm:ne,expandedApmMethod:Ot,themeId:ge,buttonAppearance:{backgroundColor:v.cardButton?.backgroundColor,borderColor:v.cardInputBorder,textColor:v.cardButton?.color,borderRadius:kr}}),Ye&&(0,l.jsx)("button",{type:"button",onClick:async()=>{Ze||!(await Hn("card")).proceed||(ee?.("card"),N())},disabled:Ze,style:{width:"100%",...V,...v.cardButton,...Ka({themeBundle:p,resolvedPrimaryColor:Ir,resolvedBorderRadius:At,submitButtonStyle:v.submitButton,explicitPrimaryColor:vn?.colorPrimary}),fontSize:v.cardButtonFontSize??"0.95rem",fontWeight:600,cursor:Ze?"not-allowed":"pointer",display:"flex",alignItems:"center",justifyContent:"center",gap:"0.625rem",transition:"background-color 0.15s, border-color 0.2s, box-shadow 0.2s, transform 0.1s",position:"relative",opacity:Ze?.6:1},onMouseEnter:Fe=>{!Ze&&(p||vn?.colorPrimary)&&(Fe.currentTarget.style.backgroundColor=Hs)},onMouseLeave:Fe=>{(p||vn?.colorPrimary)&&(Fe.currentTarget.style.backgroundColor=Ir)},onMouseDown:Fe=>{Fe.currentTarget.style.transform="scale(0.985)"},onMouseUp:Fe=>{Fe.currentTarget.style.transform="scale(1)"},children:(0,l.jsx)($r,{content:Oe})}),g&&xe==="buttons"&&(0,l.jsx)(Jr,{margin:"0.25rem 0",styleOverride:v.errorBanner,children:g})]}),Ye&&h&&(0,l.jsx)("div",{style:{gridArea:"1 / 1",...W?{animation:W}:{},...xe==="collapsing"?{pointerEvents:"none"}:{}},children:Mi}),U&&Fi&&Ot&&jo&&In&&(0,l.jsx)("div",{style:{gridArea:"1 / 1",...$o?{animation:$o}:{},...xe==="apm-collapsing"?{pointerEvents:"none"}:{}},children:(0,l.jsxs)("div",{style:{backgroundColor:ka,borderRadius:Ta,...yo,padding:_a},children:[(0,l.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[(0,l.jsxs)("button",{type:"button","data-testid":"flopay-apm-back-button",onClick:re,style:{display:"inline-flex",alignItems:"center",gap:Ia?0:"0.5rem",background:"none",border:"none",cursor:"pointer",color:"#4b5563",fontSize:v.backButtonFontSize??"0.85rem",fontWeight:500,padding:0,transition:"color 0.15s",flexShrink:0,...v.backButton},"aria-label":"Back to payment methods",children:[(0,l.jsx)("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",transition:"background-color 0.15s",...v.backButtonIcon},children:(0,l.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,l.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,l.jsx)(jr,{content:Ee})]}),(0,l.jsx)("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:v.titleFontSize??"1.05rem",color:Ea,paddingRight:80,...v.title},children:`Pay with ${(0,u.getStripeMethodDisplayName)(Ot)}`})]}),(0,l.jsx)(Ft.Elements,{stripe:In,options:jo,children:(0,l.jsx)(ja,{method:Ot,sessionId:e,nonce:t,email:D.email,billingName:[D.firstName,D.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:ot,billingApiUrl:de,onTokenizedBody:bn,onErrorChange:he,onDecline:c,onCancel:re,runBeforeButtonClick:Hn,onButtonClick:ee,isProcessing:Ze,submitButtonColor:Ir,submitButtonBorderRadius:At,submitButtonStyle:v.submitButton,errorText:g})},Ot)]})})]})]})}return Fi&&Ot&&jo&&In&&U?(0,l.jsxs)("form",{onSubmit:Sa,className:F,noValidate:!0,style:{position:"relative"},children:[(0,l.jsx)(qa,{}),Me&&(0,l.jsx)(Ln,{status:Me,errorMessage:g,authorized:On}),(0,l.jsx)("div",{style:{...$o?{animation:$o}:{},...xe==="apm-collapsing"?{pointerEvents:"none"}:{}},children:(0,l.jsxs)("div",{style:{backgroundColor:ka,borderRadius:Ta,...yo,padding:_a},children:[(0,l.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[(0,l.jsxs)("button",{type:"button","data-testid":"flopay-apm-back-button-default",onClick:re,style:{display:"inline-flex",alignItems:"center",gap:Ia?0:"0.5rem",background:"none",border:"none",cursor:"pointer",color:"#4b5563",fontSize:v.backButtonFontSize??"0.85rem",fontWeight:500,padding:0,transition:"color 0.15s",flexShrink:0,...v.backButton},"aria-label":"Back to payment methods",children:[(0,l.jsx)("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",transition:"background-color 0.15s",...v.backButtonIcon},children:(0,l.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,l.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,l.jsx)(jr,{content:Ee})]}),(0,l.jsx)("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:v.titleFontSize??"1.05rem",color:Ea,paddingRight:80,...v.title},children:`Pay with ${(0,u.getStripeMethodDisplayName)(Ot)}`})]}),(0,l.jsx)(Ft.Elements,{stripe:In,options:jo,children:(0,l.jsx)(ja,{method:Ot,sessionId:e,nonce:t,email:D.email,billingName:[D.firstName,D.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:ot,billingApiUrl:de,onTokenizedBody:bn,onErrorChange:he,onDecline:c,onCancel:re,runBeforeButtonClick:Hn,onButtonClick:ee,isProcessing:Ze,submitButtonColor:Ir,submitButtonBorderRadius:At,submitButtonStyle:v.submitButton,errorText:g})},Ot)]})})]}):(0,l.jsxs)("form",{onSubmit:Sa,className:F,noValidate:!0,style:{position:"relative"},children:[(0,l.jsx)(qa,{}),Me&&(0,l.jsx)(Ln,{status:Me,errorMessage:g,authorized:On}),(0,l.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[Ai("flopay-direct-paypal-gate-debug-default"),Bi("flopay-stripe-gate-debug-default"),ao&&fe&&(0,l.jsxs)(l.Fragment,{children:[Z&&(0,l.jsx)("div",{"data-testid":"flopay-paypal-direct-retry-notice-default",style:{padding:"8px 10px",background:"#fef3c7",border:"1px solid #fcd34d",borderRadius:6,color:"#78350f",fontSize:13,lineHeight:1.4},children:"Please confirm your PayPal payment to complete checkout."}),(0,l.jsx)(wo,{sessionId:e,nonce:t,billingApiUrl:de,email:D.email,billingName:me||void 0,onBuyerIdentityReady:ot,clientId:fe.clientId,environment:fe.environment,currency:He.toUpperCase(),isSubscription:st,providerObjectType:_,onTokenizedBody:bn,onComplete:i,onErrorChange:he,onDecline:c,onTechnicalFailure:Nr,onButtonClick:ee,runBeforeButtonClick:Hn,isProcessing:Ze,onLoadStateChange:Pa,onInitializationStateChange:Ca,session:Mt,existingOrderId:Z?.orderId,debug:ue},Z?.orderId??"fresh")]}),io&&(0,l.jsx)(Ft.Elements,{stripe:Fr,options:ai,children:(0,l.jsx)(us,{sessionId:e,nonce:t,email:D.email,billingName:me||void 0,onBuyerIdentityReady:ot,billingApiUrl:de,onTokenizedBody:bn,onErrorChange:he,isProcessing:Ze,onButtonClick:ee,onDecline:c,onTechnicalFailure:Nr,runBeforeButtonClick:Hn,onLoadStateChange:ui,placeholderBorderRadius:kr})}),so&&(0,l.jsx)(Ft.Elements,{stripe:In,options:oi,children:(0,l.jsx)(ps,{sessionId:e,nonce:t,email:D.email,billingName:me||void 0,onBuyerIdentityReady:ot,billingApiUrl:de,intentKind:O>0?"payment":"setup",expressMethods:Or,onTokenizedBody:bn,onErrorChange:he,onButtonClick:ee,onDecline:c,onTechnicalFailure:Nr,runBeforeButtonClick:Hn,onLoadStateChange:mi,placeholderBorderRadius:kr})}),lo&&(0,l.jsx)(ms,{sessionId:e,nonce:t,email:D.email,billingName:[D.firstName,D.lastName].filter(Boolean).join(" ").trim()||void 0,billingApiUrl:de,paymentElementMethods:Lo,stripeInstance:In,paymentElementBaseOptions:va,onTokenizedBody:bn,onErrorChange:he,onButtonClick:ee,onDecline:c,runBeforeButtonClick:Hn,onLoadStateChange:fi,isProcessing:Ze,submitButtonColor:Ir,submitButtonBorderRadius:At,submitButtonStyle:v.submitButton,themeId:ge,onExpandApm:ne,expandedApmMethod:Ot,buttonAppearance:{backgroundColor:v.cardButton?.backgroundColor,borderColor:v.cardInputBorder,textColor:v.cardButton?.color,borderRadius:kr}})]}),Ye&&(zs||Os||Us)&&(0,l.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",margin:"0.5rem 0 0.75rem",color:"#999",fontSize:"0.85rem"},children:[(0,l.jsx)("div",{style:{flex:1,height:1,backgroundColor:"#ddd"}}),(0,l.jsx)("span",{children:"or pay with card"}),(0,l.jsx)("div",{style:{flex:1,height:1,backgroundColor:"#ddd"}})]}),Ye&&Mi]})}var I=require("react/jsx-runtime"),Ar=44,ti="flopay_checkout_saved_payment_resume",da=new Map,la=new Map;function Cs(e,t){t.settled&&t.consumers===0&&da.get(e)===t&&da.delete(e)}function $l(e,t,n){let r=la.get(e);if(r&&(!r.sdkGeneratedIdempotencyKey||!t||r.sdkGeneratedIdempotencyKey===t))return r.attempt;let o=n(),i={attempt:o,sdkGeneratedIdempotencyKey:t};la.set(e,i);let d=()=>{la.get(e)===i&&la.delete(e)};return o.then(d,d),o}function xo(e){return new Promise(t=>setTimeout(t,e))}function ca(e,t,n){let r=Go({billingApiUrl:e,sdkPackage:"@flopay/react",sdkVersion:ve.SDK_VERSION,enabled:t!==!1});return r.beginCheckout(n),r}function Mo(e){e.flush().catch(()=>{}).finally(()=>e.destroy())}function Ha(e,t,n,r,o){let i=ca(e,t,n);i.error({errorCode:r,stage:o,paymentMethodCategory:"unknown",...o==="session_read"?{requestCategory:"session_read"}:{}}),Mo(i)}function jl(e){return e.type==="validation_error"||e.code==="checkout_session_not_found"||e.code==="checkout_session_expired"||e.code==="checkout_session_completed"||e.code==="session_auto_completed"}function Qa(e){let t=e?.data.paypal?.publishableKey;if(t)return{clientId:t,environment:e?.data.paypal?.environment,providerObjectType:e?.data.paypal?.providerObjectType}}function Ya(e){return!e||e.data.stripe?.publishableKey?!1:!!Qa(e)?.clientId}function pr(){return typeof window<"u"&&typeof window.sessionStorage<"u"}function Vl(){if(!pr())return null;try{let e=window.sessionStorage.getItem(ti);return e?JSON.parse(e):null}catch{return null}}function Ss(e){if(pr())try{window.sessionStorage.setItem(ti,JSON.stringify(e))}catch(t){console.warn("[FloPayCheckout] Failed to persist PayPal resume state.",t)}}function Wa(){if(pr())try{window.sessionStorage.removeItem(ti)}catch(e){console.warn("[FloPayCheckout] Failed to clear PayPal resume state.",e)}}var ni=":idempotency-key";function ks(e,t){if(!pr())return null;let n=window.sessionStorage.getItem(e);if(!n)return null;try{let r=JSON.parse(n);return!r||typeof r.sid!="string"||!r.sid||"canonicalIdentity"in r&&r.canonicalIdentity!==t?null:{..."canonicalIdentity"in r?{canonicalIdentity:t}:{},sid:r.sid,nonce:typeof r.nonce=="string"?r.nonce:void 0}}catch{return{sid:n}}}function Ga(e,t,n,r){if(pr())try{window.sessionStorage.setItem(e,JSON.stringify(r?{canonicalIdentity:t,sid:n,nonce:r}:{canonicalIdentity:t,sid:n}))}catch(o){console.warn("[FloPayCheckout] Failed to persist checkout session cache.",o)}}function ei(e,t){if(pr())try{ks(e,t)&&window.sessionStorage.removeItem(e)}catch(n){console.warn("[FloPayCheckout] Failed to clear checkout session cache.",n)}}function Is(e,t){if(!pr())return null;try{let n=window.sessionStorage.getItem(e+ni);if(!n)return null;try{let r=JSON.parse(n);return typeof r=="string"?r?{idempotencyKey:r}:null:!r||typeof r.idempotencyKey!="string"||!r.idempotencyKey||"canonicalIdentity"in r&&r.canonicalIdentity!==t?null:{..."canonicalIdentity"in r?{canonicalIdentity:t}:{},idempotencyKey:r.idempotencyKey}}catch{return{idempotencyKey:n}}}catch{return null}}function Ja(e,t,n){if(pr())try{window.sessionStorage.setItem(e+ni,JSON.stringify({canonicalIdentity:t,idempotencyKey:n}))}catch(r){console.warn("[FloPayCheckout] Failed to persist checkout idempotency key.",r)}}function Xa(e,t){if(ei(e,t),!!pr())try{Is(e,t)&&window.sessionStorage.removeItem(e+ni)}catch(n){console.warn("[FloPayCheckout] Failed to clear checkout idempotency key.",n)}}function Kl(){if(typeof window>"u")return;let e=new URL(window.location.href),t=["payment_intent","payment_intent_client_secret","redirect_status"],n=!1;for(let r of t)e.searchParams.has(r)&&(e.searchParams.delete(r),n=!0);n&&window.history.replaceState(window.history.state,"",e.toString())}function ws(e){if(typeof window>"u")return;let t=new URL(window.location.href);t.searchParams.set("mode",e),window.history.replaceState(window.history.state,"",t.toString())}function Hl(e){return e?!!(e.account&&Object.keys(e.account).length>0||e.couponCodes!==void 0||e.checkoutMetadata!==void 0||e.tagsData!==void 0||e.utmMetadata!==void 0):!1}function Za(e,t){return`${e}:${t.totalAmount??""}:${t.overrideAmount??""}:${t.quantity??1}:${t.currency??""}`}function Yl(e){if(e==null)return e;let t=JSON.stringify(Object.entries(e).sort(([d],[c])=>d<c?-1:d>c?1:0)),n=1779033703,r=3144134277,o=1013904242,i=2773480762;for(let d=0;d<t.length;d++){let c=t.charCodeAt(d);n=r^Math.imul(n^c,597399067),r=o^Math.imul(r^c,2869860233),o=i^Math.imul(o^c,951274213),i=n^Math.imul(i^c,2716044179)}return n=Math.imul(o^n>>>18,597399067),r=Math.imul(i^r>>>22,2869860233),o=Math.imul(n^o>>>17,951274213),i=Math.imul(r^i>>>19,2716044179),n^=r^o^i,r^=n,o^=n,i^=n,[n,r,o,i].map(d=>(d>>>0).toString(16).padStart(8,"0")).join("")}function Ao(e,t=!1){let n=e?.account?.email?.trim().toLowerCase()??"",r={c:e?.clientId,cur:e?.currency??"",captureMethod:e?.captureMethod??"",a:{e:n,u:n?"":e?.account?.userId??"",country:e?.account?.country??""},successUrl:e?.successUrl,cancelUrl:e?.cancelUrl,p:e?.products?.map(o=>Za(`${o.type??""}:${o.code??o.providerItemId??o.providerPlanId??""}`,o)).sort(),i:e?.items?.map(o=>Za(o.code??o.providerItemId??"",o)).sort(),s:e?.subscriptions?.map(o=>Za(o.code??o.providerPlanId??"",o)).sort(),couponCodes:e?.couponCodes?[...e.couponCodes].sort():void 0,checkoutMetadata:Yl(e?.checkoutMetadata),...t?{tagsData:e?.tagsData,utmMetadata:e?.utmMetadata,tokenizedData:e?.tokenizedData,checkoutMode:e?.checkoutMode??"full"}:{}};return JSON.stringify(r)}function Wl(e,t=!1){let n=Ao(e,t),r=0;for(let o=0;o<n.length;o++)r=(r<<5)-r+n.charCodeAt(o)|0;return`flopay_session_${Math.abs(r).toString(36)}`}function Gl(e,t){if(!e?.customer||!e.products||t.checkoutMetadata!==void 0)return!1;let n=t.account.email?.trim().toLowerCase()??"",r=e.customer.email?.trim().toLowerCase()??"";if((n?r!==n:e.customer.id!==t.account.userId)||(t.account.country??"").trim().toUpperCase()!==(e.customer.country??"").trim().toUpperCase()||e.successUrl!==t.successUrl||e.cancelUrl!==t.cancelUrl||(e.captureMethod??"automatic")!==(t.captureMethod??"automatic"))return!1;let o=(0,ve.resolveSessionCurrency)(t.currency,t.items,t.subscriptions,t.products);if(!o||e.currency.toUpperCase()!==o.toUpperCase())return!1;let i=(t.products??(0,ve.foldIntoProducts)(t.items,t.subscriptions)).map(y=>({type:y.type,code:y.code??y.providerItemId??y.providerPlanId??"",quantity:y.quantity??1,totalAmount:y.totalAmount,overrideAmount:y.overrideAmount??null,currency:(y.currency??o).toUpperCase()})).sort((y,b)=>`${y.code}:${y.type??""}`.localeCompare(`${b.code}:${b.type??""}`)),d=e.products.map(y=>({type:y.type,code:y.code??"",quantity:y.quantity??1,totalAmount:y.totalAmount,overrideAmount:y.overrideAmount??null,currency:(y.currency??e.currency).toUpperCase()})).sort((y,b)=>`${y.code}:${y.type??""}`.localeCompare(`${b.code}:${b.type??""}`));if(i.length!==d.length)return!1;for(let y=0;y<i.length;y+=1){let b=i[y],P=d[y];if(b.code!==P.code||b.type!==void 0&&b.type!==P.type||b.quantity!==P.quantity||b.totalAmount!==P.totalAmount||b.overrideAmount!==P.overrideAmount||b.currency!==P.currency)return!1}let c=[...t.couponCodes??[]].sort(),C=[...e.coupons??[]].sort();return c.length===C.length&&c.every((y,b)=>y===C[b])}function ua({sessionId:e,nonce:t,createSession:n,billingApiUrl:r,telemetry:o,appearance:i,locale:d,loading:c,error:C,onComplete:y,onError:b,onInstrument:P,onDecline:F,onCountryChange:A,onZipChange:m,showPayPal:S=!0,showStripe:ye=!0,enabledPaymentMethods:U,showApplePay:w=!0,showGooglePay:ce=!0,debug:q=!1,layout:le,theme:Y,buttonsTheme:ge,buttonsStyles:qe,cardButtonContent:we,cardBackButtonContent:Et,cardTitleContent:Oe,showSecurityFooter:Ee,onButtonClick:Re,onBeforeButtonClick:oe,enableAVS:ee,cardFieldOrder:L,cardPreFormSlot:_e,avsLayout:Te,className:G,initialErrorMessage:Ie=null,children:Pe,checkoutMode:M,confirmLabel:K,renderConfirmButton:ke,onSessionCompleted:be}){let Q=(0,ve.resolveBillingApiUrl)(r),Be=(0,k.useMemo)(()=>(0,ve.resolveTheme)(Y),[Y]),it=i??Be?.appearance,vt=n?"embedded_checkout":"standard_checkout",Ke=Pe?"custom_layout":le==="buttons"?"buttons_layout":"default_layout",[te,$]=(0,k.useState)(null),[O,He]=(0,k.useState)(null),Je=(0,k.useRef)(null),[fe,st]=(0,k.useState)(null),E=(0,k.useRef)(null),[R,De]=(0,k.useState)(null),ue=(0,k.useMemo)(()=>n?Ao(n):"",[n]),ae=n?`create:${ue}`:`session:${e??""}`,rt=R?.gateways?.stripe?"stripe":R?.gateways?.paypal?"paypal":void 0,Ne=(0,k.useRef)(new Set),et=(0,k.useRef)(ae),Mt=(0,k.useRef)(ae);So(()=>{Mt.current=ae,et.current!==ae&&(et.current=ae,Ne.current.clear())},[ae]);let _=(0,k.useCallback)(N=>{if(Mt.current===ae){if(Ba.has(N.name)){if(Ne.current.has(N.name))return;Ne.current.add(N.name)}nt(()=>P?.(N))}},[ae,P]),J=Gr(_,ae),lt=(0,k.useRef)(!1),Xe=(0,k.useCallback)(N=>{if(lt.current)return;let j=N.gateway||!rt?N:{...N,gateway:rt};_(j)},[_,rt]);(0,k.useEffect)(()=>{J({class:"lifecycle",name:"checkout.mount"})},[J]);let[Zt,Ht]=(0,k.useState)(e??""),B=e??Zt,ft=n?"":B,[Tt,ct]=(0,k.useState)(!0),[Rt,dn]=(0,k.useState)(null),[rn,un]=(0,k.useState)("full"),[Dt,Cn]=(0,k.useState)(!1),[Qt,gt]=(0,k.useState)(Ie),[dt,ht]=(0,k.useState)(null),[on,tt]=(0,k.useState)(null),[Jn,pt]=(0,k.useState)(!1),[en,Pt]=(0,k.useState)(void 0),[Yt,Sn]=(0,k.useState)(""),[pn,_n]=(0,k.useState)(!1),[an,Tn]=(0,k.useState)(!1),[qt,ie]=(0,k.useState)(!1),mn=(0,k.useRef)(0),On=(0,k.useRef)(void 0),[Xn,Cr]=(0,k.useState)("loading"),[Sr,mr]=(0,k.useState)(0),Lt=(0,k.useRef)(!1),Ye=(0,k.useRef)(!1),yr=(0,k.useRef)(!1),T=(0,k.useRef)(null),ut=(0,k.useMemo)(()=>({checkoutMode:M??rn,layout:Pe?"unknown":le==="buttons"?"buttons":"embedded"}),[M,Pe,rn,le]),Vt=(0,k.useRef)(y);Vt.current=y;let wn=(0,k.useRef)(b);wn.current=b;let Ce=(0,k.useRef)(F);Ce.current=F,(0,k.useEffect)(()=>{jt(O)?.setCheckoutContext(ut),fe&&fe!==O&&jt(fe)?.setCheckoutContext(ut)},[O,fe,ut]);let sn=(0,k.useRef)(be);sn.current=be;let wr=(0,k.useCallback)(N=>{Cr(N),!(N!=="exhausted"||yr.current)&&(yr.current=!0,wn.current?.(new ve.FloPayError("PayPal is temporarily unavailable. Please try again.","api_error",{code:"paypal_init_timeout"})))},[]),Br=(0,k.useCallback)(()=>{Cr("retrying"),mr(N=>N+1)},[]);(0,k.useEffect)(()=>{Cr("loading"),mr(0),yr.current=!1},[B]),(0,k.useEffect)(()=>{console.info("[FloPay] Checkout initialized",{sdk_version:ve.SDK_VERSION,checkout_type:vt,checkout_layout:Ke,billing_api_url:Q})},[Ke,vt,Q]);let yn=(0,k.useMemo)(()=>n?Ao(n,!0):"",[n]),fr=(0,k.useMemo)(()=>Yt===yn?en:void 0,[en,Yt,yn]),Zn=(0,k.useMemo)(()=>n?xa(n,fr):void 0,[n,fr]),zn=M??Zn?.checkoutMode??"full",Nt=(0,k.useMemo)(()=>Zn?{...Zn,checkoutMode:zn}:void 0,[Zn,zn]);(0,k.useEffect)(()=>{Pt(void 0),Sn(yn),On.current=void 0,ie(!1)},[yn]),(0,k.useEffect)(()=>{gt(Ie)},[Ie]);let Un=(0,k.useCallback)((N,j,ne)=>{nt(()=>{Ce.current?.(Kt(N,j,ne))})},[]),Qn=(0,k.useCallback)(async(N,j)=>{gt(null),tt(null),pt(!1),ht("processing");let ne=j?.sessionId??N.id,re=N.gateways?.stripe?"stripe":N.gateways?.paypal?"paypal":void 0,Me=Je.current??E.current,z=jt(Me),X=Me?null:ca(Q,o,ut),f={log:g=>{z?z.log(g):X?.log(g)},error:g=>{z?z.error(g):X?.error(g)},terminal:g=>{z?z.terminal(g):X?.terminal(g)},performance:g=>{z?z.performance(g):X?.performance(g)},now:()=>z?.now()??X?.now()??0,elapsed:g=>z?.elapsed(g)??Math.max(0,(X?.now()??g)-g)},H=f.now(),Z=!!(j?.initialAutoProcessingError||j?.initialAutoProcessingPending),bt=!1,Ct,de=()=>{bt||(bt=!0,Z=!0,Ct=f.now(),f.log({name:"checkout.recovery.started",stage:"recovery",paymentMethodCategory:"saved"}),f.log({name:"operation.recovery.started",stage:"recovery",paymentMethodCategory:"saved"}))},Ae=!1,Wt=()=>{Ae||(Ae=!0,f.log({name:"payment.processing.completed",stage:"processing",paymentMethodCategory:"saved"}),f.performance({stage:"processing",durationMs:f.elapsed(H),durationMode:"machine",paymentMethodCategory:"saved"}),Ct!==void 0&&f.performance({stage:"recovery",durationMs:f.elapsed(Ct),durationMode:"machine",paymentMethodCategory:"saved"}))};f.log({name:"payment.method.selected",stage:"processing",paymentMethodCategory:"saved"}),lt.current=!0;try{f.log({name:"payment.processing.started",stage:"processing",paymentMethodCategory:"saved"})}finally{lt.current=!1}J({class:"lifecycle",name:"payment.processing.started",provider:re}),Z&&de();let ot;try{let g=es(j?.initialAutoProcessingError),p;if(g)de(),g.type==="paypal_redirect_required"&&T.current?.publishableKey&&Ss({sessionId:ne,publishableKey:T.current.publishableKey,paypalPublishableKey:T.current.paypalPublishableKey}),p=await ea(g,{flopay:Je.current,paypalFlopay:E.current,attempt3DS:j?.attempt3DS,billingApiUrl:Q,sessionId:ne,session:N,telemetry:!1}),g.type==="paypal_redirect_required"&&Wa();else if(j?.initialAutoProcessingPending){let pe=(await new Mr.PaymentAPI(Q,{telemetry:!1}).waitForCheckoutSessionCompletion(j.initialAutoProcessingPending.sessionId,{initialDelayMs:j.initialAutoProcessingPending.retryAfterMs})).data.session;if(!Kr(pe))throw Ho(pe);p=Rr(pe,ne)}else{if(j?.initialAutoProcessingError)throw Pr(j.initialAutoProcessingError,"Automatic payment failed. Please try again.",{checkoutMethod:j.initialAutoProcessingError.checkoutMethod});if(j?.fromCreateSession)return j?.fallbackToFull&&(un("full"),ws("full")),!1;{let v=await Qr({billingApiUrl:Q,sessionId:ne,session:N,telemetry:!1});v.type==="success"?p=v.result:(de(),v.type==="paypal_redirect_required"&&T.current?.publishableKey&&Ss({sessionId:ne,publishableKey:T.current.publishableKey,paypalPublishableKey:T.current.paypalPublishableKey}),p=await ea(v,{flopay:Je.current,paypalFlopay:E.current,attempt3DS:j?.attempt3DS,billingApiUrl:Q,sessionId:ne,session:N,telemetry:!1}),v.type==="paypal_redirect_required"&&Wa())}}ne&&Xr(ne),Wt(),Z&&(f.log({name:"checkout.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"}),f.log({name:"operation.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"})),f.terminal({outcome:p.status==="authorized"?"payment_authorized":"payment_succeeded",paymentMethodCategory:"saved"}),pt(p.status==="authorized"),ht("success"),await xo(1200),ot=()=>Vt.current?.(p)}catch(g){let p=_o(g),v=p.checkoutMethod??Ro;gt(p.message),tt(p.message),pt(!1),j?.fallbackToFull&&(f.log({name:"operation.fallback",stage:"recovery",paymentMethodCategory:"saved"}),un("full"),ws("full")),Wt();let Se=p.statusCode!==void 0?(0,ve.telemetryStatusClass)(p.statusCode,"unknown"):void 0,pe=Se==="4xx"?{requestCategory:"process_payment",statusClass:Se}:{},We=Se===void 0||Se==="4xx";if(We&&(p.telemetryOutcome==="payment_declined"||!!(p.declineCode||p.code?.toLowerCase().includes("declin"))))f.terminal({outcome:"payment_declined",paymentMethodCategory:"saved",...pe});else if(We&&(p.telemetryOutcome==="validation_rejected"||p.type==="validation_error"))f.terminal({outcome:"validation_rejected",paymentMethodCategory:"saved",...pe});else{let D=(0,ve.classifyTelemetryFailure)(g,Z?"RECOVERY_FAILED":"PAYMENT_PROCESSING_FAILED","unknown"),me=p.telemetryRequestCategory??"process_payment";lt.current=!0;try{f.error({...D,...p.telemetryFailureCategory?{failureCategory:p.telemetryFailureCategory}:{},stage:Z?"recovery":"processing",paymentMethodCategory:"saved",requestCategory:me})}finally{lt.current=!1}J({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:me,provider:re})}return nt(()=>wn.current?.(p)),Un(v,p,{code:p.code,declineCode:p.declineCode}),ht("error"),await Promise.allSettled([xo(1500),j?.ensureProvidersReady?j.ensureProvidersReady():Promise.resolve()]),Z&&(f.log({name:"checkout.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"}),f.log({name:"operation.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"})),!1}finally{Wt(),X&&Mo(X),ht(null),tt(null)}return nt(ot),!0},[Un,J,Q,o,ut]);(0,k.useEffect)(()=>{if(typeof window>"u"||Ye.current)return;let N=new URLSearchParams(window.location.search),j=N.get("payment_intent_client_secret");if(!j)return;let ne=Vl();ne&&(Ye.current=!0,(async()=>{let re,Me=0;gt(null),tt(null),ht("processing"),Cn(!0);try{if(N.get("redirect_status")==="failed")throw Object.assign(new ve.FloPayError("PayPal payment was declined. Please try again.","api_error",{declineCode:"paypal_redirect_failed"}),{checkoutMethod:"paypal"});let{flopay:z,paypalFlopay:X}=await na({publishableKey:ne.publishableKey,paypalPublishableKey:ne.paypalPublishableKey,billingApiUrl:Q,locale:d,telemetry:o});re=jt(X??z),Me=re?.now()??0,re?.log({name:"provider.redirect.resumed",stage:"redirect_resume",provider:"paypal",paymentMethodCategory:"paypal"}),re?.log({name:"operation.recovery.started",stage:"recovery",provider:"paypal",paymentMethodCategory:"paypal"});let f=(X??z)?.getRawProvider();if(!f)throw Object.assign(new ve.FloPayError("PayPal is not available.","api_error"),{checkoutMethod:"paypal"});let{paymentIntent:H,error:Z}=await f.retrievePaymentIntent(j);if(Z)throw Object.assign(new ve.FloPayError(Z.message??"Failed to retrieve PayPal payment status.","api_error",{code:Z.code}),{checkoutMethod:"paypal"});let bt=Ui(H?.status);if(!H||bt==="failed")throw Object.assign(new ve.FloPayError("PayPal payment was not completed. Please try again.","api_error"),{checkoutMethod:"paypal"});let Ct=typeof H.payment_method=="string"?H.payment_method:H.payment_method?.id,de=bt;if(ne.sessionId){let ot=(await new Mr.PaymentAPI(Q,{telemetry:!1}).getUnifiedCheckoutSession(ne.sessionId)).data.session;if(ot&&ot.status!=="complete"){let g=await Qr({billingApiUrl:Q,sessionId:ne.sessionId,session:ot,telemetry:!1,tokenizedData:{id:Ct??H.id,type:"card",threeDSecureActionResultTokenId:H.id,isPaypal:!0}});if(g.type!=="success")throw Object.assign(new ve.FloPayError("Failed to finalize PayPal payment.","api_error"),{checkoutMethod:"paypal"});de=g.result.status}}ne.sessionId&&Xr(ne.sessionId),re?.log({name:"operation.recovery.completed",stage:"recovery",provider:"paypal",paymentMethodCategory:"paypal"}),re?.performance({stage:"redirect_resume",durationMs:re.elapsed(Me),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"}),re?.terminal({outcome:"payment_succeeded",provider:"paypal",paymentMethodCategory:"paypal"}),ht("success"),await xo(1200),nt(()=>Vt.current?.({status:de,paymentIntentId:H.id,paymentMethodId:Ct,checkoutMethod:"paypal"}))}catch(z){let X=_o(z),f=X.checkoutMethod??"paypal",H=!!(X.declineCode||X.code?.toLowerCase().includes("declin"));if(re)re.performance({stage:"redirect_resume",durationMs:re.elapsed(Me),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"}),H?re.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal"}):re.error({errorCode:"REDIRECT_RESUME_FAILED",stage:"redirect_resume",provider:"paypal",paymentMethodCategory:"paypal"});else if(H){let Z=ca(Q,o,ut);Z.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal"}),Mo(Z)}else Ha(Q,o,ut,"REDIRECT_RESUME_FAILED","redirect_resume");gt(X.message),tt(X.message),nt(()=>wn.current?.(X)),Un(f,X,{code:X.code,declineCode:X.declineCode}),ht("error"),await xo(1500)}finally{Wa(),Kl(),ht(null),tt(null),Cn(!1)}})())},[Un,d,Q,o,ut]);let fn=(0,k.useRef)(null),tn=(0,k.useMemo)(()=>Nt?Ao(Nt):"",[Nt]),qn=(0,k.useRef)(Nt);qn.current=Nt,(0,k.useEffect)(()=>{Ht(e??"")},[e]),(0,k.useEffect)(()=>{Lt.current=!1,gt(Ie),tt(null),pt(!1),ht(null)},[tn,Ie,e]);async function $n(N,j,ne){let re=ca(Q,o,ut),Me=new Mr.PaymentAPI(Q,{telemetry:!1}),z=!1;try{let X=N.idempotencyKey!==void 0?(0,ve.resolveIdempotencyKey)(N.idempotencyKey):void 0,f=ks(j,ne),H=Is(j,ne);f?.canonicalIdentity===ne&&H&&H.canonicalIdentity===void 0&&(Ja(j,ne,H.idempotencyKey),H={...H,canonicalIdentity:ne});let Z=X??(H?.canonicalIdentity===ne?H.idempotencyKey:void 0),bt,Ct=!1;re.log({name:f?"operation.cache.hit":"operation.cache.miss",stage:"session_create",requestCategory:"session_create"});let de=f?.sid??null,Ae=null,Wt,ot,g=!1;if(de)try{Ae=await Me.getUnifiedCheckoutSession(de,f?.nonce),f&&f.canonicalIdentity===void 0&&(Gl(Ae.data.session,N)?(Ga(j,ne,de,f.nonce??Ae.data.session?.clientSecret),H&&H.canonicalIdentity===void 0&&(Ja(j,ne,H.idempotencyKey),Z??(Z=H.idempotencyKey))):(Xa(j,ne),H=null,Z=X,de=null,Ae=null));let v=Ae?.data.session?.status,Se=Ae?.data.session,pe=Se?.clientSecret||f?.nonce;if(de&&Se?.buyerIdentified===!1&&pe&&(ot=Vr(Me,de,pe,N.account)),de&&Ae&&v==="complete"){if(Da(de))return{sid:de,result:Ae};Xa(j,ne),de=null,Ae=null,Ct=!0}}catch{re.log({name:"operation.fallback",stage:"session_read",requestCategory:"session_read"}),f?.canonicalIdentity===void 0?(Xa(j,ne),Z=X):ei(j,ne),de=null}if(!de){!X&&(Ct||!Z)&&(Z=(0,ve.resolveIdempotencyKey)(),bt=Z),Z&&Ja(j,ne,Z);let v=re.now(),Se=0;re.log({name:"session.create.started",stage:"session_create",requestCategory:"session_create"});let pe={...N,idempotencyKey:Z,avsCheck:!!ee,avsConfig:typeof ee=="object"?ee:void 0,checkoutType:"embedded_checkout",checkoutLayout:Pe?"custom_layout":le==="buttons"?"buttons_layout":"default_layout"};Object.defineProperty(pe,Mr.SESSION_CREATE_TELEMETRY,{configurable:!1,enumerable:!1,value:{onAttempt:se=>{Se=Math.max(Se,se)}}});let We=()=>{re.log({name:"session.request.completed",stage:"session_create",requestCategory:"session_create",statusClass:"2xx"}),re.performance({stage:"session_create",durationMs:re.now()-v,durationMode:"machine",requestCategory:"session_create",attempt:Se,statusClass:"2xx"})},Ze=se=>{let D=(0,ve.classifyTelemetryFailure)(se,"CHECKOUT_SESSION_CREATE_FAILED","unknown");re.performance({stage:"session_create",durationMs:re.now()-v,durationMode:"machine",requestCategory:"session_create",attempt:Se,statusClass:D.statusClass}),se instanceof ve.FloPayError&&se.type==="validation_error"?re.terminal({outcome:"validation_rejected",stage:"session_create",paymentMethodCategory:"unknown"}):D.statusClass==="4xx"?re.terminal({outcome:"validation_rejected",stage:"session_create",paymentMethodCategory:"unknown",requestCategory:"session_create",statusClass:"4xx"}):(re.error({...D,stage:"session_create",paymentMethodCategory:"unknown",requestCategory:"session_create"}),J({class:"technical_error",errorCode:"CHECKOUT_SESSION_CREATE_FAILED",requestCategory:"session_create"}))};try{if((0,ve.isDetachedSessionEligible)(pe)){let se=await Me.createDetachedSession(pe);se.claimed.catch(()=>{}),Ae=se.shell,de=se.sessionId,ot=se.claim,Wt=se.claimed.then(D=>{let me=D.data.session?.id??se.sessionId;return me&&Ga(j,ne,me,D.data.session?.clientSecret??se.nonce),We(),D},D=>{throw ei(j,ne),Ze(D),D}).finally(()=>Mo(re)),Wt.catch(()=>{}),z=!0,re.log({name:"session.shell.ready",stage:"session_shell",requestCategory:"session_create",paymentMethodCategory:"card",statusClass:"2xx"}),re.performance({stage:"session_shell",durationMs:re.now()-v,durationMode:"machine",requestCategory:"session_create",attempt:Se,statusClass:"2xx",paymentMethodCategory:"card"})}else Ae=await Me.createAndFetchSession(pe),We()}catch(se){throw Ze(se),se}de=Ae.data.session?.id??de??"",de&&!Wt&&Ga(j,ne,de,Ae.data.session?.clientSecret)}let p=Ae?.data.session;return!ot&&de&&p?.buyerIdentified===!1&&p.clientSecret&&(ot=Vr(Me,de,p.clientSecret,N.account)),{sid:de??"",result:Ae,sdkGeneratedIdempotencyKey:bt,...Wt?{claimed:Wt}:{},...ot?{claim:ot}:{},...g?{claimRequiresIdentity:!0}:{}}}finally{z||Mo(re)}}let mt=(0,k.useRef)($n);So(()=>{mt.current=$n},[$n]);let gn=(0,k.useCallback)(async(N,j)=>{let ne=qn.current;if(!ne)throw new ve.FloPayError("createSession is required to bootstrap checkout.","validation_error");let re=xa(ne,N),Me=Ao(re),z=Wl(re),X=da.get(Me);if(!X){let Z={canonicalIdentity:Me,promise:mt.current(re,z,Me),consumers:0,settled:!1};X=Z,da.set(Me,Z);let bt=()=>{Z.settled=!0,Cs(Me,Z)};Z.promise.then(bt,bt)}X.consumers+=1;let f=!1,H=()=>{f||(f=!0,X.consumers-=1,Cs(Me,X))};j?.(H);try{let Z=await X.promise;fn.current=Me,N&&(Sn(yn),Pt(Se=>Ni(Se,N)));let{sid:bt,result:Ct,claimed:de,claim:Ae,claimRequiresIdentity:Wt}=Z;if(On.current=Ae,ie(Wt===!0),$(Ct),Ct.data.session&&De(Ct.data.session),bt&&Ht(bt),de){mn.current+=1;let Se=mn.current;Tn(!0),de.then(pe=>{mn.current===Se&&($(pe),pe.data.session&&De(pe.data.session),Tn(!1),ie(!1))},pe=>{mn.current===Se&&(Tn(!1),ie(!1),dn(pe instanceof ve.FloPayError?pe:new ve.FloPayError(pe instanceof Error?pe.message:"Failed to create session","api_error")))})}else mn.current+=1,Tn(!1),ie(!1);let{publishableKey:ot,paypalPublishableKey:g}=ta(Ct),{flopay:p,paypalFlopay:v}=await na({publishableKey:ot,paypalPublishableKey:g,billingApiUrl:Q,locale:d,telemetry:o});return Je.current=p,He(p),E.current=v,st(v),ct(!1),Z}catch(Z){throw fn.current===Me&&(fn.current=null),Z}finally{j||H()}},[yn,d,Q,o]),hn=(0,k.useRef)(Qn);hn.current=Qn;let jn=(0,k.useRef)(gn);jn.current=gn;let xn=(0,k.useCallback)(async N=>{if(!Hl(N)||pn)return{sessionId:Zt,session:R};_n(!0);try{let j=await gn(N);return{sessionId:j.sid,session:j.result.data.session??null}}finally{_n(!1)}},[gn,pn,Zt,R]),xe=(0,k.useCallback)(async N=>{let j=On.current;if(!j)return;let ne=mn.current,re=await j(N);mn.current===ne&&($(re),re.data.session&&De(re.data.session))},[]);(0,k.useEffect)(()=>{let N=!1,j;if(dn(null),tn){let Me=qn.current;return un(zn),ct(!1),fn.current===tn?()=>{N=!0}:(De(Oi(Me,M)),(async()=>{let z=typeof window<"u"&&new URLSearchParams(window.location.search).has("payment_intent"),X=zn==="auto"&&!Lt.current&&!z;X&&(gt(null),tt(null),ht("processing"));try{let f=await jn.current(void 0,Ct=>{j=Ct}),H=f.result.data.session??null;T.current=ta(f.result);let Z=Ya(f.result),bt=Da(f.sid||H?.id);if(!N&&X&&H&&!Z&&!bt){Lt.current=!0,await $l(tn,f.sdkGeneratedIdempotencyKey,()=>hn.current(H,{attempt3DS:!0,fallbackToFull:!0,fromCreateSession:!0,initialAutoProcessingError:f.result.autoProcessingError,initialAutoProcessingPending:f.result.autoProcessingPending,autoProcessingAttempted:f.result.autoProcessingAttempted,sessionId:f.sid||H.id}));return}!N&&X&&((Z||bt)&&(Lt.current=!0),ht(null),tt(null))}catch(f){if(N)return;let H=f instanceof ve.FloPayError||typeof f=="object"&&f!==null&&"code"in f?f.code:void 0;if(X&&H==="session_auto_completed"){Lt.current=!0,ht("success"),await xo(1200),N||(nt(()=>{Vt.current?.({status:"succeeded"})}),ht(null),tt(null));return}X&&(ht(null),tt(null));let Z=f instanceof ve.FloPayError?f:new ve.FloPayError(f instanceof Error?f.message:"Failed to create session","api_error");dn(Z)}finally{j?.(),j=void 0}})(),()=>{N=!0,j?.()})}ct(!0);async function ne(){let Me=!1;try{let z=new Mr.PaymentAPI(Q,{telemetry:!1}),X=await z.getUnifiedCheckoutSession(B,t);if(N)return;$(X);let f=X.data.session??null;if(De(f),!f)throw new ve.FloPayError("No session data returned","api_error");let H=f.checkoutMode;if(H==="setup")throw new ve.FloPayError("This is a card setup session. Use FloPayCardSetup instead of FloPayCheckout.","validation_error",{code:"InvalidCardSetupSurface",param:"sessionId"});if(f.status==="authorized"){ct(!1),nt(()=>{Vt.current?.(Rr(f,B)),sn.current?.(f.successUrl??"")});return}if(f.status==="complete"){ct(!1),nt(()=>{sn.current?.(f.successUrl??"")});return}if(f.status==="expired")throw Ko(f);Me=!0;let Z=M??H??"full";un(Z),mn.current+=1;let bt=f.clientSecret||t;On.current=f.buyerIdentified===!1&&bt?Vr(z,B,bt,{...f.customer?.id?{userId:f.customer.id}:{}}):void 0,Tn(!1),ie(!1);let Ct=typeof window<"u"&&new URLSearchParams(window.location.search).has("payment_intent"),de=Ya(X);if(Z==="auto"&&!Lt.current&&!Ct&&!de){Lt.current=!0;let Ae=re(X);try{if(await hn.current(f,{attempt3DS:!0,fallbackToFull:!0,ensureProvidersReady:()=>Ae,sessionId:B||f.id}),N)return;await Ae,N||ct(!1);return}catch{if(N)return;await Ae,N||ct(!1);return}}await re(X),N||ct(!1)}catch(z){if(N)return;Me&&J({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED"}),z instanceof ve.FloPayError?!Me&&!jl(z)&&Ha(Q,o,ut,"NETWORK_REQUEST_FAILED","session_read"):Ha(Q,o,ut,"INTERNAL_SDK_ERROR","checkout_mount");let X=z instanceof ve.FloPayError?z:new ve.FloPayError(z instanceof Error?z.message:"Failed to initialize checkout","api_error");dn(X),ct(!1)}}async function re(Me){let{publishableKey:z,paypalPublishableKey:X}=ta(Me);T.current={publishableKey:z,paypalPublishableKey:X};let{flopay:f,paypalFlopay:H}=await na({publishableKey:z,paypalPublishableKey:X,billingApiUrl:Q,locale:d,telemetry:o});Je.current=f,He(f),E.current=H,st(H)}return ne(),()=>{N=!0}},[M,tn,zn,ft,t]);let nn=(0,k.useCallback)(async()=>{if(!(Dt||!R)){Cn(!0),gt(null);try{await Qn(R,{attempt3DS:!0,fallbackToFull:!0,sessionId:B||R.id})}finally{Cn(!1)}}},[B,Dt,Qn,R]),Ot=Qa(te),gr=Ya(te),Vn=(0,k.useMemo)(()=>{if(!(!te||!R||!te.data.stripe?.publishableKey))return{billingApiUrl:Q}},[te,R,Q]),hr=!!(n&&!Pe&&le==="buttons"&&oe&&zn==="full"),kn=(0,k.useMemo)(()=>({session:R,loading:Tt,error:Rt,checkoutMode:rn,inlineSessionDraft:Nt,applyInlineSessionPatch:hr?xn:void 0,inlineSessionPatchProcessing:pn,claimPending:an,claimRequiresIdentity:qt,claimBuyerIdentity:xe}),[R,Tt,Rt,rn,Nt,hr,xn,pn,an,qt,xe]),Mn=!!n&&le==="buttons"&&!gr&&(!O||!Vn),zt=dt?(0,I.jsx)(Ln,{status:dt,errorMessage:on,authorized:Jn}):null;if(Tt){if(c)return(0,I.jsxs)(I.Fragment,{children:[c,zt]});if(le==="buttons"){let N=Be?.buttonsLayout?.cardButton?.borderRadius??Be?.appearance.variables?.borderRadius??8,j=ne=>(0,I.jsx)("div",{style:{height:ne,borderRadius:N,background:"#e5e7eb",animation:"flopay-loading-pulse 1.5s ease-in-out infinite"}});return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[S&&j(Ar),ye&&(w||ce)&&j(Ar),ye&&j(Ar),(0,I.jsx)("style",{children:"@keyframes flopay-loading-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }"})]}),zt]})}return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)("div",{style:{display:"flex",justifyContent:"center",padding:32},children:[(0,I.jsx)("div",{style:{width:24,height:24,border:"2px solid #e5e7eb",borderTopColor:"#6b7280",borderRadius:"50%",animation:"spin 0.6s linear infinite"}}),(0,I.jsx)("style",{children:"@keyframes spin { to { transform: rotate(360deg); } }"})]}),zt]})}return Rt?C?(0,I.jsx)(Yn.Provider,{value:kn,children:C(Rt)}):(0,I.jsx)(Yn.Provider,{value:kn,children:(0,I.jsx)("div",{role:"alert","data-testid":"flopay-load-error",style:{padding:24,textAlign:"center",color:"#dc2626",fontSize:14},children:Rt.message})}):Mn?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(Yn.Provider,{value:kn,children:(0,I.jsx)(Xl,{onButtonClick:Re,showPayPal:S,showStripe:ye,showApplePay:w,showGooglePay:ce,theme:Y,buttonsTheme:ge,buttonsStyles:qe,cardButtonContent:we,cardBackButtonContent:Et,cardTitleContent:Oe})}),zt]}):gr&&R&&Ot?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(Yn.Provider,{value:kn,children:(0,I.jsxs)("div",{className:G,style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[Qt&&(0,I.jsx)(Jr,{icon:!1,children:Qt}),Xn==="retrying"&&(0,I.jsx)("div",{role:"status","aria-live":"polite",children:"PayPal is temporarily unavailable. Retrying\u2026"}),Xn==="exhausted"&&(0,I.jsxs)("div",{role:"alert",children:[(0,I.jsx)("div",{children:"PayPal is temporarily unavailable. Please try again."}),(0,I.jsx)("button",{type:"button",onClick:Br,children:"Retry PayPal"})]}),an?c??(0,I.jsx)("div",{role:"status","data-testid":"flopay-paypal-catalog-loading","aria-label":"Preparing PayPal",style:{height:Ar,borderRadius:8,background:"#e5e7eb",animation:"flopay-loading-pulse 1.5s ease-in-out infinite"},children:(0,I.jsx)("style",{children:"@keyframes flopay-loading-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }"})}):Xn!=="exhausted"?(0,I.jsx)("div",{"aria-hidden":Xn==="retrying"?!0:void 0,style:Xn==="retrying"?{position:"relative",height:0,opacity:0,pointerEvents:"none"}:void 0,children:(0,I.jsx)(Xi,{sessionId:B,nonce:R.clientSecret||void 0,billingApiUrl:Q,email:R.customer?.email||Nt?.account?.email,billingName:[R.customer?.firstName,R.customer?.lastName].filter(Boolean).join(" ")||[Nt?.account?.firstName,Nt?.account?.lastName].filter(Boolean).join(" ")||void 0,onBuyerIdentityReady:xe,clientId:Ot.clientId,environment:Ot.environment,currency:(R.currency??"usd").toUpperCase(),isSubscription:R.mode==="subscription",providerObjectType:Ot.providerObjectType,onComplete:y,onErrorChange:gt,onDecline:F,onButtonClick:Re,onInitializationStateChange:wr,allowAutomaticRetry:Sr===0,session:R,telemetry:o,telemetryContext:ut,onInstrument:Xe,debug:q},`${ae}:paypal-init-${Sr}`)}):null]})}),zt]}):!O||!Vn?(0,I.jsx)(I.Fragment,{children:zt}):rn==="confirm"?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(Yn.Provider,{value:kn,children:(0,I.jsx)(Io,{flopay:O,paypalFlopay:fe,options:Vn,onInstrument:Xe,children:(0,I.jsxs)("div",{className:G,children:[Qt&&(0,I.jsx)("div",{style:{color:"#dc2626",fontSize:"0.875rem",marginBottom:"0.75rem",textAlign:"center"},children:Qt}),ke?ke({onConfirm:nn,isProcessing:Dt}):(0,I.jsx)("button",{type:"button",onClick:nn,disabled:Dt,style:{width:"100%",padding:"0.875rem",backgroundColor:"#4A49FF",color:"white",border:"none",borderRadius:"8px",fontSize:"1rem",fontWeight:600,cursor:Dt?"not-allowed":"pointer",opacity:Dt?.6:1},children:Dt?"Processing...":K??"Confirm Purchase"})]})},ae)}),zt]}):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(Yn.Provider,{value:kn,children:(0,I.jsx)(Io,{flopay:O,paypalFlopay:fe,options:Vn,onInstrument:Xe,children:Pe?(0,I.jsxs)(I.Fragment,{children:[Qt&&(0,I.jsx)("div",{style:{padding:"0.75rem 1rem",marginBottom:"0.75rem",backgroundColor:"#FEF3C7",border:"1px solid #F59E0B",borderRadius:"8px",color:"#92400E",fontSize:"0.875rem"},children:Qt}),(0,I.jsx)(Jl,{sessionId:B,nonce:R?.clientSecret||void 0,billingApiUrl:Q,session:R,children:Pe})]}):(0,I.jsx)(sa,{sessionId:B,nonce:R?.clientSecret||void 0,email:R?.customer?.email||Nt?.account?.email,userId:R?.customer?.id||Nt?.account?.userId,firstName:R?.customer?.firstName||Nt?.account?.firstName,lastName:R?.customer?.lastName||Nt?.account?.lastName,totalAmount:R?Math.round((0,ve.buildCheckoutDisplayData)(R).total*100):0,currency:R?.currency?.toLowerCase()??"usd",onComplete:y,onError:b,onDecline:F,error:Qt,onErrorChange:gt,showPayPal:S,showStripe:ye,enabledPaymentMethods:U??te?.data.stripe?.enabledPaymentMethods,enabledPaymentMethodCountries:te?.data.stripe?.enabledPaymentMethodCountries,showApplePay:w,showGooglePay:ce,layout:le,theme:Y,buttonsTheme:ge,buttonsStyles:qe,appearance:it,cardButtonContent:we,cardBackButtonContent:Et,cardTitleContent:Oe,onButtonClick:Re,onBeforeButtonClick:oe,onBuyerIdentityReady:xe,enableAVS:ee,...L?{cardFieldOrder:L}:{},..._e?{cardPreFormSlot:_e}:{},avsLayout:Te,country:R?.customer?.country,city:R?.customer?.city,state:R?.customer?.state,onCountryChange:A,onZipChange:m,avsCheck:!!ee,checkoutType:n?"embedded_checkout":"standard_checkout",checkoutLayout:Pe?"custom_layout":le==="buttons"?"buttons_layout":"default_layout",className:G,directPaypal:Qa(te),isSubscription:R?.mode==="subscription",session:R,dataAttachmentPending:an,dataAttachmentRequiresIdentity:qt,debug:q})},ae)}),zt]})}function Jl({sessionId:e,nonce:t,billingApiUrl:n,session:r,children:o}){return(0,I.jsx)(I.Fragment,{children:k.default.Children.map(o,i=>{if(!k.default.isValidElement(i))return i;let d=i.props,c={};return d.sessionId||(c.sessionId=e),!d.nonce&&t&&(c.nonce=t),d.billingApiUrl||(c.billingApiUrl=n),r?.customer&&(d.email||(c.email=r.customer.email),d.userId||(c.userId=r.customer.id),d.firstName||(c.firstName=r.customer.firstName),d.lastName||(c.lastName=r.customer.lastName)),Object.keys(c).length===0?i:k.default.cloneElement(i,c)})})}function Xl({onButtonClick:e,showPayPal:t,showStripe:n=!0,showApplePay:r,showGooglePay:o,theme:i,buttonsTheme:d,buttonsStyles:c,cardButtonContent:C,cardBackButtonContent:y,cardTitleContent:b}){let[P,F]=(0,k.useState)(!1),A=(0,k.useMemo)(()=>(0,ve.resolveTheme)(i),[i]),m=(0,k.useMemo)(()=>{let w=A?.buttonsLayout??(0,ve.resolveButtonsLayoutTheme)(d);return c?{...w,...c,cardButton:{...w.cardButton,...c.cardButton},cardFormContainer:{...w.cardFormContainer,...c.cardFormContainer},backButton:{...w.backButton,...c.backButton},backButtonIcon:{...w.backButtonIcon,...c.backButtonIcon},submitButton:{...w.submitButton,...c.submitButton},title:{...w.title,...c.title}}:w},[A,d,c]),S=A?.buttonsLayout?.cardButton?.borderRadius??A?.appearance.variables?.borderRadius??8,ye=w=>(0,I.jsx)("div",{style:{height:w,borderRadius:S,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}}),U=C===void 0?{boxSizing:"border-box",height:Ar,padding:"0 1rem"}:{padding:"0.9rem 1rem"};if(P){let w=m.cardInputBorder??"#e5e7eb",ce=m.cardInputBackground??"white",q=qr(y),le=qr(b);return(0,I.jsxs)("div",{style:{backgroundColor:m.cardFormContainer?.backgroundColor??"white",borderRadius:"8px",animation:"flopay-interim-expand 0.35s cubic-bezier(0.4, 0, 0.2, 1) both",overflow:"hidden",...m.cardFormContainer},children:[(0,I.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[(0,I.jsxs)("button",{type:"button",onClick:()=>F(!1),"aria-label":"Back to payment methods",style:{display:"inline-flex",alignItems:"center",gap:q?0:"0.5rem",background:"none",border:"none",color:"#4b5563",fontSize:"0.85rem",fontWeight:500,padding:0,flexShrink:0,opacity:1,cursor:"pointer",...m.backButton},children:[(0,I.jsx)("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",...m.backButtonIcon},children:(0,I.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,I.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,I.jsx)(jr,{content:y})]}),le?(0,I.jsx)("div",{style:{flex:1}}):(0,I.jsx)("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:"1.05rem",color:"#262833",paddingRight:80,...m.title},children:(0,I.jsx)(ho,{content:b})})]}),(0,I.jsx)("div",{style:{backgroundColor:ce,border:`1px solid ${w}`,borderTopLeftRadius:8,borderTopRightRadius:8,padding:12,height:45},children:(0,I.jsx)("div",{style:{width:"60%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),(0,I.jsxs)("div",{style:{display:"flex"},children:[(0,I.jsx)("div",{style:{flex:1,backgroundColor:ce,borderTop:"none",borderRight:"none",borderBottom:`1px solid ${w}`,borderLeft:`1px solid ${w}`,borderBottomLeftRadius:8,padding:12,height:45},children:(0,I.jsx)("div",{style:{width:"50%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),(0,I.jsx)("div",{style:{flex:1,backgroundColor:ce,borderTop:"none",borderRight:`1px solid ${w}`,borderBottom:`1px solid ${w}`,borderLeft:`1px solid ${w}`,borderBottomRightRadius:8,padding:12,height:45},children:(0,I.jsx)("div",{style:{width:"40%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})})]}),(0,I.jsx)("div",{style:{backgroundColor:ce,border:`1px solid ${w}`,borderRadius:8,marginTop:8,padding:12,height:45},children:(0,I.jsx)("div",{style:{width:"45%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),(0,I.jsx)("div",{style:{height:50,borderRadius:8,marginTop:16,background:"#c8c8ff",animation:"flopay-interim-pulse 1.5s ease-in-out infinite",...m.submitButton,opacity:.5}}),(0,I.jsx)("style",{children:`
|
|
40
|
+
`)}):null,Fi=xe==="apm-expanding"||xe==="apm-form"||xe==="apm-collapsing",$o=xe==="apm-expanding"?`flopay-card-enter ${xr}ms cubic-bezier(0, 0, 0.2, 1) both`:xe==="apm-collapsing"?`flopay-card-exit ${xr}ms cubic-bezier(0.4, 0, 0.2, 1) both`:void 0,jo=Ot?{...Pa,paymentMethodTypes:[Ot]}:null;if(Y==="buttons"){let s=xe==="buttons"||xe==="expanding"||xe==="apm-expanding",h=xe==="expanding"||xe==="card"||xe==="collapsing",V=Oe===void 0?{boxSizing:"border-box",height:aa,padding:"0 1rem"}:{padding:"0.9rem 1rem"},Le=xe==="expanding"||xe==="apm-expanding"?`flopay-buttons-exit ${xr}ms cubic-bezier(0.4, 0, 0.2, 1) both`:xe==="collapsing"||xe==="apm-collapsing"?`flopay-buttons-enter ${xr}ms cubic-bezier(0, 0, 0.2, 1) both`:void 0,W=xe==="expanding"?`flopay-card-enter ${xr}ms cubic-bezier(0, 0, 0.2, 1) both`:xe==="collapsing"?`flopay-card-exit ${xr}ms cubic-bezier(0.4, 0, 0.2, 1) both`:void 0;return(0,l.jsxs)("form",{onSubmit:wa,className:F,noValidate:!0,style:{position:"relative"},children:[(0,l.jsx)(qa,{}),Me&&(0,l.jsx)(Ln,{status:Me,errorMessage:g,authorized:On}),(0,l.jsxs)("div",{style:{display:"grid"},children:[(0,l.jsxs)("div",{"data-testid":"flopay-buttons-panel","aria-hidden":!s&&!Le?!0:void 0,style:{gridArea:"1 / 1",display:"flex",flexDirection:"column",gap:"0.5rem",...!s&&!Le?Bl:{},...Le?{animation:Le,pointerEvents:"none"}:{}},children:[Ai("flopay-direct-paypal-gate-debug"),Bi("flopay-stripe-gate-debug"),ao&&fe&&(0,l.jsxs)(l.Fragment,{children:[Z&&(0,l.jsx)("div",{"data-testid":"flopay-paypal-direct-retry-notice",style:{padding:"8px 10px",background:"#fef3c7",border:"1px solid #fcd34d",borderRadius:6,color:"#78350f",fontSize:13,lineHeight:1.4},children:"Please confirm your PayPal payment to complete checkout."}),(0,l.jsx)(wo,{sessionId:e,nonce:t,billingApiUrl:de,email:D.email,billingName:me||void 0,onBuyerIdentityReady:at,clientId:fe.clientId,environment:fe.environment,currency:He.toUpperCase(),isSubscription:lt,providerObjectType:_,onTokenizedBody:bn,onComplete:i,onErrorChange:he,onDecline:c,onTechnicalFailure:Nr,onButtonClick:ee,runBeforeButtonClick:Hn,isProcessing:et,onLoadStateChange:Ca,onInitializationStateChange:Sa,session:Mt,existingOrderId:Z?.orderId,debug:ue},Z?.orderId??"fresh")]}),io&&(0,l.jsx)(Ft.Elements,{stripe:Fr,options:ai,children:(0,l.jsx)(ps,{sessionId:e,nonce:t,email:D.email,billingName:me||void 0,onBuyerIdentityReady:at,billingApiUrl:de,onTokenizedBody:bn,onErrorChange:he,isProcessing:et,onButtonClick:ee,onDecline:c,onTechnicalFailure:Nr,runBeforeButtonClick:Hn,onLoadStateChange:ui,placeholderBorderRadius:kr})}),so?(0,l.jsx)(Ft.Elements,{stripe:In,options:oi,children:(0,l.jsx)(ms,{sessionId:e,nonce:t,email:D.email,billingName:me||void 0,onBuyerIdentityReady:at,billingApiUrl:de,intentKind:O>0?"payment":"setup",expressMethods:Or,onTokenizedBody:bn,onErrorChange:he,onButtonClick:ee,onDecline:c,onTechnicalFailure:Nr,runBeforeButtonClick:Hn,onLoadStateChange:mi,placeholderBorderRadius:kr})}):bi?(0,l.jsx)("div",{style:{height:aa,borderRadius:kr,background:"#e5e7eb",animation:"flopay-pulse 1.5s ease-in-out infinite"}}):null,lo&&(0,l.jsx)(ys,{sessionId:e,nonce:t,email:D.email,billingName:[D.firstName,D.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:at,billingApiUrl:de,paymentElementMethods:Lo,stripeInstance:In,paymentElementBaseOptions:Pa,onTokenizedBody:bn,onErrorChange:he,onButtonClick:ee,onDecline:c,runBeforeButtonClick:Hn,onLoadStateChange:fi,isProcessing:et,submitButtonColor:Ir,submitButtonBorderRadius:At,submitButtonStyle:v.submitButton,onExpandApm:ne,expandedApmMethod:Ot,themeId:ge,buttonAppearance:{backgroundColor:v.cardButton?.backgroundColor,borderColor:v.cardInputBorder,textColor:v.cardButton?.color,borderRadius:kr}}),Ye&&(0,l.jsx)("button",{type:"button",onClick:async()=>{et||!(await Hn("card")).proceed||(ee?.("card"),N())},disabled:et,style:{width:"100%",...V,...v.cardButton,...Ka({themeBundle:p,resolvedPrimaryColor:Ir,resolvedBorderRadius:At,submitButtonStyle:v.submitButton,explicitPrimaryColor:vn?.colorPrimary}),fontSize:v.cardButtonFontSize??"0.95rem",fontWeight:600,cursor:et?"not-allowed":"pointer",display:"flex",alignItems:"center",justifyContent:"center",gap:"0.625rem",transition:"background-color 0.15s, border-color 0.2s, box-shadow 0.2s, transform 0.1s",position:"relative",opacity:et?.6:1},onMouseEnter:Fe=>{!et&&(p||vn?.colorPrimary)&&(Fe.currentTarget.style.backgroundColor=Ys)},onMouseLeave:Fe=>{(p||vn?.colorPrimary)&&(Fe.currentTarget.style.backgroundColor=Ir)},onMouseDown:Fe=>{Fe.currentTarget.style.transform="scale(0.985)"},onMouseUp:Fe=>{Fe.currentTarget.style.transform="scale(1)"},children:(0,l.jsx)($r,{content:Oe})}),g&&xe==="buttons"&&(0,l.jsx)(Jr,{margin:"0.25rem 0",styleOverride:v.errorBanner,children:g})]}),Ye&&h&&(0,l.jsx)("div",{style:{gridArea:"1 / 1",...W?{animation:W}:{},...xe==="collapsing"?{pointerEvents:"none"}:{}},children:Mi}),U&&Fi&&Ot&&jo&&In&&(0,l.jsx)("div",{style:{gridArea:"1 / 1",...$o?{animation:$o}:{},...xe==="apm-collapsing"?{pointerEvents:"none"}:{}},children:(0,l.jsxs)("div",{style:{backgroundColor:Ia,borderRadius:xa,...yo,padding:Ta},children:[(0,l.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[(0,l.jsxs)("button",{type:"button","data-testid":"flopay-apm-back-button",onClick:re,style:{display:"inline-flex",alignItems:"center",gap:Ea?0:"0.5rem",background:"none",border:"none",cursor:"pointer",color:"#4b5563",fontSize:v.backButtonFontSize??"0.85rem",fontWeight:500,padding:0,transition:"color 0.15s",flexShrink:0,...v.backButton},"aria-label":"Back to payment methods",children:[(0,l.jsx)("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",transition:"background-color 0.15s",...v.backButtonIcon},children:(0,l.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,l.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,l.jsx)(jr,{content:Ee})]}),(0,l.jsx)("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:v.titleFontSize??"1.05rem",color:Ra,paddingRight:80,...v.title},children:`Pay with ${(0,u.getStripeMethodDisplayName)(Ot)}`})]}),(0,l.jsx)(Ft.Elements,{stripe:In,options:jo,children:(0,l.jsx)(ja,{method:Ot,sessionId:e,nonce:t,email:D.email,billingName:[D.firstName,D.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:at,billingApiUrl:de,onTokenizedBody:bn,onErrorChange:he,onDecline:c,onCancel:re,runBeforeButtonClick:Hn,onButtonClick:ee,isProcessing:et,submitButtonColor:Ir,submitButtonBorderRadius:At,submitButtonStyle:v.submitButton,errorText:g})},Ot)]})})]})]})}return Fi&&Ot&&jo&&In&&U?(0,l.jsxs)("form",{onSubmit:wa,className:F,noValidate:!0,style:{position:"relative"},children:[(0,l.jsx)(qa,{}),Me&&(0,l.jsx)(Ln,{status:Me,errorMessage:g,authorized:On}),(0,l.jsx)("div",{style:{...$o?{animation:$o}:{},...xe==="apm-collapsing"?{pointerEvents:"none"}:{}},children:(0,l.jsxs)("div",{style:{backgroundColor:Ia,borderRadius:xa,...yo,padding:Ta},children:[(0,l.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[(0,l.jsxs)("button",{type:"button","data-testid":"flopay-apm-back-button-default",onClick:re,style:{display:"inline-flex",alignItems:"center",gap:Ea?0:"0.5rem",background:"none",border:"none",cursor:"pointer",color:"#4b5563",fontSize:v.backButtonFontSize??"0.85rem",fontWeight:500,padding:0,transition:"color 0.15s",flexShrink:0,...v.backButton},"aria-label":"Back to payment methods",children:[(0,l.jsx)("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",transition:"background-color 0.15s",...v.backButtonIcon},children:(0,l.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,l.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,l.jsx)(jr,{content:Ee})]}),(0,l.jsx)("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:v.titleFontSize??"1.05rem",color:Ra,paddingRight:80,...v.title},children:`Pay with ${(0,u.getStripeMethodDisplayName)(Ot)}`})]}),(0,l.jsx)(Ft.Elements,{stripe:In,options:jo,children:(0,l.jsx)(ja,{method:Ot,sessionId:e,nonce:t,email:D.email,billingName:[D.firstName,D.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:at,billingApiUrl:de,onTokenizedBody:bn,onErrorChange:he,onDecline:c,onCancel:re,runBeforeButtonClick:Hn,onButtonClick:ee,isProcessing:et,submitButtonColor:Ir,submitButtonBorderRadius:At,submitButtonStyle:v.submitButton,errorText:g})},Ot)]})})]}):(0,l.jsxs)("form",{onSubmit:wa,className:F,noValidate:!0,style:{position:"relative"},children:[(0,l.jsx)(qa,{}),Me&&(0,l.jsx)(Ln,{status:Me,errorMessage:g,authorized:On}),(0,l.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[Ai("flopay-direct-paypal-gate-debug-default"),Bi("flopay-stripe-gate-debug-default"),ao&&fe&&(0,l.jsxs)(l.Fragment,{children:[Z&&(0,l.jsx)("div",{"data-testid":"flopay-paypal-direct-retry-notice-default",style:{padding:"8px 10px",background:"#fef3c7",border:"1px solid #fcd34d",borderRadius:6,color:"#78350f",fontSize:13,lineHeight:1.4},children:"Please confirm your PayPal payment to complete checkout."}),(0,l.jsx)(wo,{sessionId:e,nonce:t,billingApiUrl:de,email:D.email,billingName:me||void 0,onBuyerIdentityReady:at,clientId:fe.clientId,environment:fe.environment,currency:He.toUpperCase(),isSubscription:lt,providerObjectType:_,onTokenizedBody:bn,onComplete:i,onErrorChange:he,onDecline:c,onTechnicalFailure:Nr,onButtonClick:ee,runBeforeButtonClick:Hn,isProcessing:et,onLoadStateChange:Ca,onInitializationStateChange:Sa,session:Mt,existingOrderId:Z?.orderId,debug:ue},Z?.orderId??"fresh")]}),io&&(0,l.jsx)(Ft.Elements,{stripe:Fr,options:ai,children:(0,l.jsx)(ps,{sessionId:e,nonce:t,email:D.email,billingName:me||void 0,onBuyerIdentityReady:at,billingApiUrl:de,onTokenizedBody:bn,onErrorChange:he,isProcessing:et,onButtonClick:ee,onDecline:c,onTechnicalFailure:Nr,runBeforeButtonClick:Hn,onLoadStateChange:ui,placeholderBorderRadius:kr})}),so&&(0,l.jsx)(Ft.Elements,{stripe:In,options:oi,children:(0,l.jsx)(ms,{sessionId:e,nonce:t,email:D.email,billingName:me||void 0,onBuyerIdentityReady:at,billingApiUrl:de,intentKind:O>0?"payment":"setup",expressMethods:Or,onTokenizedBody:bn,onErrorChange:he,onButtonClick:ee,onDecline:c,onTechnicalFailure:Nr,runBeforeButtonClick:Hn,onLoadStateChange:mi,placeholderBorderRadius:kr})}),lo&&(0,l.jsx)(ys,{sessionId:e,nonce:t,email:D.email,billingName:[D.firstName,D.lastName].filter(Boolean).join(" ").trim()||void 0,billingApiUrl:de,paymentElementMethods:Lo,stripeInstance:In,paymentElementBaseOptions:Pa,onTokenizedBody:bn,onErrorChange:he,onButtonClick:ee,onDecline:c,runBeforeButtonClick:Hn,onLoadStateChange:fi,isProcessing:et,submitButtonColor:Ir,submitButtonBorderRadius:At,submitButtonStyle:v.submitButton,themeId:ge,onExpandApm:ne,expandedApmMethod:Ot,buttonAppearance:{backgroundColor:v.cardButton?.backgroundColor,borderColor:v.cardInputBorder,textColor:v.cardButton?.color,borderRadius:kr}})]}),Ye&&(Us||zs||qs)&&(0,l.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",margin:"0.5rem 0 0.75rem",color:"#999",fontSize:"0.85rem"},children:[(0,l.jsx)("div",{style:{flex:1,height:1,backgroundColor:"#ddd"}}),(0,l.jsx)("span",{children:"or pay with card"}),(0,l.jsx)("div",{style:{flex:1,height:1,backgroundColor:"#ddd"}})]}),Ye&&Mi]})}var I=require("react/jsx-runtime"),Ar=44,ti="flopay_checkout_saved_payment_resume",ua=new Map,ca=new Map;function Ss(e,t){t.settled&&t.consumers===0&&ua.get(e)===t&&ua.delete(e)}function jl(e,t,n){let r=ca.get(e);if(r&&(!r.sdkGeneratedIdempotencyKey||!t||r.sdkGeneratedIdempotencyKey===t))return r.attempt;let o=n(),i={attempt:o,sdkGeneratedIdempotencyKey:t};ca.set(e,i);let d=()=>{ca.get(e)===i&&ca.delete(e)};return o.then(d,d),o}function xo(e){return new Promise(t=>setTimeout(t,e))}function da(e,t,n){let r=Go({billingApiUrl:e,sdkPackage:"@flopay/react",sdkVersion:ve.SDK_VERSION,enabled:t!==!1});return r.beginCheckout(n),r}function Mo(e){e.flush().catch(()=>{}).finally(()=>e.destroy())}function Ha(e,t,n,r,o){let i=da(e,t,n);i.error({errorCode:r,stage:o,paymentMethodCategory:"unknown",...o==="session_read"?{requestCategory:"session_read"}:{}}),Mo(i)}function Vl(e){return e.type==="validation_error"||e.code==="checkout_session_not_found"||e.code==="checkout_session_expired"||e.code==="checkout_session_completed"||e.code==="session_auto_completed"}function Qa(e){let t=e?.data.paypal?.publishableKey;if(t)return{clientId:t,environment:e?.data.paypal?.environment,providerObjectType:e?.data.paypal?.providerObjectType}}function Ya(e){return!e||e.data.stripe?.publishableKey?!1:!!Qa(e)?.clientId}function pr(){return typeof window<"u"&&typeof window.sessionStorage<"u"}function Kl(){if(!pr())return null;try{let e=window.sessionStorage.getItem(ti);return e?JSON.parse(e):null}catch{return null}}function ws(e){if(pr())try{window.sessionStorage.setItem(ti,JSON.stringify(e))}catch(t){console.warn("[FloPayCheckout] Failed to persist PayPal resume state.",t)}}function Wa(){if(pr())try{window.sessionStorage.removeItem(ti)}catch(e){console.warn("[FloPayCheckout] Failed to clear PayPal resume state.",e)}}var ni=":idempotency-key";function Is(e,t){if(!pr())return null;let n=window.sessionStorage.getItem(e);if(!n)return null;try{let r=JSON.parse(n);return!r||typeof r.sid!="string"||!r.sid||"canonicalIdentity"in r&&r.canonicalIdentity!==t?null:{..."canonicalIdentity"in r?{canonicalIdentity:t}:{},sid:r.sid,nonce:typeof r.nonce=="string"?r.nonce:void 0}}catch{return{sid:n}}}function Ga(e,t,n,r){if(pr())try{window.sessionStorage.setItem(e,JSON.stringify(r?{canonicalIdentity:t,sid:n,nonce:r}:{canonicalIdentity:t,sid:n}))}catch(o){console.warn("[FloPayCheckout] Failed to persist checkout session cache.",o)}}function ei(e,t){if(pr())try{Is(e,t)&&window.sessionStorage.removeItem(e)}catch(n){console.warn("[FloPayCheckout] Failed to clear checkout session cache.",n)}}function Es(e,t){if(!pr())return null;try{let n=window.sessionStorage.getItem(e+ni);if(!n)return null;try{let r=JSON.parse(n);return typeof r=="string"?r?{idempotencyKey:r}:null:!r||typeof r.idempotencyKey!="string"||!r.idempotencyKey||"canonicalIdentity"in r&&r.canonicalIdentity!==t?null:{..."canonicalIdentity"in r?{canonicalIdentity:t}:{},idempotencyKey:r.idempotencyKey}}catch{return{idempotencyKey:n}}}catch{return null}}function Ja(e,t,n){if(pr())try{window.sessionStorage.setItem(e+ni,JSON.stringify({canonicalIdentity:t,idempotencyKey:n}))}catch(r){console.warn("[FloPayCheckout] Failed to persist checkout idempotency key.",r)}}function Xa(e,t){if(ei(e,t),!!pr())try{Es(e,t)&&window.sessionStorage.removeItem(e+ni)}catch(n){console.warn("[FloPayCheckout] Failed to clear checkout idempotency key.",n)}}function Hl(){if(typeof window>"u")return;let e=new URL(window.location.href),t=["payment_intent","payment_intent_client_secret","redirect_status"],n=!1;for(let r of t)e.searchParams.has(r)&&(e.searchParams.delete(r),n=!0);n&&window.history.replaceState(window.history.state,"",e.toString())}function ks(e){if(typeof window>"u")return;let t=new URL(window.location.href);t.searchParams.set("mode",e),window.history.replaceState(window.history.state,"",t.toString())}function Yl(e){return e?!!(e.account&&Object.keys(e.account).length>0||e.couponCodes!==void 0||e.checkoutMetadata!==void 0||e.tagsData!==void 0||e.utmMetadata!==void 0):!1}function Za(e,t){return`${e}:${t.totalAmount??""}:${t.overrideAmount??""}:${t.quantity??1}:${t.currency??""}`}function Wl(e){if(e==null)return e;let t=JSON.stringify(Object.entries(e).sort(([d],[c])=>d<c?-1:d>c?1:0)),n=1779033703,r=3144134277,o=1013904242,i=2773480762;for(let d=0;d<t.length;d++){let c=t.charCodeAt(d);n=r^Math.imul(n^c,597399067),r=o^Math.imul(r^c,2869860233),o=i^Math.imul(o^c,951274213),i=n^Math.imul(i^c,2716044179)}return n=Math.imul(o^n>>>18,597399067),r=Math.imul(i^r>>>22,2869860233),o=Math.imul(n^o>>>17,951274213),i=Math.imul(r^i>>>19,2716044179),n^=r^o^i,r^=n,o^=n,i^=n,[n,r,o,i].map(d=>(d>>>0).toString(16).padStart(8,"0")).join("")}function Ao(e,t=!1){let n=e?.account?.email?.trim().toLowerCase()??"",r={c:e?.clientId,cur:e?.currency??"",captureMethod:e?.captureMethod??"",a:{e:n,u:n?"":e?.account?.userId??"",country:e?.account?.country??""},successUrl:e?.successUrl,cancelUrl:e?.cancelUrl,p:e?.products?.map(o=>Za(`${o.type??""}:${o.code??o.providerItemId??o.providerPlanId??""}`,o)).sort(),i:e?.items?.map(o=>Za(o.code??o.providerItemId??"",o)).sort(),s:e?.subscriptions?.map(o=>Za(o.code??o.providerPlanId??"",o)).sort(),couponCodes:e?.couponCodes?[...e.couponCodes].sort():void 0,checkoutMetadata:Wl(e?.checkoutMetadata),...t?{tagsData:e?.tagsData,utmMetadata:e?.utmMetadata,tokenizedData:e?.tokenizedData,checkoutMode:e?.checkoutMode??"full"}:{}};return JSON.stringify(r)}function Gl(e,t=!1){let n=Ao(e,t),r=0;for(let o=0;o<n.length;o++)r=(r<<5)-r+n.charCodeAt(o)|0;return`flopay_session_${Math.abs(r).toString(36)}`}function Jl(e,t){if(!e?.customer||!e.products||t.checkoutMetadata!==void 0)return!1;let n=t.account.email?.trim().toLowerCase()??"",r=e.customer.email?.trim().toLowerCase()??"";if((n?r!==n:e.customer.id!==t.account.userId)||(t.account.country??"").trim().toUpperCase()!==(e.customer.country??"").trim().toUpperCase()||e.successUrl!==t.successUrl||e.cancelUrl!==t.cancelUrl||(e.captureMethod??"automatic")!==(t.captureMethod??"automatic"))return!1;let o=(0,ve.resolveSessionCurrency)(t.currency,t.items,t.subscriptions,t.products);if(!o||e.currency.toUpperCase()!==o.toUpperCase())return!1;let i=(t.products??(0,ve.foldIntoProducts)(t.items,t.subscriptions)).map(y=>({type:y.type,code:y.code??y.providerItemId??y.providerPlanId??"",quantity:y.quantity??1,totalAmount:y.totalAmount,overrideAmount:y.overrideAmount??null,currency:(y.currency??o).toUpperCase()})).sort((y,b)=>`${y.code}:${y.type??""}`.localeCompare(`${b.code}:${b.type??""}`)),d=e.products.map(y=>({type:y.type,code:y.code??"",quantity:y.quantity??1,totalAmount:y.totalAmount,overrideAmount:y.overrideAmount??null,currency:(y.currency??e.currency).toUpperCase()})).sort((y,b)=>`${y.code}:${y.type??""}`.localeCompare(`${b.code}:${b.type??""}`));if(i.length!==d.length)return!1;for(let y=0;y<i.length;y+=1){let b=i[y],P=d[y];if(b.code!==P.code||b.type!==void 0&&b.type!==P.type||b.quantity!==P.quantity||b.totalAmount!==P.totalAmount||b.overrideAmount!==P.overrideAmount||b.currency!==P.currency)return!1}let c=[...t.couponCodes??[]].sort(),C=[...e.coupons??[]].sort();return c.length===C.length&&c.every((y,b)=>y===C[b])}function pa({sessionId:e,nonce:t,createSession:n,billingApiUrl:r,telemetry:o,appearance:i,locale:d,loading:c,error:C,onComplete:y,onError:b,onInstrument:P,onDecline:F,onCountryChange:A,onZipChange:m,showPayPal:S=!0,showStripe:ye=!0,enabledPaymentMethods:U,showApplePay:w=!0,showGooglePay:ce=!0,debug:q=!1,layout:le,theme:Y,buttonsTheme:ge,buttonsStyles:qe,cardButtonContent:we,cardBackButtonContent:Et,cardTitleContent:Oe,showSecurityFooter:Ee,onButtonClick:Re,onBeforeButtonClick:oe,enableAVS:ee,cardFieldOrder:L,cardPreFormSlot:_e,avsLayout:Te,className:G,initialErrorMessage:Ie=null,children:Pe,checkoutMode:M,confirmLabel:K,renderConfirmButton:ke,onSessionCompleted:be}){let Q=(0,ve.resolveBillingApiUrl)(r),Be=(0,k.useMemo)(()=>(0,ve.resolveTheme)(Y),[Y]),st=i??Be?.appearance,vt=n?"embedded_checkout":"standard_checkout",Ke=Pe?"custom_layout":le==="buttons"?"buttons_layout":"default_layout",[te,$]=(0,k.useState)(null),[O,He]=(0,k.useState)(null),Je=(0,k.useRef)(null),[fe,lt]=(0,k.useState)(null),E=(0,k.useRef)(null),[R,De]=(0,k.useState)(null),ue=(0,k.useMemo)(()=>n?Ao(n):"",[n]),ae=n?`create:${ue}`:`session:${e??""}`,ot=R?.gateways?.stripe?"stripe":R?.gateways?.paypal?"paypal":void 0,Ne=(0,k.useRef)(new Set),Xe=(0,k.useRef)(ae),Mt=(0,k.useRef)(ae);So(()=>{Mt.current=ae,Xe.current!==ae&&(Xe.current=ae,Ne.current.clear())},[ae]);let _=(0,k.useCallback)(N=>{if(Mt.current===ae){if(Fa.has(N.name)){if(Ne.current.has(N.name))return;Ne.current.add(N.name)}rt(()=>P?.(N))}},[ae,P]),J=Gr(_,ae),ct=(0,k.useRef)(!1),Ze=(0,k.useCallback)(N=>{if(ct.current)return;let j=N.gateway||!ot?N:{...N,gateway:ot};_(j)},[_,ot]);(0,k.useEffect)(()=>{J({class:"lifecycle",name:"checkout.mount"})},[J]);let[Qt,Ht]=(0,k.useState)(e??""),B=e??Qt,ft=n?"":B,[Tt,dt]=(0,k.useState)(!0),[Rt,dn]=(0,k.useState)(null),[rn,un]=(0,k.useState)("full"),[Dt,Cn]=(0,k.useState)(!1),[Yt,gt]=(0,k.useState)(Ie),[Qe,ht]=(0,k.useState)(null),[on,nt]=(0,k.useState)(null),[Jn,pt]=(0,k.useState)(!1),[en,Pt]=(0,k.useState)(void 0),[Wt,Sn]=(0,k.useState)(""),[pn,_n]=(0,k.useState)(!1),[an,Tn]=(0,k.useState)(!1),[qt,ie]=(0,k.useState)(!1),mn=(0,k.useRef)(0),On=(0,k.useRef)(void 0),[Xn,Cr]=(0,k.useState)("loading"),[Sr,mr]=(0,k.useState)(0),Lt=(0,k.useRef)(!1),Ye=(0,k.useRef)(!1),yr=(0,k.useRef)(!1),T=(0,k.useRef)(null),ut=(0,k.useMemo)(()=>({checkoutMode:M??rn,layout:Pe?"unknown":le==="buttons"?"buttons":"embedded"}),[M,Pe,rn,le]),Vt=(0,k.useRef)(y);Vt.current=y;let wn=(0,k.useRef)(b);wn.current=b;let Ce=(0,k.useRef)(F);Ce.current=F,(0,k.useEffect)(()=>{jt(O)?.setCheckoutContext(ut),fe&&fe!==O&&jt(fe)?.setCheckoutContext(ut)},[O,fe,ut]);let sn=(0,k.useRef)(be);sn.current=be;let wr=(0,k.useCallback)(N=>{Cr(N),!(N!=="exhausted"||yr.current)&&(yr.current=!0,wn.current?.(new ve.FloPayError("PayPal is temporarily unavailable. Please try again.","api_error",{code:"paypal_init_timeout"})))},[]),Br=(0,k.useCallback)(()=>{Cr("retrying"),mr(N=>N+1)},[]);(0,k.useEffect)(()=>{Cr("loading"),mr(0),yr.current=!1},[B]),(0,k.useEffect)(()=>{console.info("[FloPay] Checkout initialized",{sdk_version:ve.SDK_VERSION,checkout_type:vt,checkout_layout:Ke,billing_api_url:Q})},[Ke,vt,Q]);let yn=(0,k.useMemo)(()=>n?Ao(n,!0):"",[n]),fr=(0,k.useMemo)(()=>Wt===yn?en:void 0,[en,Wt,yn]),Zn=(0,k.useMemo)(()=>n?Ma(n,fr):void 0,[n,fr]),zn=M??Zn?.checkoutMode??"full",Nt=(0,k.useMemo)(()=>Zn?{...Zn,checkoutMode:zn}:void 0,[Zn,zn]);(0,k.useEffect)(()=>{Pt(void 0),Sn(yn),On.current=void 0,ie(!1)},[yn]),(0,k.useEffect)(()=>{gt(Ie)},[Ie]);let Un=(0,k.useCallback)((N,j,ne)=>{rt(()=>{Ce.current?.(Kt(N,j,ne))})},[]),Qn=(0,k.useCallback)(async(N,j)=>{gt(null),nt(null),pt(!1),ht("processing");let ne=j?.sessionId??N.id,re=N.gateways?.stripe?"stripe":N.gateways?.paypal?"paypal":void 0,Me=Je.current??E.current,z=jt(Me),X=Me?null:da(Q,o,ut),f={log:g=>{z?z.log(g):X?.log(g)},error:g=>{z?z.error(g):X?.error(g)},terminal:g=>{z?z.terminal(g):X?.terminal(g)},performance:g=>{z?z.performance(g):X?.performance(g)},now:()=>z?.now()??X?.now()??0,elapsed:g=>z?.elapsed(g)??Math.max(0,(X?.now()??g)-g)},H=f.now(),Z=!!(j?.initialAutoProcessingError||j?.initialAutoProcessingPending),bt=!1,Ct,de=()=>{bt||(bt=!0,Z=!0,Ct=f.now(),f.log({name:"checkout.recovery.started",stage:"recovery",paymentMethodCategory:"saved"}),f.log({name:"operation.recovery.started",stage:"recovery",paymentMethodCategory:"saved"}))},Ae=!1,Gt=()=>{Ae||(Ae=!0,f.log({name:"payment.processing.completed",stage:"processing",paymentMethodCategory:"saved"}),f.performance({stage:"processing",durationMs:f.elapsed(H),durationMode:"machine",paymentMethodCategory:"saved"}),Ct!==void 0&&f.performance({stage:"recovery",durationMs:f.elapsed(Ct),durationMode:"machine",paymentMethodCategory:"saved"}))};f.log({name:"payment.method.selected",stage:"processing",paymentMethodCategory:"saved"}),ct.current=!0;try{f.log({name:"payment.processing.started",stage:"processing",paymentMethodCategory:"saved"})}finally{ct.current=!1}J({class:"lifecycle",name:"payment.processing.started",provider:re}),Z&&de();let at;try{let g=ts(j?.initialAutoProcessingError),p;if(g)de(),g.type==="paypal_redirect_required"&&T.current?.publishableKey&&ws({sessionId:ne,publishableKey:T.current.publishableKey,paypalPublishableKey:T.current.paypalPublishableKey}),p=await ea(g,{flopay:Je.current,paypalFlopay:E.current,attempt3DS:j?.attempt3DS,billingApiUrl:Q,sessionId:ne,session:N,telemetry:!1}),g.type==="paypal_redirect_required"&&Wa();else if(j?.initialAutoProcessingPending){let pe=(await new Mr.PaymentAPI(Q,{telemetry:!1}).waitForCheckoutSessionCompletion(j.initialAutoProcessingPending.sessionId,{initialDelayMs:j.initialAutoProcessingPending.retryAfterMs})).data.session;if(!Kr(pe))throw Ho(pe);p=Rr(pe,ne)}else{if(j?.initialAutoProcessingError)throw Pr(j.initialAutoProcessingError,"Automatic payment failed. Please try again.",{checkoutMethod:j.initialAutoProcessingError.checkoutMethod});if(j?.fromCreateSession)return j?.fallbackToFull&&(un("full"),ks("full")),!1;{let v=await Qr({billingApiUrl:Q,sessionId:ne,session:N,telemetry:!1});v.type==="success"?p=v.result:(de(),v.type==="paypal_redirect_required"&&T.current?.publishableKey&&ws({sessionId:ne,publishableKey:T.current.publishableKey,paypalPublishableKey:T.current.paypalPublishableKey}),p=await ea(v,{flopay:Je.current,paypalFlopay:E.current,attempt3DS:j?.attempt3DS,billingApiUrl:Q,sessionId:ne,session:N,telemetry:!1}),v.type==="paypal_redirect_required"&&Wa())}}ne&&Xr(ne),Gt(),Z&&(f.log({name:"checkout.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"}),f.log({name:"operation.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"})),f.terminal({outcome:p.status==="authorized"?"payment_authorized":"payment_succeeded",paymentMethodCategory:"saved"}),pt(p.status==="authorized"),ht("success"),await xo(1200),at=()=>Vt.current?.(p)}catch(g){let p=_o(g),v=p.checkoutMethod??Ro;gt(p.message),nt(p.message),pt(!1),j?.fallbackToFull&&(f.log({name:"operation.fallback",stage:"recovery",paymentMethodCategory:"saved"}),un("full"),ks("full")),Gt();let Se=p.statusCode!==void 0?(0,ve.telemetryStatusClass)(p.statusCode,"unknown"):void 0,pe=Se==="4xx"?{requestCategory:"process_payment",statusClass:Se}:{},We=Se===void 0||Se==="4xx";if(We&&(p.telemetryOutcome==="payment_declined"||!!(p.declineCode||p.code?.toLowerCase().includes("declin"))))f.terminal({outcome:"payment_declined",paymentMethodCategory:"saved",...pe});else if(We&&(p.telemetryOutcome==="validation_rejected"||p.type==="validation_error"))f.terminal({outcome:"validation_rejected",paymentMethodCategory:"saved",...pe});else{let D=(0,ve.classifyTelemetryFailure)(g,Z?"RECOVERY_FAILED":"PAYMENT_PROCESSING_FAILED","unknown"),me=p.telemetryRequestCategory??"process_payment";ct.current=!0;try{f.error({...D,...p.telemetryFailureCategory?{failureCategory:p.telemetryFailureCategory}:{},stage:Z?"recovery":"processing",paymentMethodCategory:"saved",requestCategory:me})}finally{ct.current=!1}J({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:me,provider:re})}return rt(()=>wn.current?.(p)),Un(v,p,{code:p.code,declineCode:p.declineCode}),ht("error"),await Promise.allSettled([xo(1500),j?.ensureProvidersReady?j.ensureProvidersReady():Promise.resolve()]),Z&&(f.log({name:"checkout.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"}),f.log({name:"operation.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"})),!1}finally{Gt(),X&&Mo(X),ht(null),nt(null)}return rt(at),!0},[Un,J,Q,o,ut]);(0,k.useEffect)(()=>{if(typeof window>"u"||Ye.current)return;let N=new URLSearchParams(window.location.search),j=N.get("payment_intent_client_secret");if(!j)return;let ne=Kl();ne&&(Ye.current=!0,(async()=>{let re,Me=0;gt(null),nt(null),ht("processing"),Cn(!0);try{if(N.get("redirect_status")==="failed")throw Object.assign(new ve.FloPayError("PayPal payment was declined. Please try again.","api_error",{declineCode:"paypal_redirect_failed"}),{checkoutMethod:"paypal"});let{flopay:z,paypalFlopay:X}=await na({publishableKey:ne.publishableKey,paypalPublishableKey:ne.paypalPublishableKey,billingApiUrl:Q,locale:d,telemetry:o});re=jt(X??z),Me=re?.now()??0,re?.log({name:"provider.redirect.resumed",stage:"redirect_resume",provider:"paypal",paymentMethodCategory:"paypal"}),re?.log({name:"operation.recovery.started",stage:"recovery",provider:"paypal",paymentMethodCategory:"paypal"});let f=(X??z)?.getRawProvider();if(!f)throw Object.assign(new ve.FloPayError("PayPal is not available.","api_error"),{checkoutMethod:"paypal"});let{paymentIntent:H,error:Z}=await f.retrievePaymentIntent(j);if(Z)throw Object.assign(new ve.FloPayError(Z.message??"Failed to retrieve PayPal payment status.","api_error",{code:Z.code}),{checkoutMethod:"paypal"});let bt=Ui(H?.status);if(!H||bt==="failed")throw Object.assign(new ve.FloPayError("PayPal payment was not completed. Please try again.","api_error"),{checkoutMethod:"paypal"});let Ct=typeof H.payment_method=="string"?H.payment_method:H.payment_method?.id,de=bt;if(ne.sessionId){let at=(await new Mr.PaymentAPI(Q,{telemetry:!1}).getUnifiedCheckoutSession(ne.sessionId)).data.session;if(at&&at.status!=="complete"){let g=await Qr({billingApiUrl:Q,sessionId:ne.sessionId,session:at,telemetry:!1,tokenizedData:{id:Ct??H.id,type:"card",threeDSecureActionResultTokenId:H.id,isPaypal:!0}});if(g.type!=="success")throw Object.assign(new ve.FloPayError("Failed to finalize PayPal payment.","api_error"),{checkoutMethod:"paypal"});de=g.result.status}}ne.sessionId&&Xr(ne.sessionId),re?.log({name:"operation.recovery.completed",stage:"recovery",provider:"paypal",paymentMethodCategory:"paypal"}),re?.performance({stage:"redirect_resume",durationMs:re.elapsed(Me),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"}),re?.terminal({outcome:"payment_succeeded",provider:"paypal",paymentMethodCategory:"paypal"}),ht("success"),await xo(1200),rt(()=>Vt.current?.({status:de,paymentIntentId:H.id,paymentMethodId:Ct,checkoutMethod:"paypal"}))}catch(z){let X=_o(z),f=X.checkoutMethod??"paypal",H=!!(X.declineCode||X.code?.toLowerCase().includes("declin"));if(re)re.performance({stage:"redirect_resume",durationMs:re.elapsed(Me),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"}),H?re.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal"}):re.error({errorCode:"REDIRECT_RESUME_FAILED",stage:"redirect_resume",provider:"paypal",paymentMethodCategory:"paypal"});else if(H){let Z=da(Q,o,ut);Z.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal"}),Mo(Z)}else Ha(Q,o,ut,"REDIRECT_RESUME_FAILED","redirect_resume");gt(X.message),nt(X.message),rt(()=>wn.current?.(X)),Un(f,X,{code:X.code,declineCode:X.declineCode}),ht("error"),await xo(1500)}finally{Wa(),Hl(),ht(null),nt(null),Cn(!1)}})())},[Un,d,Q,o,ut]);let fn=(0,k.useRef)(null),tn=(0,k.useMemo)(()=>Nt?Ao(Nt):"",[Nt]),qn=(0,k.useRef)(Nt);qn.current=Nt,(0,k.useEffect)(()=>{Ht(e??"")},[e]),(0,k.useEffect)(()=>{Lt.current=!1,gt(Ie),nt(null),pt(!1),ht(null)},[tn,Ie,e]);async function $n(N,j,ne){let re=da(Q,o,ut),Me=new Mr.PaymentAPI(Q,{telemetry:!1}),z=!1;try{let X=N.idempotencyKey!==void 0?(0,ve.resolveIdempotencyKey)(N.idempotencyKey):void 0,f=Is(j,ne),H=Es(j,ne);f?.canonicalIdentity===ne&&H&&H.canonicalIdentity===void 0&&(Ja(j,ne,H.idempotencyKey),H={...H,canonicalIdentity:ne});let Z=X??(H?.canonicalIdentity===ne?H.idempotencyKey:void 0),bt,Ct=!1;re.log({name:f?"operation.cache.hit":"operation.cache.miss",stage:"session_create",requestCategory:"session_create"});let de=f?.sid??null,Ae=null,Gt,at,g=!1;if(de)try{Ae=await Me.getUnifiedCheckoutSession(de,f?.nonce),f&&f.canonicalIdentity===void 0&&(Jl(Ae.data.session,N)?(Ga(j,ne,de,f.nonce??Ae.data.session?.clientSecret),H&&H.canonicalIdentity===void 0&&(Ja(j,ne,H.idempotencyKey),Z??(Z=H.idempotencyKey))):(Xa(j,ne),H=null,Z=X,de=null,Ae=null));let v=Ae?.data.session?.status,Se=Ae?.data.session,pe=Se?.clientSecret||f?.nonce;if(de&&Se?.buyerIdentified===!1&&pe&&(at=Vr(Me,de,pe,N.account)),de&&Ae&&v==="complete"){if(La(de))return{sid:de,result:Ae};Xa(j,ne),de=null,Ae=null,Ct=!0}}catch{re.log({name:"operation.fallback",stage:"session_read",requestCategory:"session_read"}),f?.canonicalIdentity===void 0?(Xa(j,ne),Z=X):ei(j,ne),de=null}if(!de){!X&&(Ct||!Z)&&(Z=(0,ve.resolveIdempotencyKey)(),bt=Z),Z&&Ja(j,ne,Z);let v=re.now(),Se=0;re.log({name:"session.create.started",stage:"session_create",requestCategory:"session_create"});let pe={...N,idempotencyKey:Z,avsCheck:!!ee,avsConfig:typeof ee=="object"?ee:void 0,checkoutType:"embedded_checkout",checkoutLayout:Pe?"custom_layout":le==="buttons"?"buttons_layout":"default_layout"};Object.defineProperty(pe,Mr.SESSION_CREATE_TELEMETRY,{configurable:!1,enumerable:!1,value:{onAttempt:se=>{Se=Math.max(Se,se)}}});let We=()=>{re.log({name:"session.request.completed",stage:"session_create",requestCategory:"session_create",statusClass:"2xx"}),re.performance({stage:"session_create",durationMs:re.now()-v,durationMode:"machine",requestCategory:"session_create",attempt:Se,statusClass:"2xx"})},et=se=>{let D=(0,ve.classifyTelemetryFailure)(se,"CHECKOUT_SESSION_CREATE_FAILED","unknown");re.performance({stage:"session_create",durationMs:re.now()-v,durationMode:"machine",requestCategory:"session_create",attempt:Se,statusClass:D.statusClass}),se instanceof ve.FloPayError&&se.type==="validation_error"?re.terminal({outcome:"validation_rejected",stage:"session_create",paymentMethodCategory:"unknown"}):D.statusClass==="4xx"?re.terminal({outcome:"validation_rejected",stage:"session_create",paymentMethodCategory:"unknown",requestCategory:"session_create",statusClass:"4xx"}):(re.error({...D,stage:"session_create",paymentMethodCategory:"unknown",requestCategory:"session_create"}),J({class:"technical_error",errorCode:"CHECKOUT_SESSION_CREATE_FAILED",requestCategory:"session_create"}))};try{if((0,ve.isDetachedSessionEligible)(pe)){let se=await Me.createDetachedSession(pe);se.claimed.catch(()=>{}),Ae=se.shell,de=se.sessionId,at=se.claim,Gt=se.claimed.then(D=>{let me=D.data.session?.id??se.sessionId;return me&&Ga(j,ne,me,D.data.session?.clientSecret??se.nonce),We(),D},D=>{throw ei(j,ne),et(D),D}).finally(()=>Mo(re)),Gt.catch(()=>{}),z=!0,re.log({name:"session.shell.ready",stage:"session_shell",requestCategory:"session_create",paymentMethodCategory:"card",statusClass:"2xx"}),re.performance({stage:"session_shell",durationMs:re.now()-v,durationMode:"machine",requestCategory:"session_create",attempt:Se,statusClass:"2xx",paymentMethodCategory:"card"})}else Ae=await Me.createAndFetchSession(pe),We()}catch(se){throw et(se),se}de=Ae.data.session?.id??de??"",de&&!Gt&&Ga(j,ne,de,Ae.data.session?.clientSecret)}let p=Ae?.data.session;return!at&&de&&p?.buyerIdentified===!1&&p.clientSecret&&(at=Vr(Me,de,p.clientSecret,N.account)),{sid:de??"",result:Ae,sdkGeneratedIdempotencyKey:bt,...Gt?{claimed:Gt}:{},...at?{claim:at}:{},...g?{claimRequiresIdentity:!0}:{}}}finally{z||Mo(re)}}let mt=(0,k.useRef)($n);So(()=>{mt.current=$n},[$n]);let gn=(0,k.useCallback)(async(N,j)=>{let ne=qn.current;if(!ne)throw new ve.FloPayError("createSession is required to bootstrap checkout.","validation_error");let re=Ma(ne,N),Me=Ao(re),z=Gl(re),X=ua.get(Me);if(!X){let Z={canonicalIdentity:Me,promise:mt.current(re,z,Me),consumers:0,settled:!1};X=Z,ua.set(Me,Z);let bt=()=>{Z.settled=!0,Ss(Me,Z)};Z.promise.then(bt,bt)}X.consumers+=1;let f=!1,H=()=>{f||(f=!0,X.consumers-=1,Ss(Me,X))};j?.(H);try{let Z=await X.promise;fn.current=Me,N&&(Sn(yn),Pt(Se=>Ni(Se,N)));let{sid:bt,result:Ct,claimed:de,claim:Ae,claimRequiresIdentity:Gt}=Z;if(On.current=Ae,ie(Gt===!0),$(Ct),Ct.data.session&&De(Ct.data.session),bt&&Ht(bt),de){mn.current+=1;let Se=mn.current;Tn(!0),de.then(pe=>{mn.current===Se&&($(pe),pe.data.session&&De(pe.data.session),Tn(!1),ie(!1))},pe=>{mn.current===Se&&(Tn(!1),ie(!1),dn(pe instanceof ve.FloPayError?pe:new ve.FloPayError(pe instanceof Error?pe.message:"Failed to create session","api_error")))})}else mn.current+=1,Tn(!1),ie(!1);let{publishableKey:at,paypalPublishableKey:g}=ta(Ct),{flopay:p,paypalFlopay:v}=await na({publishableKey:at,paypalPublishableKey:g,billingApiUrl:Q,locale:d,telemetry:o});return Je.current=p,He(p),E.current=v,lt(v),dt(!1),Z}catch(Z){throw fn.current===Me&&(fn.current=null),Z}finally{j||H()}},[yn,d,Q,o]),hn=(0,k.useRef)(Qn);hn.current=Qn;let jn=(0,k.useRef)(gn);jn.current=gn;let xn=(0,k.useCallback)(async N=>{if(!Yl(N)||pn)return{sessionId:Qt,session:R};_n(!0);try{let j=await gn(N);return{sessionId:j.sid,session:j.result.data.session??null}}finally{_n(!1)}},[gn,pn,Qt,R]),xe=(0,k.useCallback)(async N=>{let j=On.current;if(!j)return;let ne=mn.current,re=await j(N);mn.current===ne&&($(re),re.data.session&&De(re.data.session))},[]);(0,k.useEffect)(()=>{let N=!1,j;if(dn(null),tn){let Me=qn.current;return un(zn),dt(!1),fn.current===tn?()=>{N=!0}:(De(Oi(Me,M)),(async()=>{let z=typeof window<"u"&&new URLSearchParams(window.location.search).has("payment_intent"),X=zn==="auto"&&!Lt.current&&!z;X&&(gt(null),nt(null),ht("processing"));try{let f=await jn.current(void 0,Ct=>{j=Ct}),H=f.result.data.session??null;T.current=ta(f.result);let Z=Ya(f.result),bt=La(f.sid||H?.id);if(!N&&X&&H&&!Z&&!bt){Lt.current=!0,await jl(tn,f.sdkGeneratedIdempotencyKey,()=>hn.current(H,{attempt3DS:!0,fallbackToFull:!0,fromCreateSession:!0,initialAutoProcessingError:f.result.autoProcessingError,initialAutoProcessingPending:f.result.autoProcessingPending,autoProcessingAttempted:f.result.autoProcessingAttempted,sessionId:f.sid||H.id}));return}!N&&X&&((Z||bt)&&(Lt.current=!0),ht(null),nt(null))}catch(f){if(N)return;let H=f instanceof ve.FloPayError||typeof f=="object"&&f!==null&&"code"in f?f.code:void 0;if(X&&H==="session_auto_completed"){Lt.current=!0,ht("success"),await xo(1200),N||(rt(()=>{Vt.current?.({status:"succeeded"})}),ht(null),nt(null));return}X&&(ht(null),nt(null));let Z=f instanceof ve.FloPayError?f:new ve.FloPayError(f instanceof Error?f.message:"Failed to create session","api_error");dn(Z)}finally{j?.(),j=void 0}})(),()=>{N=!0,j?.()})}dt(!0);async function ne(){let Me=!1;try{let z=new Mr.PaymentAPI(Q,{telemetry:!1}),X=await z.getUnifiedCheckoutSession(B,t);if(N)return;$(X);let f=X.data.session??null;if(De(f),!f)throw new ve.FloPayError("No session data returned","api_error");let H=f.checkoutMode;if(H==="setup")throw new ve.FloPayError("This is a card setup session. Use FloPayCardSetup instead of FloPayCheckout.","validation_error",{code:"InvalidCardSetupSurface",param:"sessionId"});if(f.status==="authorized"){dt(!1),rt(()=>{Vt.current?.(Rr(f,B)),sn.current?.(f.successUrl??"")});return}if(f.status==="complete"){dt(!1),rt(()=>{sn.current?.(f.successUrl??"")});return}if(f.status==="expired")throw Ko(f);Me=!0;let Z=M??H??"full";un(Z),mn.current+=1;let bt=f.clientSecret||t;On.current=f.buyerIdentified===!1&&bt?Vr(z,B,bt,{...f.customer?.id?{userId:f.customer.id}:{}}):void 0,Tn(!1),ie(!1);let Ct=typeof window<"u"&&new URLSearchParams(window.location.search).has("payment_intent"),de=Ya(X);if(Z==="auto"&&!Lt.current&&!Ct&&!de){Lt.current=!0;let Ae=re(X);try{if(await hn.current(f,{attempt3DS:!0,fallbackToFull:!0,ensureProvidersReady:()=>Ae,sessionId:B||f.id}),N)return;await Ae,N||dt(!1);return}catch{if(N)return;await Ae,N||dt(!1);return}}await re(X),N||dt(!1)}catch(z){if(N)return;Me&&J({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED"}),z instanceof ve.FloPayError?!Me&&!Vl(z)&&Ha(Q,o,ut,"NETWORK_REQUEST_FAILED","session_read"):Ha(Q,o,ut,"INTERNAL_SDK_ERROR","checkout_mount");let X=z instanceof ve.FloPayError?z:new ve.FloPayError(z instanceof Error?z.message:"Failed to initialize checkout","api_error");dn(X),dt(!1)}}async function re(Me){let{publishableKey:z,paypalPublishableKey:X}=ta(Me);T.current={publishableKey:z,paypalPublishableKey:X};let{flopay:f,paypalFlopay:H}=await na({publishableKey:z,paypalPublishableKey:X,billingApiUrl:Q,locale:d,telemetry:o});Je.current=f,He(f),E.current=H,lt(H)}return ne(),()=>{N=!0}},[M,tn,zn,ft,t]);let nn=(0,k.useCallback)(async()=>{if(!(Dt||!R)){Cn(!0),gt(null);try{await Qn(R,{attempt3DS:!0,fallbackToFull:!0,sessionId:B||R.id})}finally{Cn(!1)}}},[B,Dt,Qn,R]),Ot=Qa(te),gr=Ya(te),Vn=(0,k.useMemo)(()=>{if(!(!te||!R||!te.data.stripe?.publishableKey))return{billingApiUrl:Q}},[te,R,Q]),hr=!!(n&&!Pe&&le==="buttons"&&oe&&zn==="full"),kn=(0,k.useMemo)(()=>({session:R,loading:Tt,error:Rt,checkoutMode:rn,inlineSessionDraft:Nt,applyInlineSessionPatch:hr?xn:void 0,inlineSessionPatchProcessing:pn,claimPending:an,claimRequiresIdentity:qt,claimBuyerIdentity:xe}),[R,Tt,Rt,rn,Nt,hr,xn,pn,an,qt,xe]),Mn=!!n&&le==="buttons"&&!gr&&(!O||!Vn),zt=Qe?(0,I.jsx)(Ln,{status:Qe,errorMessage:on,authorized:Jn}):null;if(Tt){if(c)return(0,I.jsxs)(I.Fragment,{children:[c,zt]});if(le==="buttons"){let N=Be?.buttonsLayout?.cardButton?.borderRadius??Be?.appearance.variables?.borderRadius??8,j=ne=>(0,I.jsx)("div",{style:{height:ne,borderRadius:N,background:"#e5e7eb",animation:"flopay-loading-pulse 1.5s ease-in-out infinite"}});return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[S&&j(Ar),ye&&(w||ce)&&j(Ar),ye&&j(Ar),(0,I.jsx)("style",{children:"@keyframes flopay-loading-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }"})]}),zt]})}return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)("div",{style:{display:"flex",justifyContent:"center",padding:32},children:[(0,I.jsx)("div",{style:{width:24,height:24,border:"2px solid #e5e7eb",borderTopColor:"#6b7280",borderRadius:"50%",animation:"spin 0.6s linear infinite"}}),(0,I.jsx)("style",{children:"@keyframes spin { to { transform: rotate(360deg); } }"})]}),zt]})}return Rt?C?(0,I.jsx)(Yn.Provider,{value:kn,children:C(Rt)}):(0,I.jsx)(Yn.Provider,{value:kn,children:(0,I.jsx)("div",{role:"alert","data-testid":"flopay-load-error",style:{padding:24,textAlign:"center",color:"#dc2626",fontSize:14},children:Rt.message})}):Mn?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(Yn.Provider,{value:kn,children:(0,I.jsx)(Zl,{onButtonClick:Re,showPayPal:S,showStripe:ye,showApplePay:w,showGooglePay:ce,theme:Y,buttonsTheme:ge,buttonsStyles:qe,cardButtonContent:we,cardBackButtonContent:Et,cardTitleContent:Oe})}),zt]}):gr&&R&&Ot?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(Yn.Provider,{value:kn,children:(0,I.jsxs)("div",{className:G,style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[Yt&&(0,I.jsx)(Jr,{icon:!1,children:Yt}),Xn==="retrying"&&(0,I.jsx)("div",{role:"status","aria-live":"polite",children:"PayPal is temporarily unavailable. Retrying\u2026"}),Xn==="exhausted"&&(0,I.jsxs)("div",{role:"alert",children:[(0,I.jsx)("div",{children:"PayPal is temporarily unavailable. Please try again."}),(0,I.jsx)("button",{type:"button",onClick:Br,children:"Retry PayPal"})]}),an?c??(0,I.jsx)("div",{role:"status","data-testid":"flopay-paypal-catalog-loading","aria-label":"Preparing PayPal",style:{height:Ar,borderRadius:8,background:"#e5e7eb",animation:"flopay-loading-pulse 1.5s ease-in-out infinite"},children:(0,I.jsx)("style",{children:"@keyframes flopay-loading-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }"})}):Xn!=="exhausted"?(0,I.jsx)("div",{"aria-hidden":Xn==="retrying"?!0:void 0,style:Xn==="retrying"?{position:"relative",height:0,opacity:0,pointerEvents:"none"}:void 0,children:(0,I.jsx)(Zi,{sessionId:B,nonce:R.clientSecret||void 0,billingApiUrl:Q,email:R.customer?.email||Nt?.account?.email,billingName:[R.customer?.firstName,R.customer?.lastName].filter(Boolean).join(" ")||[Nt?.account?.firstName,Nt?.account?.lastName].filter(Boolean).join(" ")||void 0,onBuyerIdentityReady:xe,clientId:Ot.clientId,environment:Ot.environment,currency:(R.currency??"usd").toUpperCase(),isSubscription:R.mode==="subscription",providerObjectType:Ot.providerObjectType,onComplete:y,onErrorChange:gt,onDecline:F,onButtonClick:Re,onInitializationStateChange:wr,allowAutomaticRetry:Sr===0,session:R,telemetry:o,telemetryContext:ut,onInstrument:Ze,debug:q},`${ae}:paypal-init-${Sr}`)}):null]})}),zt]}):!O||!Vn?(0,I.jsx)(I.Fragment,{children:zt}):rn==="confirm"?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(Yn.Provider,{value:kn,children:(0,I.jsx)(Io,{flopay:O,paypalFlopay:fe,options:Vn,onInstrument:Ze,children:(0,I.jsxs)("div",{className:G,children:[Yt&&(0,I.jsx)("div",{style:{color:"#dc2626",fontSize:"0.875rem",marginBottom:"0.75rem",textAlign:"center"},children:Yt}),ke?ke({onConfirm:nn,isProcessing:Dt}):(0,I.jsx)("button",{type:"button",onClick:nn,disabled:Dt,style:{width:"100%",padding:"0.875rem",backgroundColor:"#4A49FF",color:"white",border:"none",borderRadius:"8px",fontSize:"1rem",fontWeight:600,cursor:Dt?"not-allowed":"pointer",opacity:Dt?.6:1},children:Dt?"Processing...":K??"Confirm Purchase"})]})},ae)}),zt]}):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(Yn.Provider,{value:kn,children:(0,I.jsx)(Io,{flopay:O,paypalFlopay:fe,options:Vn,onInstrument:Ze,children:Pe?(0,I.jsxs)(I.Fragment,{children:[Yt&&(0,I.jsx)("div",{style:{padding:"0.75rem 1rem",marginBottom:"0.75rem",backgroundColor:"#FEF3C7",border:"1px solid #F59E0B",borderRadius:"8px",color:"#92400E",fontSize:"0.875rem"},children:Yt}),(0,I.jsx)(Xl,{sessionId:B,nonce:R?.clientSecret||void 0,billingApiUrl:Q,session:R,children:Pe})]}):(0,I.jsx)(la,{sessionId:B,nonce:R?.clientSecret||void 0,email:R?.customer?.email||Nt?.account?.email,userId:R?.customer?.id||Nt?.account?.userId,firstName:R?.customer?.firstName||Nt?.account?.firstName,lastName:R?.customer?.lastName||Nt?.account?.lastName,totalAmount:R?Math.round((0,ve.buildCheckoutDisplayData)(R).total*100):0,currency:R?.currency?.toLowerCase()??"usd",onComplete:y,onError:b,onDecline:F,error:Yt,onErrorChange:gt,showPayPal:S,showStripe:ye,enabledPaymentMethods:U??te?.data.stripe?.enabledPaymentMethods,enabledPaymentMethodCountries:te?.data.stripe?.enabledPaymentMethodCountries,showApplePay:w,showGooglePay:ce,layout:le,theme:Y,buttonsTheme:ge,buttonsStyles:qe,appearance:st,cardButtonContent:we,cardBackButtonContent:Et,cardTitleContent:Oe,onButtonClick:Re,onBeforeButtonClick:oe,onBuyerIdentityReady:xe,enableAVS:ee,...L?{cardFieldOrder:L}:{},..._e?{cardPreFormSlot:_e}:{},avsLayout:Te,country:R?.customer?.country,city:R?.customer?.city,state:R?.customer?.state,onCountryChange:A,onZipChange:m,avsCheck:!!ee,checkoutType:n?"embedded_checkout":"standard_checkout",checkoutLayout:Pe?"custom_layout":le==="buttons"?"buttons_layout":"default_layout",className:G,directPaypal:Qa(te),isSubscription:R?.mode==="subscription",session:R,dataAttachmentPending:an,dataAttachmentRequiresIdentity:qt,debug:q})},ae)}),zt]})}function Xl({sessionId:e,nonce:t,billingApiUrl:n,session:r,children:o}){return(0,I.jsx)(I.Fragment,{children:k.default.Children.map(o,i=>{if(!k.default.isValidElement(i))return i;let d=i.props,c={};return d.sessionId||(c.sessionId=e),!d.nonce&&t&&(c.nonce=t),d.billingApiUrl||(c.billingApiUrl=n),r?.customer&&(d.email||(c.email=r.customer.email),d.userId||(c.userId=r.customer.id),d.firstName||(c.firstName=r.customer.firstName),d.lastName||(c.lastName=r.customer.lastName)),Object.keys(c).length===0?i:k.default.cloneElement(i,c)})})}function Zl({onButtonClick:e,showPayPal:t,showStripe:n=!0,showApplePay:r,showGooglePay:o,theme:i,buttonsTheme:d,buttonsStyles:c,cardButtonContent:C,cardBackButtonContent:y,cardTitleContent:b}){let[P,F]=(0,k.useState)(!1),A=(0,k.useMemo)(()=>(0,ve.resolveTheme)(i),[i]),m=(0,k.useMemo)(()=>{let w=A?.buttonsLayout??(0,ve.resolveButtonsLayoutTheme)(d);return c?{...w,...c,cardButton:{...w.cardButton,...c.cardButton},cardFormContainer:{...w.cardFormContainer,...c.cardFormContainer},backButton:{...w.backButton,...c.backButton},backButtonIcon:{...w.backButtonIcon,...c.backButtonIcon},submitButton:{...w.submitButton,...c.submitButton},title:{...w.title,...c.title}}:w},[A,d,c]),S=A?.buttonsLayout?.cardButton?.borderRadius??A?.appearance.variables?.borderRadius??8,ye=w=>(0,I.jsx)("div",{style:{height:w,borderRadius:S,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}}),U=C===void 0?{boxSizing:"border-box",height:Ar,padding:"0 1rem"}:{padding:"0.9rem 1rem"};if(P){let w=m.cardInputBorder??"#e5e7eb",ce=m.cardInputBackground??"white",q=qr(y),le=qr(b);return(0,I.jsxs)("div",{style:{backgroundColor:m.cardFormContainer?.backgroundColor??"white",borderRadius:"8px",animation:"flopay-interim-expand 0.35s cubic-bezier(0.4, 0, 0.2, 1) both",overflow:"hidden",...m.cardFormContainer},children:[(0,I.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[(0,I.jsxs)("button",{type:"button",onClick:()=>F(!1),"aria-label":"Back to payment methods",style:{display:"inline-flex",alignItems:"center",gap:q?0:"0.5rem",background:"none",border:"none",color:"#4b5563",fontSize:"0.85rem",fontWeight:500,padding:0,flexShrink:0,opacity:1,cursor:"pointer",...m.backButton},children:[(0,I.jsx)("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",...m.backButtonIcon},children:(0,I.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,I.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,I.jsx)(jr,{content:y})]}),le?(0,I.jsx)("div",{style:{flex:1}}):(0,I.jsx)("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:"1.05rem",color:"#262833",paddingRight:80,...m.title},children:(0,I.jsx)(ho,{content:b})})]}),(0,I.jsx)("div",{style:{backgroundColor:ce,border:`1px solid ${w}`,borderTopLeftRadius:8,borderTopRightRadius:8,padding:12,height:45},children:(0,I.jsx)("div",{style:{width:"60%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),(0,I.jsxs)("div",{style:{display:"flex"},children:[(0,I.jsx)("div",{style:{flex:1,backgroundColor:ce,borderTop:"none",borderRight:"none",borderBottom:`1px solid ${w}`,borderLeft:`1px solid ${w}`,borderBottomLeftRadius:8,padding:12,height:45},children:(0,I.jsx)("div",{style:{width:"50%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),(0,I.jsx)("div",{style:{flex:1,backgroundColor:ce,borderTop:"none",borderRight:`1px solid ${w}`,borderBottom:`1px solid ${w}`,borderLeft:`1px solid ${w}`,borderBottomRightRadius:8,padding:12,height:45},children:(0,I.jsx)("div",{style:{width:"40%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})})]}),(0,I.jsx)("div",{style:{backgroundColor:ce,border:`1px solid ${w}`,borderRadius:8,marginTop:8,padding:12,height:45},children:(0,I.jsx)("div",{style:{width:"45%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),(0,I.jsx)("div",{style:{height:50,borderRadius:8,marginTop:16,background:"#c8c8ff",animation:"flopay-interim-pulse 1.5s ease-in-out infinite",...m.submitButton,opacity:.5}}),(0,I.jsx)("style",{children:`
|
|
41
41
|
@keyframes flopay-interim-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }
|
|
42
42
|
@keyframes flopay-interim-expand {
|
|
43
43
|
0% { opacity: 0; max-height: 0; transform: translateY(-12px); }
|
|
44
44
|
40% { opacity: 1; }
|
|
45
45
|
100% { opacity: 1; max-height: 600px; transform: translateY(0); }
|
|
46
46
|
}
|
|
47
|
-
`})]})}return(0,I.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[t&&ye(Ar),n&&(r||o)&&ye(Ar),n&&(0,I.jsx)("button",{type:"button",onClick:()=>{e?.("card"),F(!0)},style:{width:"100%",...U,backgroundColor:"white",color:"#262833",border:"1px solid #d1d5db",borderRadius:"8px",fontSize:m.cardButtonFontSize??"0.95rem",fontWeight:600,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",gap:"0.625rem",boxShadow:"0 1px 2px rgba(0,0,0,0.04)",transition:"transform 0.1s",position:"relative",opacity:1,...m.cardButton},onMouseDown:w=>{w.currentTarget.style.transform="scale(0.985)"},onMouseUp:w=>{w.currentTarget.style.transform="scale(1)"},children:(0,I.jsx)($r,{content:C})}),(0,I.jsx)("style",{children:"@keyframes flopay-interim-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }"})]})}var Gn=require("react/jsx-runtime"),Zl=44;function Es(e){return new Promise(t=>setTimeout(t,e))}function Ql(e,t){return e instanceof En.FloPayError?e:new En.FloPayError(e instanceof Error?e.message:t,"api_error")}function ec(e,t){return!(!t||e.type==="validation_error"||e.checkoutMethod&&e.checkoutMethod!=="card"&&e.checkoutMethod!=="paypal")}function tc(e){if(e.createSession)return{...e.createSession,checkoutMode:"auto"};if(!e.clientId||!e.account||!e.successUrl||!e.cancelUrl)return null;let t=e.products!=null;return{clientId:e.clientId,products:e.products,items:t?void 0:e.items,subscriptions:t?void 0:e.subscriptions,account:e.account,successUrl:e.successUrl,cancelUrl:e.cancelUrl,couponCodes:e.couponCodes,tagsData:e.tagsData,utmMetadata:e.utmMetadata,checkoutMode:"auto"}}function Rs({sessionId:e,nonce:t,createSession:n,paymentMethodId:r,checkoutMethod:o,clientId:i,products:d,items:c,subscriptions:C,account:y,successUrl:b,cancelUrl:P,couponCodes:F,tagsData:A,utmMetadata:m,billingApiUrl:S,locale:ye,theme:U,appearance:w,buttonsTheme:ce,buttonsStyles:q,onSuccess:le,onError:Y,onDecline:ge,children:qe,disabled:we=!1,type:Et="button",style:Oe,...Ee}){let Re=(0,Ue.useMemo)(()=>(0,En.resolveBillingApiUrl)(S),[S]),oe=(0,Ue.useMemo)(()=>tc({createSession:n,clientId:i,products:d,items:c,subscriptions:C,account:y,successUrl:b,cancelUrl:P,couponCodes:F,tagsData:A,utmMetadata:m}),[y,P,i,F,n,d,c,C,b,A,m]),[ee,L]=(0,Ue.useState)(!1),[_e,Te]=(0,Ue.useState)(null),[G,Ie]=(0,Ue.useState)(null),[Pe,M]=(0,Ue.useState)(!1),[K,ke]=(0,Ue.useState)(null),be=(0,Ue.useRef)(!0),Q=(0,Ue.useRef)(null),Be=(0,Ue.useRef)(K),it=(0,Ue.useRef)(le),vt=(0,Ue.useRef)(Y),Ke=(0,Ue.useRef)(ge);(0,Ue.useEffect)(()=>{Be.current=K},[K]),(0,Ue.useEffect)(()=>{it.current=le},[le]),(0,Ue.useEffect)(()=>{vt.current=Y},[Y]),(0,Ue.useEffect)(()=>{Ke.current=ge},[ge]),(0,Ue.useEffect)(()=>(be.current=!0,()=>{be.current=!1,Q.current?.abort()}),[]),(0,Ue.useEffect)(()=>{if(typeof window>"u")return;let _=J=>{J.key==="Escape"&&ke(null)};return window.addEventListener("keydown",_),()=>{window.removeEventListener("keydown",_)}},[]);let te=(0,Ue.useCallback)((_,J=Ro)=>{Ke.current?.(Kt(J,_,{code:_.code,declineCode:_.declineCode}))},[]),$=(0,Ue.useCallback)(async _=>{be.current&&(Ie(null),M(_.result.status==="authorized"),Te("success"),await Es(1200),be.current&&nt(()=>it.current?.(_)))},[]),O=(0,Ue.useCallback)(async(_,J)=>{be.current&&(vt.current?.(_),J?.emitDecline&&te(_,J.method),Ie(_.message),M(!1),Te("error"),await Es(1500))},[te]),He=(0,Ue.useCallback)(async(_,J,lt)=>{let Xe=_.data.session??null;if(!Xe)throw new En.FloPayError("No session data returned","api_error");let Zt=Xe.clientSecret||t;if(Kr(Xe)){await $({result:Rr(Xe,J),session:Xe,sessionId:Xe.id||J,autoCompleted:!1});return}if(Xe.status==="expired")throw Ko(Xe);try{if(_.autoProcessingPending){let Tt=(await new pa.PaymentAPI(Re).waitForCheckoutSessionCompletion(_.autoProcessingPending.sessionId,{initialDelayMs:_.autoProcessingPending.retryAfterMs})).data.session;if(!Kr(Tt))throw Ho(Tt);await $({result:Rr(Tt,J),session:Tt,sessionId:Tt.id||J,autoCompleted:!1});return}if(_.autoProcessingError){if(_.autoProcessingError.type==="3ds_required"&&_.autoProcessingError.nextActionRedirectUrl&&J&&Zt){let B=new AbortController;Q.current=B;let ft;try{ft=await ts({billingApiUrl:Re,sessionId:J,nonce:Zt,nextActionRedirectUrl:_.autoProcessingError.nextActionRedirectUrl,signal:B.signal})}finally{Q.current===B&&(Q.current=null)}if(ft.status==="declined")throw Pr({type:ft.declineReason??"decline",message:"Card was declined.",gatewayErrorCode:ft.gatewayDeclineReason??void 0},"Card was declined.",{checkoutMethod:_.autoProcessingError.checkoutMethod});let Rt=(await new pa.PaymentAPI(Re).waitForCheckoutSessionCompletion(J,{initialDelayMs:0,nonce:Zt})).data.session;if(!Kr(Rt))throw Pr({type:"unknown",message:"Card authentication was not completed."},"Card authentication was not completed.",{checkoutMethod:_.autoProcessingError.checkoutMethod});await $({result:Rr(Rt,J),session:Rt,sessionId:Rt.id||J,autoCompleted:!1});return}throw Pr(_.autoProcessingError,"Automatic payment failed. Please try again.",{checkoutMethod:_.autoProcessingError.checkoutMethod})}if(lt?.fromCreateSession&&_.autoProcessingAttempted===!0)throw Pr({type:"unknown",message:"Automatic payment failed. Please try again."},"Automatic payment failed. Please try again.");let Ht=await Qr({billingApiUrl:Re,sessionId:J??Xe.id,session:Xe,nonce:Zt});if(Ht.type!=="success")throw Pr({type:"unknown",message:"Automatic payment failed. Please try again."},"Automatic payment failed. Please try again.");await $({result:Ht.result,session:Xe,sessionId:Xe.id||J,autoCompleted:!1})}catch(Ht){let B=_o(Ht),ft=Xe.id||J;await O(B,{emitDecline:!0,method:B.checkoutMethod??Ro}),ec(B,ft)&&ft&&be.current&&ke({sessionId:ft,errorMessage:B.message,nonce:Zt||void 0})}},[t,Re,O,$]),Je=(0,Ue.useCallback)(async _=>{if(Ee.onClick?.(_),!(_.defaultPrevented||we||ee)){if(ke(null),e&&oe){let J=new En.FloPayError("Provide either sessionId or create-session props, not both.","validation_error");await O(J),be.current&&(Te(null),Ie(null));return}if(!e&&!oe){let J=new En.FloPayError("Provide a sessionId or the props required to create an automatic payment session.","validation_error");await O(J),be.current&&(Te(null),Ie(null));return}L(!0),Ie(null),M(!1),Te("processing");try{let J=new pa.PaymentAPI(Re);if(e){let lt=await J.getUnifiedCheckoutSession(e,t);await He(lt,e);return}try{let lt=await J.createAndFetchSession({...oe});await He(lt,lt.data.session?.id??null,{fromCreateSession:!0})}catch(lt){if((lt instanceof En.FloPayError||typeof lt=="object"&<!==null&&"code"in lt?lt.code:void 0)==="session_auto_completed"){await $({result:{status:"succeeded"},session:null,sessionId:null,autoCompleted:!0});return}throw lt}}catch(J){await O(Ql(J,"Automatic payment failed. Please try again."))}finally{be.current&&(Te(null),Ie(null),L(!1))}}},[Ee.onClick,oe,we,ee,t,He,Re,e,O,$]),fe=(0,Ue.useCallback)(_=>{let J=Be.current;ke(null),it.current?.({result:_,session:null,sessionId:J?.sessionId??null,autoCompleted:!1})},[]),st=(0,Ue.useCallback)(_=>{vt.current?.(_)},[]),E=(0,Ue.useCallback)(_=>{Ke.current?.(_)},[]),R=(0,Ue.useMemo)(()=>(0,En.resolveTheme)(U),[U]),De=(0,Ue.useMemo)(()=>{let _=R?.buttonsLayout??(0,En.resolveButtonsLayoutTheme)(ce);return q?{..._,...q,cardButton:{..._.cardButton,...q.cardButton}}:_},[R,ce,q]),ue=(0,Ue.useMemo)(()=>{let _=R?.appearance;return w?_?{..._,...w,variables:{..._.variables,...w.variables}}:w:_},[w,R]),ae=ue?.variables,rt=ae?.colorPrimary??"#4A49FF",Ne=ae?.colorPrimaryHover??to(rt,.12),et=ae?.borderRadius??"8px";return(0,Gn.jsxs)(Gn.Fragment,{children:[(0,Gn.jsx)("button",{...Ee,type:Et,onClick:Je,disabled:we||ee,"aria-busy":ee,style:{width:"100%",...qe===void 0?{boxSizing:"border-box",height:Zl,padding:"0 1rem"}:{padding:"0.9rem 1rem"},...De.cardButton,...Ka({themeBundle:R,resolvedPrimaryColor:rt,resolvedBorderRadius:et,submitButtonStyle:De.submitButton,explicitPrimaryColor:ae?.colorPrimary}),fontSize:De.cardButtonFontSize??"0.95rem",fontWeight:600,cursor:we||ee?"not-allowed":"pointer",display:"flex",alignItems:"center",justifyContent:"center",gap:"0.625rem",transition:"background-color 0.15s, border-color 0.2s, box-shadow 0.2s, transform 0.1s",position:"relative",opacity:we||ee?.6:1,...Oe},onMouseEnter:_=>{Ee.onMouseEnter?.(_),!_.defaultPrevented&&!we&&!ee&&(R||ae?.colorPrimary)&&(_.currentTarget.style.backgroundColor=Ne)},onMouseLeave:_=>{Ee.onMouseLeave?.(_),!_.defaultPrevented&&(R||ae?.colorPrimary)&&(_.currentTarget.style.backgroundColor=rt)},onMouseDown:_=>{Ee.onMouseDown?.(_),_.defaultPrevented||(_.currentTarget.style.transform="scale(0.985)")},onMouseUp:_=>{Ee.onMouseUp?.(_),_.defaultPrevented||(_.currentTarget.style.transform="scale(1)")},children:(0,Gn.jsx)($r,{content:qe})}),_e&&(0,Gn.jsx)(Ln,{status:_e,errorMessage:G,authorized:Pe}),K&&(0,Gn.jsx)("div",{"data-testid":"flopay-automatic-payment-fallback",role:"dialog","aria-modal":"true",onClick:_=>{_.target===_.currentTarget&&ke(null)},style:{position:"fixed",inset:0,background:"rgba(0, 0, 0, 0.45)",display:"flex",alignItems:"center",justifyContent:"center",padding:"1.5rem",zIndex:1100},children:(0,Gn.jsx)("div",{style:{width:"100%",maxWidth:520,maxHeight:"90vh",overflowY:"auto",background:"white",borderRadius:20,padding:"1.5rem",boxShadow:"0 24px 80px rgba(15, 23, 42, 0.28)",display:"flex",flexDirection:"column",gap:"1rem"},children:(0,Gn.jsx)(ua,{sessionId:K.sessionId,nonce:K.nonce,checkoutMode:"full",billingApiUrl:Re,locale:ye,theme:U,...ue?{appearance:ue}:{},buttonsTheme:ce,buttonsStyles:q,initialErrorMessage:K.errorMessage,cardTitleContent:null,onComplete:fe,onError:st,onDecline:E})})})]})}var ma=require("@flopay/js/card-setup"),Rn=require("@flopay/shared"),It=require("react");var or=require("react/jsx-runtime"),Bo=class extends Rn.FloPayError{constructor(t,n,r){super(t,n,r),this.name="FloPayCardSetupError",this.retryable=r.retryable}};function _s(e,t={}){let n=e instanceof Rn.FloPayError?e:void 0,r=n?.statusCode,o=t.retryable??(n?.type==="network_error"||n?.type==="rate_limit_error"||typeof r=="number"&&r>=500||n?.code==="vault_capture_timeout"||!n);return new Bo(n?.message??(e instanceof Error?e.message:"Failed to load the secure card form."),n?.type??"api_error",{code:t.code??n?.code??"card_setup_load_failed",retryable:o,...n?.param?{param:n.param}:{},...r!==void 0?{statusCode:r}:{}})}function Ts({sessionId:e,nonce:t,billingApiUrl:n,telemetry:r,theme:o="modern-light",containerStyle:i,loading:d=null,onReady:c,onComplete:C,onDecline:y,onCancel:b,onValidation:P,onError:F}){let[A,m]=(0,It.useState)(null),[S,ye]=(0,It.useState)(null),[U,w]=(0,It.useState)(null),[ce,q]=(0,It.useState)(null),[le,Y]=(0,It.useState)(null),ge=(0,It.useRef)(!1),qe=(0,It.useRef)(!1),we=(0,It.useMemo)(()=>{if(typeof o=="object")return o;let G=(0,Rn.resolveTheme)(o);if(G)return ra({appearance:G.appearance,buttonsStyles:G.buttonsLayout,layout:"default"})},[o]),Et=(0,It.useRef)(c),Oe=(0,It.useRef)(F),Ee=(0,It.useRef)(C),Re=(0,It.useRef)(y),oe=(0,It.useRef)(b),ee=(0,It.useRef)(P),L=(0,It.useRef)(!1),_e=(0,It.useRef)(!1),Te=(0,It.useRef)(0);return Et.current=c,Oe.current=F,Ee.current=C,Re.current=y,oe.current=b,ee.current=P,(0,It.useEffect)(()=>{let G=Te.current+1;return Te.current=G,()=>{queueMicrotask(()=>{Te.current===G&&(L.current||_e.current||(_e.current=!0,nt(()=>{oe.current?.({status:"cancelled",sessionId:e})})))})}},[e]),(0,It.useEffect)(()=>{let G=!0,Ie=new ma.PaymentAPI((0,Rn.resolveBillingApiUrl)(n),{telemetry:r});return m(null),ye(null),w(null),L.current=!1,_e.current=!1,(async()=>{try{if(!e.trim())throw new Rn.FloPayError("FloPayCardSetup requires a sessionId.","validation_error",{code:"MissingCheckoutSessionId",param:"sessionId"});if(!t.trim())throw new Rn.FloPayError("FloPayCardSetup requires a session nonce.","validation_error",{code:"MissingCheckoutSessionToken",param:"nonce"});let Pe=await Ie.getUnifiedCheckoutSession(e,t);if(!G)return;let M=Pe.data.session;if(!M||!(0,Rn.isCardSetupCheckoutSession)(M))throw new Rn.FloPayError("FloPayCardSetup only accepts a zero-amount, productless setup session.","validation_error",{code:"InvalidCardSetupSession",param:"sessionId"});let K=M.vault;if(K?.html?.trim()||(K=await Ie.getVaultCapture(e,t)),!K.html?.trim())throw new Rn.FloPayError("FloPay: this setup session has no vault card capability. Upgrade the billing backend integration.","api_error",{code:"UnsupportedBackendVaultCapability"});if(!G)return;ye(K),m(new ma.PciVaultCardCapture({sessionId:e,operation:"card_setup",telemetry:r}))}catch(Pe){if(!G)return;let M=_s(Pe);L.current=!0,w(M),nt(()=>Oe.current?.(M))}})(),()=>{G=!1,Ie.destroy()}},[n,t,e,r]),(0,It.useEffect)(()=>{if(!A)return;let G=!1;qe.current=!1,ge.current=!1;let Ie=A.on("submitting",()=>{ge.current=!0,Y(null),q("processing")}),Pe=A.on("complete",K=>{L.current=!0,ge.current=!1,q("success"),(async()=>(await new Promise(ke=>setTimeout(ke,1200)),!qe.current&&(qe.current=!0,nt(()=>{Ee.current?.({status:"succeeded",sessionId:e,...K.paymentMethod?{paymentMethod:K.paymentMethod}:{}})}),G||q(null))))()}),M=A.on("decline",K=>{L.current=!0,ge.current=!1,Y(K.message??null),q("error"),nt(()=>{Re.current?.({status:"declined",sessionId:e,...K.declineReason?{reason:K.declineReason}:{},...K.message?{message:K.message}:{}})}),(async()=>(await new Promise(ke=>setTimeout(ke,1500)),G||q(null)))()});return()=>{G=!0,Ie(),Pe(),M()}},[A,e]),U?(0,or.jsx)("div",{role:"alert",children:U.message}):!A||!S?.html?(0,or.jsx)(or.Fragment,{children:d}):(0,or.jsxs)(or.Fragment,{children:[ce&&(0,or.jsx)(Ln,{status:ce,errorMessage:le,processingLabel:"SAVING CARD...",successLabel:"CARD SAVED",errorLabel:"CARD NOT SAVED",successNote:null}),(0,or.jsx)(eo,{capture:A,html:S.html,messageToken:S.messageToken,expectedOrigin:S.expectedOrigin,theme:we,containerStyle:i,onReady:()=>{nt(()=>Et.current?.())},onValidation:G=>{nt(()=>ee.current?.(G))},onError:G=>{if(!G)return;ge.current&&(ge.current=!1,Y(G),q("error"),setTimeout(()=>q(null),1500));let Ie=_s(new Error(G),{code:"card_setup_widget_failed",retryable:!0});nt(()=>Oe.current?.(Ie))}})]})}0&&(module.exports={DirectPayPalButton,FloPayAutomaticPaymentButton,FloPayCardSetup,FloPayCardSetupError,FloPayCheckout,FloPayProvider,SplitCardForm,VaultCardFields,dropThirdPartyOnlyError,useCheckout,useFloPay,usePayPalFloPay});
|
|
47
|
+
`})]})}return(0,I.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[t&&ye(Ar),n&&(r||o)&&ye(Ar),n&&(0,I.jsx)("button",{type:"button",onClick:()=>{e?.("card"),F(!0)},style:{width:"100%",...U,backgroundColor:"white",color:"#262833",border:"1px solid #d1d5db",borderRadius:"8px",fontSize:m.cardButtonFontSize??"0.95rem",fontWeight:600,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",gap:"0.625rem",boxShadow:"0 1px 2px rgba(0,0,0,0.04)",transition:"transform 0.1s",position:"relative",opacity:1,...m.cardButton},onMouseDown:w=>{w.currentTarget.style.transform="scale(0.985)"},onMouseUp:w=>{w.currentTarget.style.transform="scale(1)"},children:(0,I.jsx)($r,{content:C})}),(0,I.jsx)("style",{children:"@keyframes flopay-interim-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }"})]})}var Gn=require("react/jsx-runtime"),Ql=44;function Rs(e){return new Promise(t=>setTimeout(t,e))}function ec(e,t){return e instanceof En.FloPayError?e:new En.FloPayError(e instanceof Error?e.message:t,"api_error")}function tc(e,t){return!(!t||e.type==="validation_error"||e.checkoutMethod&&e.checkoutMethod!=="card"&&e.checkoutMethod!=="paypal")}function nc(e){if(e.createSession)return{...e.createSession,checkoutMode:"auto"};if(!e.clientId||!e.account||!e.successUrl||!e.cancelUrl)return null;let t=e.products!=null;return{clientId:e.clientId,products:e.products,items:t?void 0:e.items,subscriptions:t?void 0:e.subscriptions,account:e.account,successUrl:e.successUrl,cancelUrl:e.cancelUrl,couponCodes:e.couponCodes,tagsData:e.tagsData,utmMetadata:e.utmMetadata,checkoutMode:"auto"}}function _s({sessionId:e,nonce:t,createSession:n,paymentMethodId:r,checkoutMethod:o,clientId:i,products:d,items:c,subscriptions:C,account:y,successUrl:b,cancelUrl:P,couponCodes:F,tagsData:A,utmMetadata:m,billingApiUrl:S,locale:ye,theme:U,appearance:w,buttonsTheme:ce,buttonsStyles:q,onSuccess:le,onError:Y,onDecline:ge,children:qe,disabled:we=!1,type:Et="button",style:Oe,...Ee}){let Re=(0,Ue.useMemo)(()=>(0,En.resolveBillingApiUrl)(S),[S]),oe=(0,Ue.useMemo)(()=>nc({createSession:n,clientId:i,products:d,items:c,subscriptions:C,account:y,successUrl:b,cancelUrl:P,couponCodes:F,tagsData:A,utmMetadata:m}),[y,P,i,F,n,d,c,C,b,A,m]),[ee,L]=(0,Ue.useState)(!1),[_e,Te]=(0,Ue.useState)(null),[G,Ie]=(0,Ue.useState)(null),[Pe,M]=(0,Ue.useState)(!1),[K,ke]=(0,Ue.useState)(null),be=(0,Ue.useRef)(!0),Q=(0,Ue.useRef)(null),Be=(0,Ue.useRef)(K),st=(0,Ue.useRef)(le),vt=(0,Ue.useRef)(Y),Ke=(0,Ue.useRef)(ge);(0,Ue.useEffect)(()=>{Be.current=K},[K]),(0,Ue.useEffect)(()=>{st.current=le},[le]),(0,Ue.useEffect)(()=>{vt.current=Y},[Y]),(0,Ue.useEffect)(()=>{Ke.current=ge},[ge]),(0,Ue.useEffect)(()=>(be.current=!0,()=>{be.current=!1,Q.current?.abort()}),[]),(0,Ue.useEffect)(()=>{if(typeof window>"u")return;let _=J=>{J.key==="Escape"&&ke(null)};return window.addEventListener("keydown",_),()=>{window.removeEventListener("keydown",_)}},[]);let te=(0,Ue.useCallback)((_,J=Ro)=>{Ke.current?.(Kt(J,_,{code:_.code,declineCode:_.declineCode}))},[]),$=(0,Ue.useCallback)(async _=>{be.current&&(Ie(null),M(_.result.status==="authorized"),Te("success"),await Rs(1200),be.current&&rt(()=>st.current?.(_)))},[]),O=(0,Ue.useCallback)(async(_,J)=>{be.current&&(vt.current?.(_),J?.emitDecline&&te(_,J.method),Ie(_.message),M(!1),Te("error"),await Rs(1500))},[te]),He=(0,Ue.useCallback)(async(_,J,ct)=>{let Ze=_.data.session??null;if(!Ze)throw new En.FloPayError("No session data returned","api_error");let Qt=Ze.clientSecret||t;if(Kr(Ze)){await $({result:Rr(Ze,J),session:Ze,sessionId:Ze.id||J,autoCompleted:!1});return}if(Ze.status==="expired")throw Ko(Ze);try{if(_.autoProcessingPending){let Tt=(await new ma.PaymentAPI(Re).waitForCheckoutSessionCompletion(_.autoProcessingPending.sessionId,{initialDelayMs:_.autoProcessingPending.retryAfterMs})).data.session;if(!Kr(Tt))throw Ho(Tt);await $({result:Rr(Tt,J),session:Tt,sessionId:Tt.id||J,autoCompleted:!1});return}if(_.autoProcessingError){if(_.autoProcessingError.type==="3ds_required"&&_.autoProcessingError.nextActionRedirectUrl&&J&&Qt){let B=new AbortController;Q.current=B;let ft;try{ft=await ns({billingApiUrl:Re,sessionId:J,nonce:Qt,nextActionRedirectUrl:_.autoProcessingError.nextActionRedirectUrl,signal:B.signal})}finally{Q.current===B&&(Q.current=null)}if(ft.status==="declined")throw Pr({type:ft.declineReason??"decline",message:"Card was declined.",gatewayErrorCode:ft.gatewayDeclineReason??void 0},"Card was declined.",{checkoutMethod:_.autoProcessingError.checkoutMethod});let Rt=(await new ma.PaymentAPI(Re).waitForCheckoutSessionCompletion(J,{initialDelayMs:0,nonce:Qt})).data.session;if(!Kr(Rt))throw Pr({type:"unknown",message:"Card authentication was not completed."},"Card authentication was not completed.",{checkoutMethod:_.autoProcessingError.checkoutMethod});await $({result:Rr(Rt,J),session:Rt,sessionId:Rt.id||J,autoCompleted:!1});return}throw Pr(_.autoProcessingError,"Automatic payment failed. Please try again.",{checkoutMethod:_.autoProcessingError.checkoutMethod})}if(ct?.fromCreateSession&&_.autoProcessingAttempted===!0)throw Pr({type:"unknown",message:"Automatic payment failed. Please try again."},"Automatic payment failed. Please try again.");let Ht=await Qr({billingApiUrl:Re,sessionId:J??Ze.id,session:Ze,nonce:Qt});if(Ht.type!=="success")throw Pr({type:"unknown",message:"Automatic payment failed. Please try again."},"Automatic payment failed. Please try again.");await $({result:Ht.result,session:Ze,sessionId:Ze.id||J,autoCompleted:!1})}catch(Ht){let B=_o(Ht),ft=Ze.id||J;await O(B,{emitDecline:!0,method:B.checkoutMethod??Ro}),tc(B,ft)&&ft&&be.current&&ke({sessionId:ft,errorMessage:B.message,nonce:Qt||void 0})}},[t,Re,O,$]),Je=(0,Ue.useCallback)(async _=>{if(Ee.onClick?.(_),!(_.defaultPrevented||we||ee)){if(ke(null),e&&oe){let J=new En.FloPayError("Provide either sessionId or create-session props, not both.","validation_error");await O(J),be.current&&(Te(null),Ie(null));return}if(!e&&!oe){let J=new En.FloPayError("Provide a sessionId or the props required to create an automatic payment session.","validation_error");await O(J),be.current&&(Te(null),Ie(null));return}L(!0),Ie(null),M(!1),Te("processing");try{let J=new ma.PaymentAPI(Re);if(e){let ct=await J.getUnifiedCheckoutSession(e,t);await He(ct,e);return}try{let ct=await J.createAndFetchSession({...oe});await He(ct,ct.data.session?.id??null,{fromCreateSession:!0})}catch(ct){if((ct instanceof En.FloPayError||typeof ct=="object"&&ct!==null&&"code"in ct?ct.code:void 0)==="session_auto_completed"){await $({result:{status:"succeeded"},session:null,sessionId:null,autoCompleted:!0});return}throw ct}}catch(J){await O(ec(J,"Automatic payment failed. Please try again."))}finally{be.current&&(Te(null),Ie(null),L(!1))}}},[Ee.onClick,oe,we,ee,t,He,Re,e,O,$]),fe=(0,Ue.useCallback)(_=>{let J=Be.current;ke(null),st.current?.({result:_,session:null,sessionId:J?.sessionId??null,autoCompleted:!1})},[]),lt=(0,Ue.useCallback)(_=>{vt.current?.(_)},[]),E=(0,Ue.useCallback)(_=>{Ke.current?.(_)},[]),R=(0,Ue.useMemo)(()=>(0,En.resolveTheme)(U),[U]),De=(0,Ue.useMemo)(()=>{let _=R?.buttonsLayout??(0,En.resolveButtonsLayoutTheme)(ce);return q?{..._,...q,cardButton:{..._.cardButton,...q.cardButton}}:_},[R,ce,q]),ue=(0,Ue.useMemo)(()=>{let _=R?.appearance;return w?_?{..._,...w,variables:{..._.variables,...w.variables}}:w:_},[w,R]),ae=ue?.variables,ot=ae?.colorPrimary??"#4A49FF",Ne=ae?.colorPrimaryHover??to(ot,.12),Xe=ae?.borderRadius??"8px";return(0,Gn.jsxs)(Gn.Fragment,{children:[(0,Gn.jsx)("button",{...Ee,type:Et,onClick:Je,disabled:we||ee,"aria-busy":ee,style:{width:"100%",...qe===void 0?{boxSizing:"border-box",height:Ql,padding:"0 1rem"}:{padding:"0.9rem 1rem"},...De.cardButton,...Ka({themeBundle:R,resolvedPrimaryColor:ot,resolvedBorderRadius:Xe,submitButtonStyle:De.submitButton,explicitPrimaryColor:ae?.colorPrimary}),fontSize:De.cardButtonFontSize??"0.95rem",fontWeight:600,cursor:we||ee?"not-allowed":"pointer",display:"flex",alignItems:"center",justifyContent:"center",gap:"0.625rem",transition:"background-color 0.15s, border-color 0.2s, box-shadow 0.2s, transform 0.1s",position:"relative",opacity:we||ee?.6:1,...Oe},onMouseEnter:_=>{Ee.onMouseEnter?.(_),!_.defaultPrevented&&!we&&!ee&&(R||ae?.colorPrimary)&&(_.currentTarget.style.backgroundColor=Ne)},onMouseLeave:_=>{Ee.onMouseLeave?.(_),!_.defaultPrevented&&(R||ae?.colorPrimary)&&(_.currentTarget.style.backgroundColor=ot)},onMouseDown:_=>{Ee.onMouseDown?.(_),_.defaultPrevented||(_.currentTarget.style.transform="scale(0.985)")},onMouseUp:_=>{Ee.onMouseUp?.(_),_.defaultPrevented||(_.currentTarget.style.transform="scale(1)")},children:(0,Gn.jsx)($r,{content:qe})}),_e&&(0,Gn.jsx)(Ln,{status:_e,errorMessage:G,authorized:Pe}),K&&(0,Gn.jsx)("div",{"data-testid":"flopay-automatic-payment-fallback",role:"dialog","aria-modal":"true",onClick:_=>{_.target===_.currentTarget&&ke(null)},style:{position:"fixed",inset:0,background:"rgba(0, 0, 0, 0.45)",display:"flex",alignItems:"center",justifyContent:"center",padding:"1.5rem",zIndex:1100},children:(0,Gn.jsx)("div",{style:{width:"100%",maxWidth:520,maxHeight:"90vh",overflowY:"auto",background:"white",borderRadius:20,padding:"1.5rem",boxShadow:"0 24px 80px rgba(15, 23, 42, 0.28)",display:"flex",flexDirection:"column",gap:"1rem"},children:(0,Gn.jsx)(pa,{sessionId:K.sessionId,nonce:K.nonce,checkoutMode:"full",billingApiUrl:Re,locale:ye,theme:U,...ue?{appearance:ue}:{},buttonsTheme:ce,buttonsStyles:q,initialErrorMessage:K.errorMessage,cardTitleContent:null,onComplete:fe,onError:lt,onDecline:E})})})]})}var ya=require("@flopay/js/card-setup"),Rn=require("@flopay/shared"),It=require("react");var or=require("react/jsx-runtime"),Bo=class extends Rn.FloPayError{constructor(t,n,r){super(t,n,r),this.name="FloPayCardSetupError",this.retryable=r.retryable}};function Ts(e,t={}){let n=e instanceof Rn.FloPayError?e:void 0,r=n?.statusCode,o=t.retryable??(n?.type==="network_error"||n?.type==="rate_limit_error"||typeof r=="number"&&r>=500||n?.code==="vault_capture_timeout"||!n);return new Bo(n?.message??(e instanceof Error?e.message:"Failed to load the secure card form."),n?.type??"api_error",{code:t.code??n?.code??"card_setup_load_failed",retryable:o,...n?.param?{param:n.param}:{},...r!==void 0?{statusCode:r}:{}})}function xs({sessionId:e,nonce:t,billingApiUrl:n,telemetry:r,theme:o="modern-light",containerStyle:i,loading:d=null,onReady:c,onComplete:C,onDecline:y,onCancel:b,onValidation:P,onError:F}){let[A,m]=(0,It.useState)(null),[S,ye]=(0,It.useState)(null),[U,w]=(0,It.useState)(null),[ce,q]=(0,It.useState)(null),[le,Y]=(0,It.useState)(null),ge=(0,It.useRef)(!1),qe=(0,It.useRef)(!1),we=(0,It.useMemo)(()=>{if(typeof o=="object")return o;let G=(0,Rn.resolveTheme)(o);if(G)return ra({appearance:G.appearance,buttonsStyles:G.buttonsLayout,layout:"default"})},[o]),Et=(0,It.useRef)(c),Oe=(0,It.useRef)(F),Ee=(0,It.useRef)(C),Re=(0,It.useRef)(y),oe=(0,It.useRef)(b),ee=(0,It.useRef)(P),L=(0,It.useRef)(!1),_e=(0,It.useRef)(!1),Te=(0,It.useRef)(0);return Et.current=c,Oe.current=F,Ee.current=C,Re.current=y,oe.current=b,ee.current=P,(0,It.useEffect)(()=>{let G=Te.current+1;return Te.current=G,()=>{queueMicrotask(()=>{Te.current===G&&(L.current||_e.current||(_e.current=!0,rt(()=>{oe.current?.({status:"cancelled",sessionId:e})})))})}},[e]),(0,It.useEffect)(()=>{let G=!0,Ie=new ya.PaymentAPI((0,Rn.resolveBillingApiUrl)(n),{telemetry:r});return m(null),ye(null),w(null),L.current=!1,_e.current=!1,(async()=>{try{if(!e.trim())throw new Rn.FloPayError("FloPayCardSetup requires a sessionId.","validation_error",{code:"MissingCheckoutSessionId",param:"sessionId"});if(!t.trim())throw new Rn.FloPayError("FloPayCardSetup requires a session nonce.","validation_error",{code:"MissingCheckoutSessionToken",param:"nonce"});let Pe=await Ie.getUnifiedCheckoutSession(e,t);if(!G)return;let M=Pe.data.session;if(!M||!(0,Rn.isCardSetupCheckoutSession)(M))throw new Rn.FloPayError("FloPayCardSetup only accepts a zero-amount, productless setup session.","validation_error",{code:"InvalidCardSetupSession",param:"sessionId"});let K=M.vault;if(K?.html?.trim()||(K=await Ie.getVaultCapture(e,t)),!K.html?.trim())throw new Rn.FloPayError("FloPay: this setup session has no vault card capability. Upgrade the billing backend integration.","api_error",{code:"UnsupportedBackendVaultCapability"});if(!G)return;ye(K),m(new ya.PciVaultCardCapture({sessionId:e,operation:"card_setup",telemetry:r}))}catch(Pe){if(!G)return;let M=Ts(Pe);L.current=!0,w(M),rt(()=>Oe.current?.(M))}})(),()=>{G=!1,Ie.destroy()}},[n,t,e,r]),(0,It.useEffect)(()=>{if(!A)return;let G=!1;qe.current=!1,ge.current=!1;let Ie=A.on("submitting",()=>{ge.current=!0,Y(null),q("processing")}),Pe=A.on("complete",K=>{L.current=!0,ge.current=!1,q("success"),(async()=>(await new Promise(ke=>setTimeout(ke,1200)),!qe.current&&(qe.current=!0,rt(()=>{Ee.current?.({status:"succeeded",sessionId:e,...K.paymentMethod?{paymentMethod:K.paymentMethod}:{}})}),G||q(null))))()}),M=A.on("decline",K=>{L.current=!0,ge.current=!1,Y(K.message??null),q("error"),rt(()=>{Re.current?.({status:"declined",sessionId:e,...K.declineReason?{reason:K.declineReason}:{},...K.message?{message:K.message}:{}})}),(async()=>(await new Promise(ke=>setTimeout(ke,1500)),G||q(null)))()});return()=>{G=!0,Ie(),Pe(),M()}},[A,e]),U?(0,or.jsx)("div",{role:"alert",children:U.message}):!A||!S?.html?(0,or.jsx)(or.Fragment,{children:d}):(0,or.jsxs)(or.Fragment,{children:[ce&&(0,or.jsx)(Ln,{status:ce,errorMessage:le,processingLabel:"SAVING CARD...",successLabel:"CARD SAVED",errorLabel:"CARD NOT SAVED",successNote:null}),(0,or.jsx)(eo,{capture:A,html:S.html,messageToken:S.messageToken,expectedOrigin:S.expectedOrigin,theme:we,containerStyle:i,onReady:()=>{rt(()=>Et.current?.())},onValidation:G=>{rt(()=>ee.current?.(G))},onError:G=>{if(!G)return;ge.current&&(ge.current=!1,Y(G),q("error"),setTimeout(()=>q(null),1500));let Ie=Ts(new Error(G),{code:"card_setup_widget_failed",retryable:!0});rt(()=>Oe.current?.(Ie))}})]})}0&&(module.exports={DirectPayPalButton,FloPayAutomaticPaymentButton,FloPayCardSetup,FloPayCardSetupError,FloPayCheckout,FloPayProvider,SplitCardForm,VaultCardFields,dropThirdPartyOnlyError,useCheckout,useFloPay,usePayPalFloPay});
|