@flopay/react 1.13.4 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -0
- package/dist/index.cjs +9 -9
- package/dist/index.d.cts +19 -3
- package/dist/index.d.ts +19 -3
- package/dist/index.mjs +7 -7
- package/package.json +4 -4
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{a as vl}from"./chunk-D4CVZRT4.mjs";import{c as Dt,d as Sr,e as Xo,f as _i,g as sl,h as rd,j as od}from"./chunk-YR36EYW2.mjs";import{a as hl}from"./chunk-HSYSKQPT.mjs";import{a as ea,b as Da,c as Ai,d as xi,e as Bi,f as pl,g as yl,h as ml,i as fl,j as gl,k as Pl}from"./chunk-H4MQCBX4.mjs";import{a as xa,b as Ti,c as ll,d as Mi,e as go,f as cl,g as zr,h as Ba,i as dl,j as Qo,k as Fa,l as ul}from"./chunk-VK67324N.mjs";import{dropThirdPartyOnlyError as Tf}from"@flopay/shared";import{PaymentAPI as bs}from"@flopay/js";import{FloPayError as ba,resolveBillingApiUrl as Hp,resolveButtonsLayoutTheme as Vp,resolveTheme as Kp}from"@flopay/shared";import{useCallback as Fr,useEffect as No,useMemo as va,useRef as Lo,useState as zo}from"react";import{Fragment as bo,jsx as Yn,jsxs as bl}from"react/jsx-runtime";function ad(){return bl(bo,{children:[bl("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:[Yn("rect",{width:"20",height:"14",x:"2",y:"5",rx:"2"}),Yn("line",{x1:"2",x2:"22",y1:"10",y2:"10"})]}),"Credit / Debit Card",Yn("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:Yn("path",{d:"M9 18l6-6-6-6"})})]})}function id(){return Yn(bo,{children:"Go back"})}function sd(){return Yn(bo,{children:"Secure card checkout"})}function ho(e){return e!==void 0&&(e===""||e===null||e===!1)}function Po({content:e}){return Yn(bo,{children:e===void 0?Yn(ad,{}):e})}function vo({content:e}){return Yn(bo,{children:e===void 0?Yn(id,{}):e})}function ta({content:e}){return Yn(bo,{children:e===void 0?Yn(sd,{}):e})}import{CHECKOUT_PROCESSING_TIMEOUT_MESSAGE as ld,canRecoverHostedCardForm as cd,classifyTelemetryFailure as dd,FloPayError as _n,isCardHolderNamePlaceholder as ud,isMoneySettledOutcome as pd,isMountableVaultBlock as yd,isSetupIntentClientSecret as md,isValidEmail as fd,resolveSetupFutureUsage as gd,resolveWalletModeOptions as hd}from"@flopay/shared";import{canRecoverHostedCardForm as Qr,hasServerSideCardGateway as Ml}from"@flopay/shared";import{splitFullName as oa}from"@flopay/shared";import{applyFriendlyMessageOverride as wo}from"@flopay/shared";var Pd="Checkout is temporarily unavailable. Please try again later.";function Fi(e){return{errorCode:"PROVIDER_LOAD_FAILED",failureCategory:e instanceof _n&&e.type==="authentication_error"?"invalid_response":"provider_runtime",stage:"provider_load",provider:"stripe",requestCategory:"provider_sdk"}}function vd(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 Cl(){return new _n(Pd,"api_error",{code:"CheckoutInitializationFailed"})}function Sl(e,t,n){let o=e?.data.session,a=o?.gateways?.stripe?.enabledPaymentMethods??e?.data.stripe?.enabledPaymentMethods;return!!(n&&(yd(o?.vault)||o?.gateways?.pcivault||a?.includes("card")||cd(o))||t&&e?.data.paypal?.publishableKey)}function wl(e,t){if(t&&(!(e instanceof _n)||e.type==="authentication_error"))return Fi(e);if(!(e instanceof _n&&vd(e))){if(!t&&!(e instanceof _n)&&(e instanceof TypeError||e instanceof SyntaxError))return{...dd(e,"NETWORK_REQUEST_FAILED"),stage:"session_read",requestCategory:"session_read"};if(!t&&e instanceof _n)return{errorCode:"NETWORK_REQUEST_FAILED",stage:"session_read",requestCategory:"session_read"};if(!(e instanceof _n))return{errorCode:"INTERNAL_SDK_ERROR",stage:"checkout_mount"}}}function Co(e,t,n,o={}){let a;return(i={})=>{if(a!==void 0)return a;let s={...o,...i,email:i.email?.trim()||o.email?.trim()},c=ud(s.firstName,s.lastName);if(!fd(s.email))return Promise.reject(new _n("A valid buyer email is required before claiming checkout.","validation_error",{code:"BuyerEmailCollectionRequired",param:"account.email"}));let f={};for(let[C,T]of Object.entries(s)){if(c&&C.endsWith("Name")||typeof T!="string")continue;let I=T.trim();I&&(f[C]=I)}return a=e.claimCheckoutSession(t,n,{accountData:f}),a.catch(()=>{}),a}}function kl(e,t){if(!t)return e;if(!e)return t;let n;return"checkoutMetadata"in t?n=t:"checkoutMetadata"in e&&(n=e),{account:{...e.account??{},...t.account??{}},couponCodes:t.couponCodes??e.couponCodes,...n?{checkoutMetadata:n.checkoutMetadata}:{},tagsData:{...e.tagsData??{},...t.tagsData??{}},utmMetadata:t.utmMetadata??e.utmMetadata}}function Di(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 Il(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}))],o=n.reduce((i,s)=>i+(s.overrideAmount??s.totalAmount??0),0),a=e.currency??n.find(i=>i.currency)?.currency??"USD";return{id:"",clientSecret:"",mode:n.some(i=>i.type==="subscription")?"subscription":"payment",amount:Math.round(o*100),currency:a,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,s)=>({uuid:`synthetic-${i.type??"item"}-${s}`,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??a,metadata:i.metadata??null}))}}function Oi(e,t){return t?{...e,...t}:e}function yn(e,t,n){let o=typeof t=="string"?t:t.message,a=typeof t=="string"?n?.code:n?.code??t.code,i=typeof t=="string"?n?.declineCode:n?.declineCode??t.declineCode,s=typeof t=="string"?void 0:t.sessionId;return{method:e,message:o,...a?{code:a}:{},...i?{declineCode:i}:{},...s?{sessionId:s}:{}}}function Ur(e,t){return t&&e.sessionId===void 0&&Object.defineProperty(e,"sessionId",{value:t,enumerable:!0}),e}function Mr(e,t){return e.status!=="authorized"?{status:"succeeded"}:{status:"authorized",paymentId:e.paymentId,sessionId:e.id||t||void 0,authorizationExpiresAt:e.authorizationExpiresAt}}function Ar(e){return e?.status==="authorized"||e?.status==="complete"}function qr(e,t){if(e.data.session)return e.data.session;let n=e.raw,o=n?.latestTransactionAttempt?.result,a=n?.status==="authorized"||o==="AUTHORIZED";return a||n?.status==="completed"||o==="SUCCESS"?{...t,status:a?"authorized":"complete"}:n?.status==="expired"?{...t,status:"expired"}:void 0}function Rl(e){return e?.status==="expired"&&(e.failureOutcome==="authorization_expired"||e.captureMethod==="manual")}function Oa(e){let t=Rl(e);return new _n(t?"Authorization has expired.":"Checkout session has expired.","api_error",{code:t?"authorization_expired":"checkout_session_expired"})}function Na(e){return e instanceof _n||typeof e=="object"&&e!==null&&"code"in e?e.code:void 0}function So(e){return Rl(e)?new _n("Authorization has expired.","api_error",{code:"authorization_expired"}):e?.status==="expired"?new _n("Automatic payment failed. Please try again.","api_error",{code:"checkout_session_expired"}):new _n(ld,"api_error",{code:"checkout_processing_timeout"})}function na(e,t){return e==="processing"||pd(e,t)}function El(e){return e==="succeeded"?"succeeded":e==="processing"||e==="requires_capture"?"processing":"failed"}async function _l(e,t){let n=e;if(md(t)){if(!n?.retrieveSetupIntent)return null;let{setupIntent:i,error:s}=await n.retrieveSetupIntent(t);if(s)throw new _n(s.message??"Failed to retrieve setup intent.","api_error",{...s.code?{code:s.code}:{}});return i??null}if(!n?.retrievePaymentIntent)return null;let{paymentIntent:o,error:a}=await n.retrievePaymentIntent(t);if(a)throw new _n(a.message??"Failed to retrieve payment intent.","api_error",{...a.code?{code:a.code}:{}});return o??null}var bd=["apple_pay","google_pay"];function Tl(e,t="automatic",n){let o=gd(n,bd,"wallet");return{...hd(e,t),paymentMethodTypes:["card"],...o?{setupFutureUsage:o}:{}}}var Cd=new Set(["payment_intent_unexpected_state","setup_intent_unexpected_state"]);function Ni(e){let t=e&&typeof e=="object"?e:null;return t?.name==="IntegrationError"||t?.code==="elements_intent_mismatch"?{errorCode:"CONFIGURATION_INVALID",failureCategory:"invalid_response",reason:"deferred_contract_mismatch"}:t?.type==="invalid_request_error"?{errorCode:"CONFIGURATION_INVALID",failureCategory:"invalid_response",reason:Cd.has(t.code)?"intent_unexpected_state":"invalid_request"}:{errorCode:"PROVIDER_RUNTIME_FAILED",failureCategory:"provider_runtime"}}function ra(e){let t=[e?.id,e?.originalPaymentMethodId];for(let n of t)if(typeof n=="string"&&n.startsWith("pm_"))return n}import{FloPay as Ep,PaymentAPI as oi,SESSION_CREATE_TELEMETRY as _p}from"@flopay/js";import{buildCheckoutDisplayData as Tp,classifyTelemetryFailure as Dc,FloPayError as Sn,isDetachedSessionEligible as Mp,isMountableVaultBlock as Ap,resolveBillingApiUrl as xp,resolveButtonsLayoutTheme as Bp,resolveDirectPaypalConfig as Oc,resolveIdempotencyKey as _c,resolveCheckoutLogLayout as Fp,resolveTheme as Nc,SDK_VERSION as Lc,telemetryStatusClass as Dp}from"@flopay/shared";import us,{useCallback as Cn,useEffect as dr,useMemo as Zn,useRef as At,useState as Jt}from"react";import{createContext as Al}from"react";var Jn=Al({flopay:null,paypalFlopay:null,billingApiUrl:""}),sr=Al({session:null,loading:!1,error:null});import{PaymentAPI as zi}from"@flopay/js";import{buildPayPalProcessPaymentRequest as Od,buildPayPalSessionIntentRequest as Nd,buildPayPalTokenizedBody as Ld,classifyTelemetryFailure as zd,describePayPalProcessFailure as Ud,FloPayError as Ui,friendlyPayPalFailureMessage as qd,generateIdempotencyKey as jd,isPayPalTeardownMessage as $d,isValidEmail as zl,mergePayPalPayerIdentity as Wd,needsPayPalPayerDetails as Hd,normalizeGatewayEnvironment as Vd,paypalProviderIdentityRequired as Ul,resolvePayPalApprovalIdentity as Kd,resolvePayPalDeclineReason as Gd,SDK_VERSION as Yd,usesPayPalVaultedChannel as Jd}from"@flopay/shared";import{loadScript as Zd}from"@paypal/paypal-js";import{useCallback as wr,useContext as Xd,useEffect as Ot,useMemo as la,useRef as st,useState as Wr}from"react";import{compactBuyerIdentity as Sd,isValidEmail as wd}from"@flopay/shared";import{useCallback as xl,useEffect as kd,useRef as Bl,useState as Dl}from"react";import{compactBuyerIdentity as lr}from"@flopay/shared";import{jsx as Fl,jsxs as aa}from"react/jsx-runtime";function ko(){let[e,t]=Dl(null),n=Bl(null),o=Bl(0),a=xl((s,c)=>(n.current?.(null),o.current+=1,t({id:o.current,methodLabel:s,identity:c}),new Promise(f=>{n.current=f})),[]),i=xl(s=>{let c=n.current;n.current=null,t(null),c?.(s)},[]);return kd(()=>()=>{n.current?.(null),n.current=null},[]),{request:e,collect:a,finish:i}}function Io({identity:e,methodLabel:t,onComplete:n,onCancel:o,submitting:a=!1,testId:i="flopay-buyer-identity-pane"}){let[s,c]=Dl(e.email?.trim()??""),f=wd(s.trim());return aa("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:[aa("div",{style:{fontWeight:700},children:["Continue with ",t]}),aa("label",{style:{display:"flex",flexDirection:"column",gap:"0.375rem"},children:["Email address",Fl("input",{type:"email",autoComplete:"email","data-testid":"flopay-email",required:!0,value:s,onChange:C=>c(C.target.value),style:{minHeight:42,padding:"0 0.75rem",border:"1px solid #d1d5db",borderRadius:6}})]}),aa("div",{style:{display:"flex",gap:"0.5rem"},children:[o&&Fl("button",{type:"button",onClick:o,style:{flex:1,minHeight:42},children:"Cancel"}),aa("button",{type:"button",disabled:!f||a,onClick:()=>{n(Sd({...e,email:s.trim()}))},style:{flex:2,minHeight:42},children:["Continue with ",t]})]})]})}import{resolveBillingApiUrl as Id}from"@flopay/shared";import{useContext as La}from"react";function jr(){return La(Jn).flopay}function Li(){return La(Jn).paypalFlopay??null}function Rd(){return La(sr)}function Ol(){return La(Jn).billingApiUrl||Id()}import{FLO_INSTRUMENT_ONCE_NAMES as Ed,invokeMerchantCallback as _d,projectFloInstrument as Td}from"@flopay/shared";import{useCallback as Md,useRef as za}from"react";import{FLO_INSTRUMENT_ONCE_NAMES as Nl}from"@flopay/shared";function Ro(e,t){let n=za(e);n.current=e;let o=za(new Set),a=za(t),i=za(t);return Xo(()=>{i.current=t,a.current!==t&&(a.current=t,o.current.clear())},[t]),Md(s=>{if(i.current!==t)return;let c=Td(s);if(c){if(Ed.has(c.name)){if(o.current.has(c.name))return;o.current.add(c.name)}_d(()=>n.current?.(c))}},[t])}import{createContext as Ad}from"react";var ia=Ad(null);function Ua(){let e="unknown";return{current:()=>e,markAvailable:()=>e!=="unknown"?!1:(e="available",!0),markBlocked:()=>e==="blocked"?!1:(e="blocked",!0)}}var xd=Symbol.for("@flopay/js.telemetry.bridge.v1"),Bd=Symbol.for("@flopay/js.telemetry.reporter-factory.v1");function Fd(){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 Dd(e){let t=Fd(),n=(a,i)=>a?a.bind(e):i,o=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:o,elapsed:e.elapsed?e.elapsed.bind(e):a=>Math.max(0,o()-a),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 qa(e){let t=globalThis[Bd];return Dd(t?.(e)??{})}function mn(e){if(e)return e[xd]}import{useCallback as $r,useEffect as Ll,useRef as eo}from"react";function sa(e,t){let n=eo(0),o=eo(null),a=eo(null),i=eo(e),s=eo(t?.onHandoffObserved),c=eo(t?.defersMissingTerminal),f=eo(t?.onMissingTerminalDeferred);Ll(()=>{i.current=e,s.current=t?.onHandoffObserved,c.current=t?.defersMissingTerminal,f.current=t?.onMissingTerminalDeferred},[e,t?.onHandoffObserved,t?.defersMissingTerminal,t?.onMissingTerminalDeferred]);let C=$r((v=a.current)=>{v?.timer&&(clearTimeout(v.timer),v.timer=null)},[]),T=$r(v=>{C();let P=n.current+1;return n.current=P,o.current=null,a.current={generation:P,method:v,timer:null,yieldedControl:!1},P},[C]),I=$r(v=>{let P=a.current;return v!==void 0&&P?.generation!==v?!1:(C(P),a.current=null,(v===void 0||o.current===v)&&(o.current=null),!0)},[C]),z=$r(v=>{let P=a.current,ve=v??P?.generation??n.current;(v===void 0||P?.generation===v)&&(C(P),a.current=null),o.current=ve},[C]),ie=$r(v=>o.current===(v??n.current),[]),O=$r(v=>a.current?.generation===v&&o.current!==v,[]),Se=$r(()=>{let v=a.current;v&&(C(v),!v.yieldedControl&&(v.yieldedControl=!0,s.current?.(v.method)))},[C]),G=$r(()=>{let v=a.current;!v?.yieldedControl||document.visibilityState!=="visible"||(C(v),v.timer=setTimeout(()=>{if(v.timer=null,a.current?.generation===v.generation){if(c.current?.(v.method)){f.current?.(v.method,v.generation);return}a.current=null,o.current=v.generation,i.current(v.method,new Error("External payment method returned without a terminal callback."),{code:"external_method_missing_terminal_callback"})}},ll))},[C]);return Ll(()=>{let v=()=>{document.visibilityState==="visible"?G():Se()};return document.addEventListener("visibilitychange",v),window.addEventListener("blur",Se),window.addEventListener("focus",G),()=>{document.removeEventListener("visibilitychange",v),window.removeEventListener("blur",Se),window.removeEventListener("focus",G),C()}},[C,Se,G]),{startAttempt:T,finishAttempt:I,invalidateAttempt:z,isAttemptInvalidated:ie,isAttemptCurrent:O,generationRef:n}}import{jsx as to,jsxs as qi}from"react/jsx-runtime";var ja=45,Qd=1e3,eu=11e3,tu={width:"100%",minHeight:ja,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"},nu={script_rejected:{errorCode:"PROVIDER_LOAD_FAILED",stage:"provider_load",operationOutcome:"rejected"},namespace_unusable:{errorCode:"PROVIDER_LOAD_FAILED",stage:"provider_load",operationOutcome:"returned_error"},pre_ready_callback:{errorCode:"PROVIDER_RUNTIME_FAILED",stage:"provider_ready",operationOutcome:"returned_error"},render_rejected:{errorCode:"PROVIDER_RUNTIME_FAILED",stage:"provider_ready",operationOutcome:"rejected"},watchdog_expired:{errorCode:"PROVIDER_RUNTIME_FAILED",stage:"provider_ready",operationOutcome:"watchdog_expired"}};function ru(e){return!e.generationActive||e.kind==="teardown"?{action:"ignore"}:e.kind==="ineligible"?{action:"unavailable"}:e.automaticRetryAllowed&&!e.automaticRetryUsed?{action:"retry"}:{action:"exhaust",report:nu[e.kind]??null}}function ql(e,t){return e==="watchdog_expired"?"paypal_render_timeout":cl(t)?"paypal_init_timeout":"paypal_init_failure"}function ou(e){return e>=500?"5xx":e>=400?"4xx":e>=300?"3xx":"unknown"}function jl({sessionId:e,nonce:t,billingApiUrl:n,email:o,billingName:a,onBuyerIdentityReady:i,clientId:s,environment:c,currency:f,isSubscription:C,providerObjectType:T,approvalPresentation:I,onTokenizedBody:z,onComplete:ie,onErrorChange:O,onDecline:Se,onTechnicalFailure:G,isProcessing:v=!1,onLoadStateChange:P,onInitializationStateChange:ve,allowAutomaticRetry:N=!0,onButtonClick:_e,runBeforeButtonClick:Y,session:Ne,existingOrderId:yt,telemetry:Be,telemetryContext:mt,onInstrument:Nt,debug:fe=!1}){let Fe=jr(),bt=Ro(Nt,e),Te=la(()=>{if(Fe)return null;let p=qa({billingApiUrl:n,sdkPackage:"@flopay/react",sdkVersion:Yd,enabled:Be!==!1});return p.setCheckoutContext(mt??{}),p.beginCheckout(mt??{}),p},[n,Fe,Be,mt?.checkoutMode,mt?.layout]),qe=la(()=>mn(Fe),[Fe]);Ot(()=>()=>{Te&&Te.flush().catch(()=>{}).finally(()=>Te.destroy())},[Te]);let Re=la(()=>({error:p=>{qe?qe.error(p):Te?.error(p),bt({class:"technical_error",errorCode:p.requestCategory==="intent_create"?"PAYMENT_PROCESSING_FAILED":p.errorCode,requestCategory:p.requestCategory,provider:p.provider})},log:p=>{qe?qe.log(p):Te?.log(p),bt({class:"lifecycle",name:p.name,provider:p.provider})},performance:p=>{qe?qe.performance(p):Te?.performance(p)},terminal:p=>{qe?qe.terminal(p):Te?.terminal(p)},startTiming:()=>qe?.now()??Te?.now()??0,elapsed:p=>qe?.elapsed(p)??Math.max(0,(Te?.now()??p)-p)}),[bt,qe,Te]),ee=st(null),je=st(0),lt=st(null),It=st(null),rt=st(null),ce=Xd(ia),X=st(null);X.current||(X.current=Ua());let L=ce??X.current,he=st(null),$e=st(!1),[Me,A]=Wr(!1),[Ye,Je]=Wr(!1),[Ze,We]=Wr(0),ze=st(0),[De,be]=Wr(!1),Ct=st(!1),Zt=st(!1),[ot,Lt]=Wr(!1),[E,ne]=Wr(!1),{request:Ue,collect:M,finish:se}=ko(),Xe=st({sessionId:e,required:Ul(o,Ne)});Xe.current.sessionId!==e&&(Xe.current={sessionId:e,required:Ul(o,Ne)});let we=Xe.current.required,ht=la(()=>n.replace(/\/+$/,""),[n]),m=Ne?.gateways?.paypal?.providerObjectType??T,w=m??(C?"subscription":"order"),[Ee]=Wr(Qo),de=Ne?.gateways?.paypal?.approvalPresentation??I,y=Fa(Ee,de==="app_switch"?"app_switch":void 0,w),re=Jd(m),_=la(()=>JSON.stringify([ht,s,f,c??"",w,re,y,e,yt??""]),[ht,s,f,c,yt,w,re,y,e]),F=st(_),j=F.current!==_,et=st(fe),St=st(null),[wt,ct]=Wr([]),$=wr(p=>{et.current&&ct(dt=>[...dt,`${new Date().toISOString().slice(11,23)} ${p}`])},[]);Ot(()=>{et.current=fe,fe&&$("debug:enabled"),St.current?.setEnabled(fe)},[$,fe]);let wn=st(z),On=st(ie),fn=st(O),zt=st(Se),Ut=st(G),Tn=st(_e),vn=st(P),xt=st(ve),jn=st(i),qt=st(Y),ur=st(Ne),jt=st(o),$n=st(a),Ae=st(t),Le=st(null),Bt=st(new Map),kn=st(new Map),In=st(!1);Ot(()=>(In.current=!0,()=>{In.current=!1}),[]),Ot(()=>{wn.current=z},[z]),Ot(()=>{jn.current=i},[i]),Ot(()=>{On.current=ie},[ie]),Ot(()=>{fn.current=O},[O]),Ot(()=>{zt.current=Se},[Se]),Ot(()=>{Ut.current=G},[G]),Ot(()=>{Tn.current=_e},[_e]),Ot(()=>{vn.current=P},[P]),Ot(()=>{xt.current=ve},[ve]),Ot(()=>{qt.current=Y},[Y]),Ot(()=>{ur.current=Ne},[Ne]),Ot(()=>{jt.current=o},[o]),Ot(()=>{$n.current=a},[a]),Ot(()=>{Ae.current=t},[t]),Ot(()=>{ze.current=Ze},[Ze]),Ot(()=>{De&&he.current?.focus()},[De,Ze]);let Rn=wr(()=>{window.setTimeout(()=>{he.current?.focus()},0)},[]),gn=wr(()=>{A(!1),We(p=>p+1)},[]),bn=wr(()=>{be(!1),(ee.current?.querySelector('iframe, button, [tabindex]:not([tabindex="-1"])')??ee.current)?.focus?.()},[]);Ot(()=>{!Me||!$e.current||($e.current=!1,bn())},[bn,Me,Ze]);let ln=wr((p,dt)=>{let W=dt?.popupBlocked??zr(p);W&&L.markBlocked();let oe=xa("PayPal",W,Ee.inAppBrowser),Pt=Ut.current;if(Pt){let tt=W&&Ee.inAppBrowser?new Ui(oe,"api_error",{code:dt?.code??"paypal_popup_blocked"}):p;Pt("paypal",tt,dt);return}fn.current?.(oe)},[L,Ee.inAppBrowser]),on=wr(p=>{let dt=lt.current,W=It.current;dt===null||!W||(Re.log({...W,popupCapability:L.current(),name:"provider.overlay.returned",stage:"overlay_return",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:p}),Re.performance({...W,popupCapability:L.current(),stage:"overlay_return",durationMs:Re.elapsed(dt),durationMode:"buyer",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:p}),lt.current=null)},[L,Re]),$t=wr((p,dt,W)=>{let oe=It.current;on("overlay_timeout"),oe&&Re.error({...oe,popupCapability:L.current(),errorCode:"REQUEST_TIMEOUT",failureCategory:"provider_runtime",stage:"overlay_return",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk",statusClass:"timeout",terminalReason:"overlay_timeout"}),ln(dt,{...W,telemetryReported:!0,provider:"paypal",paymentMethodCategory:"paypal",presentationMode:y,terminalReason:"overlay_timeout"}),be(!0),gn(),Rn()},[on,Rn,ln,L,y,gn,Re]),Rt=wr(()=>{L.markAvailable();let p=It.current;p&&(rt.current=p.attempt,Re.log({...p,popupCapability:L.current(),name:"provider.popup.opened",stage:"overlay_open",provider:"paypal",paymentMethodCategory:"paypal"}))},[L,Re]),{finishAttempt:cn,generationRef:dn,invalidateAttempt:ue,isAttemptCurrent:Xn,isAttemptInvalidated:Mn,startAttempt:pr}=sa($t,{onHandoffObserved:Rt}),tn=wr(()=>(be(!1),pr("paypal")),[pr]),hn=wr(p=>{ue(p?.generation),p?.showRetry&&be(!0),p?.remount&&gn(),p?.focus!==!1&&Rn()},[Rn,ue,gn]),yr=p=>{let dt=Le.current;return dt&&kn.current.set(p,dt),p};Ot(()=>{F.current!==_&&(F.current=_,Ct.current=!1,Zt.current=!1,A(!1),Je(!1),Lt(!1),xt.current?.("loading"))},[_]),Ot(()=>{Dt(()=>vn.current?.(Me&&!ot))},[Me,ot]);let Wn=Vd(c);Ot(()=>{let p={attempt:dn.current+1,inAppBrowser:Ee.inAppBrowser,appFamily:Ee.appFamily,popupCapability:L.current(),presentationMode:y},dt=()=>({...It.current??p,popupCapability:L.current()}),W={error:l=>Re.error({...l,...dt()}),log:l=>Re.log({...l,...dt()}),performance:l=>Re.performance({...l,...dt()}),terminal:l=>Re.terminal({...l,...dt()}),startTiming:Re.startTiming,elapsed:Re.elapsed},oe=s?`${s.slice(0,6)}\u2026(len ${s.length})`:"(empty)",Pt=typeof navigator>"u"?"(no navigator)":navigator.userAgent;if($(`mount clientId=${oe} env=${c??"(unset)"}\u2192${Wn??"live"} ccy=${f} sub=${C}`),$(`ua=${Pt.slice(0,80)}${Pt.length>80?"\u2026":""}`),!s){$("FAIL: clientId empty \u2014 gateway misconfigured"),Lt(!0),W.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(!ee.current){$("FAIL: containerRef not attached");return}je.current=W.startTiming(),W.log({name:"provider.load.started",stage:"provider_load",provider:"paypal",paymentMethodCategory:"paypal"});let tt=!1,kt=!1,ke=()=>tt||kt,An=re?w:void 0,Dr,_t=!1,Nn=()=>{Dr=jd(),Dr||console.warn("[FloPay] DirectPayPal: secure idempotency key unavailable; retries may not be deduplicated."),_t=!0},Qn=null,er=!1,Ht=null,mr=!1,fr=()=>{!Ht||mr||(mr=!0,Ht.close().catch(()=>{}))},xn=!1,gr=!1,Hn=ee.current,hr=null,Er=null,Ln=[],tr=null,nr=!1,Mt=!1,zn=null,En=l=>{if(!l||typeof l.getBoundingClientRect!="function")return"(no rect)";let u=l.getBoundingClientRect();return`${Math.round(u.width)}\xD7${Math.round(u.height)}`},rr=l=>{if(!l)return"(empty)";try{let u=new URL(l,typeof window>"u"?"https://localhost":window.location.href),h=u.pathname.toLowerCase();return h.includes("checkcaptcha")||h.includes("captcha")?`CAPTCHA(${u.host}${h})`:h.includes("risk")||h.includes("challenge")?`RISK(${u.host}${h})`:h.includes("smart/buttons")?`smart-buttons(${u.host})`:`${u.host}${h}`.slice(0,100)}catch{return l.slice(0,80)}},or=l=>{let u=l.getAttribute("src"),h=l.getAttribute("srcdoc"),V=l.getAttribute("name"),pe=l.getAttribute("sandbox"),Ce=[];return u&&Ce.push(`src=${rr(u)}`),h&&Ce.push(`srcdoc[${h.length}ch]`),!u&&!h&&Ce.push("src=(empty) srcdoc=(empty)"),V&&Ce.push(`name=${V.slice(0,40)}`),pe!==null&&Ce.push(`sandbox="${pe.slice(0,40)}"`),Ce.join(" ")},nt=l=>{if(!(l instanceof HTMLIFrameElement))return"";try{let u=l.contentDocument;if(!u)return"cd=null";let h=u.body?.children.length??0,V=u.body?.innerHTML.length??0,pe=u.head?.innerHTML.length??0;return`cd=same-origin readyState=${u.readyState} body[${h}children,${V}ch] head[${pe}ch]`}catch(u){return`cd=cross-origin(${u.message.slice(0,30)})`}},nn=[],un=l=>{if(ke())return;let u=l.message??String(l.error??"(no message)");u&&(u.toLowerCase().includes("paypal")||u.toLowerCase().includes("zoid")||u.toLowerCase().includes("postrobot")||u.toLowerCase().includes("storage"))&&($(`window:error ${u.slice(0,140)}`),nn.push(u))},Bn=l=>{if(ke())return;let u=l.reason instanceof Error?l.reason.message:String(l.reason??"(no reason)");u&&(u.toLowerCase().includes("paypal")||u.toLowerCase().includes("zoid")||u.toLowerCase().includes("postrobot")||u.toLowerCase().includes("storage"))&&($(`window:rejection ${u.slice(0,140)}`),nn.push(u))},Or={value:0},Pr=()=>{hr?.disconnect(),hr=null,Er?.disconnect(),Er=null;for(let l of Ln.splice(0))clearTimeout(l);Mt=!1,nr&&typeof window<"u"&&(window.removeEventListener("error",un),window.removeEventListener("unhandledrejection",Bn)),nr=!1},_r=()=>{if(!(nr||ke()||xn)){if(nr=!0,nn.length=0,Or.value=0,typeof window<"u"&&(window.addEventListener("error",un),window.addEventListener("unhandledrejection",Bn)),typeof PerformanceObserver<"u")try{Er=new PerformanceObserver(l=>{if(!ke())for(let u of l.getEntries()){if(!u.name.toLowerCase().includes("paypal"))continue;Or.value+=1;let h=Math.round(u.duration);$(`net ${h}ms ${u.name.slice(0,90)}`)}}),Er.observe({type:"resource",buffered:!0})}catch{}zn?.()}},Vn=()=>{tr&&(clearTimeout(tr),tr=null)},rn=()=>{Pr(),Vn()},Nr={setEnabled:l=>{l?_r():Pr()}};St.current=Nr,et.current&&_r();let an=$d,k=l=>{if(ke()||an(l))return;let u=wo(l)??l;Dt(()=>fn.current?.(u))},b=(l,u)=>{if(tt||er)return;er=!0,kt=!0,rn(),fr();let h=ru({kind:l,generationActive:!0,automaticRetryAllowed:N,automaticRetryUsed:Ct.current});if(h.action==="retry"){Ct.current=!0,A(!1),ne(!1),Je(!0),xt.current?.("retrying"),Qn=setTimeout(()=>{tt||We(V=>V+1)},Qd);return}if(A(!1),ne(!1),Je(!1),Lt(!0),h.action!=="ignore"){if(xt.current?.("exhausted"),h.action==="unavailable"){console.error("[FloPay] DirectPayPal load/render failure:",u);return}if(h.report){let V=Ti({code:ql(l,u),message:u},{inAppBrowser:Ee.inAppBrowser,handoffObserved:!1});V.popupBlocked&&L.markBlocked(),W.error({errorCode:V.popupBlocked?V.errorCode:h.report.errorCode,stage:h.report.stage,operationOutcome:h.report.operationOutcome,provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk",failureCategory:"provider_runtime",terminalReason:V.terminalReason})}Zt.current||(Zt.current=!0,console.error("[FloPay] Direct PayPal initialization failed:",ql(l,u)))}};Lt(!1);let H=async(l,u=Le.current)=>{if(ke())return;let h=u?.sessionId??e;if(wn.current){await wn.current(l,{sessionId:h,accountPatch:u?.accountPatch,nonce:u?.nonce});return}let V=W.startTiming();W.log({name:"payment.processing.started",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"});let pe=()=>{W.log({name:"payment.processing.completed",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"}),W.performance({stage:"processing",durationMs:W.elapsed(V),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"process_payment"})};try{let Ce=Od({body:l,sessionId:h,nonce:u?.nonce??Ae.current,accountPatch:u?.accountPatch,session:ur.current,email:jt.current}),te=await new zi(ht,{telemetry:!1}).processPayment(Ce.userId,Ce.params);if(te.ok){if(kt||tt&&In.current)return;pe(),W.terminal({outcome:"payment_succeeded",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:"approved"}),Dt(()=>On.current?.({status:"succeeded",checkoutMethod:"paypal"}));return}if(ke())return;let Ie=await te.json().catch(()=>null),Oe=Ud(Ie),at=Oe.message;pe(),te.status===400&&(typeof Ie?.declineCode=="string"||!Array.isArray(Ie?.fields))?W.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:"approved"}):te.status===400||te.status===422?W.terminal({outcome:"validation_rejected",provider:"paypal",paymentMethodCategory:"paypal",statusClass:"4xx",terminalReason:"approved"}):W.error({errorCode:"PAYMENT_PROCESSING_FAILED",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"process_payment",statusClass:ou(te.status),failureCategory:te.status>=500?"server_error":void 0}),k(at),Dt(()=>zt.current?.(yn("paypal",at,{code:Oe.code,declineCode:Oe.declineCode})));return}catch(Ce){if(ke())return;pe(),W.error({errorCode:"NETWORK_REQUEST_FAILED",failureCategory:"transport_error",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"process_payment",statusClass:"network_error"});let Kt=qd(Ce instanceof Error?Ce.message:void 0);k(Kt),Dt(()=>zt.current?.(yn("paypal",Kt)));return}},J=()=>new Ui("PayPal render was superseded.","api_error",{code:"paypal_render_superseded"}),ut=l=>ke()?Promise.reject(J()):Promise.resolve(l),Vt=async l=>{if(ke())throw J();_t||Nn();let u=Le.current,h=u?.sessionId??e,V=u?.nonce??Ae.current;W.log({name:"payment.intent.started",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create"});let pe;try{pe=await new zi(ht,{telemetry:!1}).createSessionIntent(h,V??"",Nd(An),{idempotencyKey:Dr})}catch(Ce){throw W.error({...zd(Ce,"PAYMENT_PROCESSING_FAILED","unknown"),stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create"}),Ce}if(ke())throw J();if(pe.provider!=="paypal"||pe.providerObjectType!==w)throw new Error(l);return W.log({name:"payment.intent.completed",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create",statusClass:"2xx"}),pe.providerObjectId},ye=(l,u)=>{let h=u?.nonce??Ae.current;if(!h)return;let V=u?.sessionId??e,pe=Gd(l);new zi(ht,{telemetry:!1}).reportSessionIntentDecline(V,h,{provider:"paypal",paymentMethodCategory:"wallet",paymentMethodType:"paypal",providerDeclineReason:pe}).catch(()=>{})},x=Ze;$("loadScript:scheduled (deferred 1 tick)");let B=null,R=setTimeout(()=>{if(tt){$("loadScript:skipped (cancelled before defer ran)");return}$("loadScript:start");let l=Wn==="live"?"production":Wn,u={};w==="subscription"?u={intent:"subscription",vault:!0}:w==="order"&&(u={intent:"capture"}),B=Zd({clientId:s,currency:f,...u,...l?{environment:l}:{},...l==="sandbox"?{dataNamespace:"paypal_sandbox"}:{}});let h=!1;B.then(V=>{if(h=!0,$(`loadScript:resolved inactive=${ke()} ns=${!!V} buttons=${!!V?.Buttons}`),ke())return;if(!V?.Buttons){$("FAIL: namespace missing Buttons factory"),b("namespace_unusable","PayPal SDK did not expose the Buttons factory.");return}W.log({name:"provider.ready",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"}),W.performance({stage:"provider_ready",durationMs:W.elapsed(je.current),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk"}),W.log({name:"provider.availability.checked",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"});let pe=async(Z,S)=>{if(ke()||ze.current!==x)return;let U=Z.vaultSetupToken??Z.subscriptionID??Z.orderID??"",He=U?kn.current.get(U):Bt.current.get(x);if(!(!He||!Xn(He.generation))&&cn(He.generation)){kn.current.delete(U),Bt.current.delete(He.surfaceKey),on("approved");try{if(ne(!0),Dt(()=>fn.current?.(null)),!U)throw new Ui("PayPal did not return an approval token.","api_error",{code:"paypal_missing_token"});let Pe=Kd({accountPatch:He.accountPatch,email:jt.current,billingName:$n.current,session:ur.current});if(Hd(Pe))try{Pe=Wd(Pe,await S?.order?.get?.())}catch{}if((jn.current||we)&&!zl(Pe.email)){let ft=await M("PayPal",Pe);if(!ft)return;Pe=ft}zl(Pe.email)&&(He.accountPatch=lr({...He.accountPatch,...Pe}),await jn.current?.(Pe));let xe=Ld(U,An);await H(xe,He)}catch(Pe){k(Pe instanceof Error?Pe.message:"PayPal capture failed.")}finally{ke()||ne(!1)}}},Ce=Z=>{let S=yt?()=>ut(yt):()=>Vt(Z);return async()=>yr(await S())},Kt=V.Buttons({style:{layout:"horizontal",height:ja,tagline:!1},...y==="app_switch"?{appSwitchWhenAvailable:!0}:{},onClick:async(Z,S)=>{if(ke()){await S.reject();return}Nn();let U=qt.current,He={};if(U)try{let ft=await U("paypal");if(ke()){await S.reject();return}if(!ft.proceed){Le.current=null,Bt.current.delete(x),await S.reject();return}He={sessionId:ft.sessionId,accountPatch:ft.accountPatch,nonce:ft.nonce}}catch(ft){$(`onClick:runBeforeButtonClick rejected msg=${(ft instanceof Error?ft.message:String(ft)).slice(0,120)}`),Le.current=null,Bt.current.delete(x),await S.reject();return}Dt(()=>Tn.current?.("paypal"));let Pe=tn(),xe={generation:Pe,surfaceKey:x,...He};Le.current=xe,Bt.current.set(x,xe),It.current={...p,attempt:Pe},await S.resolve(),W.log({name:"payment.method.selected",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"}),W.log({name:"provider.handoff.requested",stage:"overlay_open",provider:"paypal",paymentMethodCategory:"paypal"}),lt.current=W.startTiming()},createOrder:w==="order"?Ce("Failed to create PayPal order."):void 0,createSubscription:w==="subscription"?Ce("Failed to create PayPal subscription."):void 0,createVaultSetupToken:w==="setup_token"?async()=>yr(await Vt("Failed to create PayPal setup token.")):void 0,onApprove:pe,onCancel:()=>{if(ke())return;let Z=Bt.current.get(x)??Le.current;Z&&Bt.current.delete(Z.surfaceKey),Le.current=null,on("cancelled"),W.terminal({outcome:"payment_cancelled",terminalReason:"cancelled",provider:"paypal",paymentMethodCategory:"paypal"}),$e.current=!0,hn({generation:Z?.generation,remount:!0,focus:!1})},onError:Z=>{if(ke()||ze.current!==x)return;let S=Z instanceof Error?Z.message:"PayPal failed to render.";if($(`onError rendered=${xn} msg=${S.slice(0,120)}`),xn){let U=Bt.current.get(x)??Le.current;if(U&&!Xn(U.generation)||!U&&Mn())return;if(an(S)){cn(U?.generation);return}let{errorCode:He,popupBlocked:Pe,providerDeclined:xe,terminalReason:ft}=Ti(Z,{inAppBrowser:Ee.inAppBrowser,handoffObserved:U!=null&&rt.current===U.generation});if(Pe&&L.markBlocked(),on(ft),xe){W.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:ft}),ye(Z,U),Dt(()=>zt.current?.(yn("paypal",S))),U&&Bt.current.delete(U.surfaceKey),Le.current=null,cn(U?.generation);return}W.error({errorCode:He,failureCategory:"provider_runtime",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk",terminalReason:ft}),U&&Bt.current.delete(U.surfaceKey),Le.current=null,hn({generation:U?.generation,remount:!0,showRetry:!0,focus:!0}),ln(Z,{code:"paypal_runtime_failed",popupBlocked:Pe,telemetryReported:!0,provider:"paypal",paymentMethodCategory:"paypal",presentationMode:y,terminalReason:ft});return}b(an(S)?"teardown":"pre_ready_callback",S)}}),te=Kt.isEligible();if($(`isEligible=${te}`),W.log({name:"provider.eligibility.checked",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"}),!te){A(!1),b("ineligible","PayPal buttons are not eligible to render in this context (paypal_ineligible).");return}gr=!0,Ht=Kt,zn=()=>{if(!nr||Mt||ke()||xn)return;Mt=!0,$(`container:dims ${En(Hn)} visibility=${typeof document>"u"?"(no document)":document.visibilityState}`),typeof MutationObserver<"u"&&(hr=new MutationObserver(S=>{if(!ke()){for(let U of S)if(U.type==="childList")U.addedNodes.forEach(He=>{if(!(He instanceof Element))return;let Pe=He.tagName.toLowerCase(),xe=(He.getAttribute("title")??"").slice(0,40),ft=Pe==="iframe"?` ${or(He)}`:"";$(`child+ ${Pe}${xe?` title="${xe}"`:""}${ft} dims=${En(He)}`)});else if(U.type==="attributes"&&U.target instanceof Element){let He=U.target;if(He.tagName.toLowerCase()!=="iframe")continue;let Pe=U.attributeName;(Pe==="src"||Pe==="srcdoc")&&$(`attr~ iframe ${Pe}=${Pe==="srcdoc"?`[${(He.getAttribute("srcdoc")??"").length}ch]`:rr(He.getAttribute("src"))} dims=${En(He)}`)}}}),hr.observe(Hn,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["src","srcdoc"]}));let Z=S=>{if(ke()||xn)return;let U=Hn.querySelectorAll("iframe"),He=typeof document<"u"&&"hasStorageAccess"in document;$(`watchdog:${S} container=${En(Hn)} children=${Hn.childElementCount} iframes=${U.length} visibility=${typeof document>"u"?"(no document)":document.visibilityState} cookies=${typeof navigator>"u"?"?":navigator.cookieEnabled} hasStorageAccessApi=${He} paypalNetRequests=${Or.value}`),U.forEach((Pe,xe)=>{let ft=(Pe.getAttribute("title")??"").slice(0,40);$(` iframe[${xe}] ${En(Pe)}${ft?` title="${ft}"`:""} ${or(Pe)}`);let Qe=nt(Pe);Qe&&$(` ${Qe}`)}),nn.length===0&&$(" (no PayPal/zoid window errors captured)")};Ln.push(setTimeout(()=>Z("3s"),3e3)),Ln.push(setTimeout(()=>Z("8s"),8e3)),Ln.push(setTimeout(()=>Z("15s"),15e3))},zn(),$("render:start");let Oe=W.startTiming();tr=setTimeout(()=>{ke()||xn||($("watchdog:11s retryable render timeout"),b("watchdog_expired","PayPal Buttons render did not settle within 11000ms."))},eu);let at=Kt.render(Hn);(async()=>{try{if(await at,$(`render:resolved inactive=${ke()}`),rn(),ke()){fr();return}xn=!0,A(!0),Je(!1),xt.current?.("ready"),W.log({name:"checkout.rendered",stage:"checkout_render",provider:"paypal",paymentMethodCategory:"paypal"}),W.performance({stage:"checkout_render",durationMs:W.elapsed(Oe),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"})}catch(Z){let S=Z instanceof Error?Z.message:"PayPal failed to render.";$(`render:rejected msg=${S.slice(0,120)}`),rn(),b(an(S)?"teardown":"render_rejected",S)}})()}).catch(V=>{let pe=V instanceof Error?V.message:"PayPal operation failed.";$(`provider:failed msg=${pe.slice(0,120)}`);let Ce="script_rejected";h&&an(pe)?Ce="teardown":h&&gr&&(Ce="render_rejected"),b(Ce,pe)})},0);return()=>{tt=!0,clearTimeout(R),Qn&&clearTimeout(Qn),rn(),St.current===Nr&&(St.current=null),fr(),lt.current=null,It.current=null}},[N,ht,s,f,c,w,y,re,e,yt,Ze,Re,M,we,$,on]);let Wt=fe?qi("pre",{"data-testid":"flopay-direct-paypal-debug",style:{margin:"0 0 8px 0",padding:"6px 8px",background:ot?"#fef2f2":"#f3f4f6",border:`1px solid ${ot?"#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=${Me} failed=${ot})`,wt.length===0?`
|
|
1
|
+
import{a as bl}from"./chunk-D4CVZRT4.mjs";import{c as zt,d as Sr,e as Qo,f as Ti,g as ll,h as od,j as ad}from"./chunk-YR36EYW2.mjs";import{a as Pl}from"./chunk-HSYSKQPT.mjs";import{a as ta,b as Oa,c as xi,d as Bi,e as Fi,f as yl,g as ml,h as fl,i as gl,j as hl,k as vl}from"./chunk-H4MQCBX4.mjs";import{a as Ba,b as Mi,c as cl,d as Ai,e as ho,f as dl,g as Ur,h as Fa,i as ul,j as ea,k as Da,l as pl}from"./chunk-VK67324N.mjs";import{dropThirdPartyOnlyError as Af}from"@flopay/shared";import{PaymentAPI as Cs}from"@flopay/js";import{FloPayError as Ca,resolveBillingApiUrl as Kp,resolveButtonsLayoutTheme as Gp,resolveTheme as Yp}from"@flopay/shared";import{useCallback as Or,useEffect as Lo,useMemo as ba,useRef as zo,useState as Uo}from"react";import{Fragment as Co,jsx as Qn,jsxs as Cl}from"react/jsx-runtime";function id(){return Cl(Co,{children:[Cl("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:[Qn("rect",{width:"20",height:"14",x:"2",y:"5",rx:"2"}),Qn("line",{x1:"2",x2:"22",y1:"10",y2:"10"})]}),"Credit / Debit Card",Qn("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:Qn("path",{d:"M9 18l6-6-6-6"})})]})}function sd(){return Qn(Co,{children:"Go back"})}function ld(){return Qn(Co,{children:"Secure card checkout"})}function Po(e){return e!==void 0&&(e===""||e===null||e===!1)}function vo({content:e}){return Qn(Co,{children:e===void 0?Qn(id,{}):e})}function bo({content:e}){return Qn(Co,{children:e===void 0?Qn(sd,{}):e})}function na({content:e}){return Qn(Co,{children:e===void 0?Qn(ld,{}):e})}import{CHECKOUT_PROCESSING_TIMEOUT_MESSAGE as cd,canRecoverHostedCardForm as dd,classifyTelemetryFailure as ud,FloPayError as En,isCardHolderNamePlaceholder as pd,isMoneySettledOutcome as yd,isMountableVaultBlock as md,isSetupIntentClientSecret as fd,isValidEmail as gd,resolveSetupFutureUsage as hd,resolveWalletModeOptions as Pd}from"@flopay/shared";import{canRecoverHostedCardForm as to,hasServerSideCardGateway as Al}from"@flopay/shared";import{splitFullName as aa}from"@flopay/shared";import{applyFriendlyMessageOverride as ko}from"@flopay/shared";var vd="Checkout is temporarily unavailable. Please try again later.";function Di(e){return{errorCode:"PROVIDER_LOAD_FAILED",failureCategory:e instanceof En&&e.type==="authentication_error"?"invalid_response":"provider_runtime",stage:"provider_load",provider:"stripe",requestCategory:"provider_sdk"}}function bd(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 Sl(){return new En(vd,"api_error",{code:"CheckoutInitializationFailed"})}function wl(e,t,n){let o=e?.data.session,a=o?.gateways?.stripe?.enabledPaymentMethods??e?.data.stripe?.enabledPaymentMethods;return!!(n&&(md(o?.vault)||o?.gateways?.pcivault||a?.includes("card")||dd(o))||t&&e?.data.paypal?.publishableKey)}function kl(e,t){if(t&&(!(e instanceof En)||e.type==="authentication_error"))return Di(e);if(!(e instanceof En&&bd(e))){if(!t&&!(e instanceof En)&&(e instanceof TypeError||e instanceof SyntaxError))return{...ud(e,"NETWORK_REQUEST_FAILED"),stage:"session_read",requestCategory:"session_read"};if(!t&&e instanceof En)return{errorCode:"NETWORK_REQUEST_FAILED",stage:"session_read",requestCategory:"session_read"};if(!(e instanceof En))return{errorCode:"INTERNAL_SDK_ERROR",stage:"checkout_mount"}}}function So(e,t,n,o={}){let a;return(i={})=>{if(a!==void 0)return a;let s={...o,...i,email:i.email?.trim()||o.email?.trim()},c=pd(s.firstName,s.lastName);if(!gd(s.email))return Promise.reject(new En("A valid buyer email is required before claiming checkout.","validation_error",{code:"BuyerEmailCollectionRequired",param:"account.email"}));let y={};for(let[v,B]of Object.entries(s)){if(c&&v.endsWith("Name")||typeof B!="string")continue;let R=B.trim();R&&(y[v]=R)}return a=e.claimCheckoutSession(t,n,{accountData:y}),a.catch(()=>{}),a}}function Il(e,t){if(!t)return e;if(!e)return t;let n;return"checkoutMetadata"in t?n=t:"checkoutMetadata"in e&&(n=e),{account:{...e.account??{},...t.account??{}},couponCodes:t.couponCodes??e.couponCodes,...n?{checkoutMetadata:n.checkoutMetadata}:{},tagsData:{...e.tagsData??{},...t.tagsData??{}},utmMetadata:t.utmMetadata??e.utmMetadata}}function Oi(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 Rl(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}))],o=n.reduce((i,s)=>i+(s.overrideAmount??s.totalAmount??0),0),a=e.currency??n.find(i=>i.currency)?.currency??"USD";return{id:"",clientSecret:"",mode:n.some(i=>i.type==="subscription")?"subscription":"payment",amount:Math.round(o*100),currency:a,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,s)=>({uuid:`synthetic-${i.type??"item"}-${s}`,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??a,metadata:i.metadata??null}))}}function Ni(e,t){return t?{...e,...t}:e}function dn(e,t,n){let o=typeof t=="string"?t:t.message,a=typeof t=="string"?n?.code:n?.code??t.code,i=typeof t=="string"?n?.declineCode:n?.declineCode??t.declineCode,s=typeof t=="string"?void 0:t.sessionId;return{method:e,message:o,...a?{code:a}:{},...i?{declineCode:i}:{},...s?{sessionId:s}:{}}}function qr(e,t){return t&&e.sessionId===void 0&&Object.defineProperty(e,"sessionId",{value:t,enumerable:!0}),e}function xr(e,t){return e.status!=="authorized"?{status:"succeeded"}:{status:"authorized",paymentId:e.paymentId,sessionId:e.id||t||void 0,authorizationExpiresAt:e.authorizationExpiresAt}}function Br(e){return e?.status==="authorized"||e?.status==="complete"}function jr(e,t){if(e.data.session)return e.data.session;let n=e.raw,o=n?.latestTransactionAttempt?.result,a=n?.status==="authorized"||o==="AUTHORIZED";return a||n?.status==="completed"||o==="SUCCESS"?{...t,status:a?"authorized":"complete"}:n?.status==="expired"?{...t,status:"expired"}:void 0}function El(e){return e?.status==="expired"&&(e.failureOutcome==="authorization_expired"||e.captureMethod==="manual")}function Na(e){let t=El(e);return new En(t?"Authorization has expired.":"Checkout session has expired.","api_error",{code:t?"authorization_expired":"checkout_session_expired"})}function La(e){return e instanceof En||typeof e=="object"&&e!==null&&"code"in e?e.code:void 0}function wo(e){return El(e)?new En("Authorization has expired.","api_error",{code:"authorization_expired"}):e?.status==="expired"?new En("Automatic payment failed. Please try again.","api_error",{code:"checkout_session_expired"}):new En(cd,"api_error",{code:"checkout_processing_timeout"})}function ra(e,t){return e==="processing"||yd(e,t)}function _l(e){return e==="succeeded"?"succeeded":e==="processing"||e==="requires_capture"?"processing":"failed"}async function Tl(e,t){let n=e;if(fd(t)){if(!n?.retrieveSetupIntent)return null;let{setupIntent:i,error:s}=await n.retrieveSetupIntent(t);if(s)throw new En(s.message??"Failed to retrieve setup intent.","api_error",{...s.code?{code:s.code}:{}});return i??null}if(!n?.retrievePaymentIntent)return null;let{paymentIntent:o,error:a}=await n.retrievePaymentIntent(t);if(a)throw new En(a.message??"Failed to retrieve payment intent.","api_error",{...a.code?{code:a.code}:{}});return o??null}var Cd=["apple_pay","google_pay"];function Ml(e,t="automatic",n){let o=hd(n,Cd,"wallet");return{...Pd(e,t),paymentMethodTypes:["card"],...o?{setupFutureUsage:o}:{}}}var Sd=new Set(["payment_intent_unexpected_state","setup_intent_unexpected_state"]);function Li(e){let t=e&&typeof e=="object"?e:null;return t?.name==="IntegrationError"||t?.code==="elements_intent_mismatch"?{errorCode:"CONFIGURATION_INVALID",failureCategory:"invalid_response",reason:"deferred_contract_mismatch"}:t?.type==="invalid_request_error"?{errorCode:"CONFIGURATION_INVALID",failureCategory:"invalid_response",reason:Sd.has(t.code)?"intent_unexpected_state":"invalid_request"}:{errorCode:"PROVIDER_RUNTIME_FAILED",failureCategory:"provider_runtime"}}function oa(e){let t=[e?.id,e?.originalPaymentMethodId];for(let n of t)if(typeof n=="string"&&n.startsWith("pm_"))return n}import{FloPay as Tp,PaymentAPI as ai,SESSION_CREATE_TELEMETRY as Mp}from"@flopay/js";import{buildCheckoutDisplayData as Ap,classifyTelemetryFailure as Oc,FloPayError as wn,isDetachedSessionEligible as xp,isMountableVaultBlock as Bp,resolveBillingApiUrl as Fp,resolveButtonsLayoutTheme as Dp,resolveDirectPaypalConfig as Nc,resolveIdempotencyKey as Tc,resolveCheckoutLogLayout as Op,resolveTheme as Lc,SDK_VERSION as zc,telemetryStatusClass as Np}from"@flopay/shared";import ps,{useCallback as Sn,useEffect as pr,useMemo as tr,useRef as Ot,useState as Ht}from"react";import{createContext as xl}from"react";var er=xl({flopay:null,paypalFlopay:null,billingApiUrl:""}),cr=xl({session:null,loading:!1,error:null});import{PaymentAPI as Ui}from"@flopay/js";import{buildPayPalCancelEvent as Nd,buildPayPalProcessPaymentRequest as Ld,buildPayPalSessionIntentRequest as zd,buildPayPalTokenizedBody as Ud,classifyTelemetryFailure as qd,describePayPalProcessFailure as jd,FloPayError as qi,friendlyPayPalFailureMessage as $d,generateIdempotencyKey as Wd,isPayPalTeardownMessage as Hd,isValidEmail as Ul,mergePayPalPayerIdentity as Vd,needsPayPalPayerDetails as Kd,normalizeGatewayEnvironment as Gd,paypalProviderIdentityRequired as ql,resolvePayPalApprovalIdentity as Yd,resolvePayPalDeclineReason as Jd,SDK_VERSION as Zd,usesPayPalVaultedChannel as Xd}from"@flopay/shared";import{loadScript as Qd}from"@paypal/paypal-js";import{useCallback as wr,useContext as eu,useEffect as Ut,useMemo as ca,useRef as nt,useState as Hr}from"react";import{compactBuyerIdentity as wd,isValidEmail as kd}from"@flopay/shared";import{useCallback as Bl,useEffect as Id,useRef as Fl,useState as Ol}from"react";import{compactBuyerIdentity as dr}from"@flopay/shared";import{jsx as Dl,jsxs as ia}from"react/jsx-runtime";function Io(){let[e,t]=Ol(null),n=Fl(null),o=Fl(0),a=Bl((s,c)=>(n.current?.(null),o.current+=1,t({id:o.current,methodLabel:s,identity:c}),new Promise(y=>{n.current=y})),[]),i=Bl(s=>{let c=n.current;n.current=null,t(null),c?.(s)},[]);return Id(()=>()=>{n.current?.(null),n.current=null},[]),{request:e,collect:a,finish:i}}function Ro({identity:e,methodLabel:t,onComplete:n,onCancel:o,submitting:a=!1,testId:i="flopay-buyer-identity-pane"}){let[s,c]=Ol(e.email?.trim()??""),y=kd(s.trim());return ia("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:[ia("div",{style:{fontWeight:700},children:["Continue with ",t]}),ia("label",{style:{display:"flex",flexDirection:"column",gap:"0.375rem"},children:["Email address",Dl("input",{type:"email",autoComplete:"email","data-testid":"flopay-email",required:!0,value:s,onChange:v=>c(v.target.value),style:{minHeight:42,padding:"0 0.75rem",border:"1px solid #d1d5db",borderRadius:6}})]}),ia("div",{style:{display:"flex",gap:"0.5rem"},children:[o&&Dl("button",{type:"button",onClick:o,style:{flex:1,minHeight:42},children:"Cancel"}),ia("button",{type:"button",disabled:!y||a,onClick:()=>{n(wd({...e,email:s.trim()}))},style:{flex:2,minHeight:42},children:["Continue with ",t]})]})]})}import{resolveBillingApiUrl as Rd}from"@flopay/shared";import{useContext as za}from"react";function $r(){return za(er).flopay}function zi(){return za(er).paypalFlopay??null}function Ed(){return za(cr)}function Nl(){return za(er).billingApiUrl||Rd()}import{FLO_INSTRUMENT_ONCE_NAMES as _d,invokeMerchantCallback as Td,projectFloInstrument as Md}from"@flopay/shared";import{useCallback as Ad,useRef as Ua}from"react";import{FLO_INSTRUMENT_ONCE_NAMES as Ll}from"@flopay/shared";function Eo(e,t){let n=Ua(e);n.current=e;let o=Ua(new Set),a=Ua(t),i=Ua(t);return Qo(()=>{i.current=t,a.current!==t&&(a.current=t,o.current.clear())},[t]),Ad(s=>{if(i.current!==t)return;let c=Md(s);if(c){if(_d.has(c.name)){if(o.current.has(c.name))return;o.current.add(c.name)}Td(()=>n.current?.(c))}},[t])}import{createContext as xd}from"react";var sa=xd(null);function qa(){let e="unknown";return{current:()=>e,markAvailable:()=>e!=="unknown"?!1:(e="available",!0),markBlocked:()=>e==="blocked"?!1:(e="blocked",!0)}}var Bd=Symbol.for("@flopay/js.telemetry.bridge.v1"),Fd=Symbol.for("@flopay/js.telemetry.reporter-factory.v1");function Dd(){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 Od(e){let t=Dd(),n=(a,i)=>a?a.bind(e):i,o=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:o,elapsed:e.elapsed?e.elapsed.bind(e):a=>Math.max(0,o()-a),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 ja(e){let t=globalThis[Fd];return Od(t?.(e)??{})}function un(e){if(e)return e[Bd]}import{useCallback as Wr,useEffect as zl,useRef as no}from"react";function la(e,t){let n=no(0),o=no(null),a=no(null),i=no(e),s=no(t?.onHandoffObserved),c=no(t?.defersMissingTerminal),y=no(t?.onMissingTerminalDeferred);zl(()=>{i.current=e,s.current=t?.onHandoffObserved,c.current=t?.defersMissingTerminal,y.current=t?.onMissingTerminalDeferred},[e,t?.onHandoffObserved,t?.defersMissingTerminal,t?.onMissingTerminalDeferred]);let v=Wr((g=a.current)=>{g?.timer&&(clearTimeout(g.timer),g.timer=null)},[]),B=Wr(g=>{v();let w=n.current+1;return n.current=w,o.current=null,a.current={generation:w,method:g,timer:null,yieldedControl:!1},w},[v]),R=Wr(g=>{let w=a.current;return g!==void 0&&w?.generation!==g?!1:(v(w),a.current=null,(g===void 0||o.current===g)&&(o.current=null),!0)},[v]),N=Wr(g=>{let w=a.current,je=g??w?.generation??n.current;(g===void 0||w?.generation===g)&&(v(w),a.current=null),o.current=je},[v]),le=Wr(g=>o.current===(g??n.current),[]),L=Wr(g=>a.current?.generation===g&&o.current!==g,[]),Ae=Wr(()=>{let g=a.current;g&&(v(g),!g.yieldedControl&&(g.yieldedControl=!0,s.current?.(g.method)))},[v]),K=Wr(()=>{let g=a.current;!g?.yieldedControl||document.visibilityState!=="visible"||(v(g),g.timer=setTimeout(()=>{if(g.timer=null,a.current?.generation===g.generation){if(c.current?.(g.method)){y.current?.(g.method,g.generation);return}a.current=null,o.current=g.generation,i.current(g.method,new Error("External payment method returned without a terminal callback."),{code:"external_method_missing_terminal_callback"})}},cl))},[v]);return zl(()=>{let g=()=>{document.visibilityState==="visible"?K():Ae()};return document.addEventListener("visibilitychange",g),window.addEventListener("blur",Ae),window.addEventListener("focus",K),()=>{document.removeEventListener("visibilitychange",g),window.removeEventListener("blur",Ae),window.removeEventListener("focus",K),v()}},[v,Ae,K]),{startAttempt:B,finishAttempt:R,invalidateAttempt:N,isAttemptInvalidated:le,isAttemptCurrent:L,generationRef:n}}import{jsx as ro,jsxs as ji}from"react/jsx-runtime";var $a=45,tu=1e3,nu=11e3,ru={width:"100%",minHeight:$a,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"},ou={script_rejected:{errorCode:"PROVIDER_LOAD_FAILED",stage:"provider_load",operationOutcome:"rejected"},namespace_unusable:{errorCode:"PROVIDER_LOAD_FAILED",stage:"provider_load",operationOutcome:"returned_error"},pre_ready_callback:{errorCode:"PROVIDER_RUNTIME_FAILED",stage:"provider_ready",operationOutcome:"returned_error"},render_rejected:{errorCode:"PROVIDER_RUNTIME_FAILED",stage:"provider_ready",operationOutcome:"rejected"},watchdog_expired:{errorCode:"PROVIDER_RUNTIME_FAILED",stage:"provider_ready",operationOutcome:"watchdog_expired"}};function au(e){return!e.generationActive||e.kind==="teardown"?{action:"ignore"}:e.kind==="ineligible"?{action:"unavailable"}:e.automaticRetryAllowed&&!e.automaticRetryUsed?{action:"retry"}:{action:"exhaust",report:ou[e.kind]??null}}function jl(e,t){return e==="watchdog_expired"?"paypal_render_timeout":dl(t)?"paypal_init_timeout":"paypal_init_failure"}function iu(e){return e>=500?"5xx":e>=400?"4xx":e>=300?"3xx":"unknown"}function $l({sessionId:e,nonce:t,billingApiUrl:n,email:o,billingName:a,onBuyerIdentityReady:i,clientId:s,environment:c,currency:y,isSubscription:v,providerObjectType:B,approvalPresentation:R,onTokenizedBody:N,onComplete:le,onErrorChange:L,onDecline:Ae,onCancel:K,onTechnicalFailure:g,isProcessing:w=!1,onLoadStateChange:je,onInitializationStateChange:I,allowAutomaticRetry:Ke=!0,onButtonClick:Z,runBeforeButtonClick:Fe,session:Ze,existingOrderId:Oe,telemetry:Xe,telemetryContext:Rt,onInstrument:rt,debug:X=!1}){let At=$r(),ct=Eo(rt,e),Qe=ca(()=>{if(At)return null;let x=ja({billingApiUrl:n,sdkPackage:"@flopay/react",sdkVersion:Zd,enabled:Xe!==!1});return x.setCheckoutContext(Rt??{}),x.beginCheckout(Rt??{}),x},[n,At,Xe,Rt?.checkoutMode,Rt?.layout]),we=ca(()=>un(At),[At]);Ut(()=>()=>{Qe&&Qe.flush().catch(()=>{}).finally(()=>Qe.destroy())},[Qe]);let oe=ca(()=>({error:x=>{we?we.error(x):Qe?.error(x),ct({class:"technical_error",errorCode:x.requestCategory==="intent_create"?"PAYMENT_PROCESSING_FAILED":x.errorCode,requestCategory:x.requestCategory,provider:x.provider})},log:x=>{we?we.log(x):Qe?.log(x),ct({class:"lifecycle",name:x.name,provider:x.provider})},performance:x=>{we?we.performance(x):Qe?.performance(x)},terminal:x=>{we?we.terminal(x):Qe?.terminal(x)},startTiming:()=>we?.now()??Qe?.now()??0,elapsed:x=>we?.elapsed(x)??Math.max(0,(Qe?.now()??x)-x)}),[ct,we,Qe]),ye=nt(null),Pt=nt(0),xt=nt(null),Ge=nt(null),Q=nt(null),xe=eu(sa),ae=nt(null);ae.current||(ae.current=qa());let z=xe??ae.current,Ne=nt(null),Le=nt(!1),[De,F]=Hr(!1),[ze,mt]=Hr(!1),[_e,ft]=Hr(0),he=nt(0),[Ue,$e]=Hr(!1),pn=nt(!1),Bt=nt(!1),[vt,ce]=Hr(!1),[P,ot]=Hr(!1),{request:et,collect:T,finish:Pe}=Io(),Ft=nt({sessionId:e,required:ql(o,Ze)});Ft.current.sessionId!==e&&(Ft.current={sessionId:e,required:ql(o,Ze)});let Se=Ft.current.required,wt=ca(()=>n.replace(/\/+$/,""),[n]),b=Ze?.gateways?.paypal?.providerObjectType??B,Re=b??(v?"subscription":"order"),[ve]=Hr(ea),p=Ze?.gateways?.paypal?.approvalPresentation??R,G=Da(ve,p==="app_switch"?"app_switch":void 0,Re),E=Xd(b),M=ca(()=>JSON.stringify([wt,s,y,c??"",Re,E,G,e,Oe??""]),[wt,s,y,c,Oe,Re,E,G,e]),be=nt(M),ie=be.current!==M,an=nt(X),gt=nt(null),[Xt,de]=Hr([]),Te=wr(x=>{an.current&&de(D=>[...D,`${new Date().toISOString().slice(11,23)} ${x}`])},[]);Ut(()=>{an.current=X,X&&Te("debug:enabled"),gt.current?.setEnabled(X)},[Te,X]);let _n=nt(N),Tn=nt(le),bn=nt(L),pt=nt(Ae),Ln=nt(K),Mn=nt(g),yn=nt(Z),Qt=nt(je),An=nt(I),jt=nt(i),yr=nt(Fe),Nt=nt(Ze),Ye=nt(o),dt=nt(a),sn=nt(t),Dt=nt(null),Vt=nt(new Map),Kn=nt(new Map),xn=nt(!1);Ut(()=>(xn.current=!0,()=>{xn.current=!1}),[]),Ut(()=>{_n.current=N},[N]),Ut(()=>{jt.current=i},[i]),Ut(()=>{Tn.current=le},[le]),Ut(()=>{bn.current=L},[L]),Ut(()=>{pt.current=Ae},[Ae]),Ut(()=>{Ln.current=K},[K]),Ut(()=>{Mn.current=g},[g]),Ut(()=>{yn.current=Z},[Z]),Ut(()=>{Qt.current=je},[je]),Ut(()=>{An.current=I},[I]),Ut(()=>{yr.current=Fe},[Fe]),Ut(()=>{Nt.current=Ze},[Ze]),Ut(()=>{Ye.current=o},[o]),Ut(()=>{dt.current=a},[a]),Ut(()=>{sn.current=t},[t]),Ut(()=>{he.current=_e},[_e]),Ut(()=>{Ue&&Ne.current?.focus()},[Ue,_e]);let mn=wr(()=>{window.setTimeout(()=>{Ne.current?.focus()},0)},[]),fn=wr(()=>{F(!1),ft(x=>x+1)},[]),ln=wr(()=>{$e(!1),(ye.current?.querySelector('iframe, button, [tabindex]:not([tabindex="-1"])')??ye.current)?.focus?.()},[]);Ut(()=>{!De||!Le.current||(Le.current=!1,ln())},[ln,De,_e]);let Kt=wr((x,D)=>{let U=D?.popupBlocked??Ur(x);U&&z.markBlocked();let It=Ba("PayPal",U,ve.inAppBrowser),ut=Mn.current;if(ut){let Ct=U&&ve.inAppBrowser?new qi(It,"api_error",{code:D?.code??"paypal_popup_blocked"}):x;ut("paypal",Ct,D);return}bn.current?.(It)},[z,ve.inAppBrowser]),bt=wr(x=>{let D=xt.current,U=Ge.current;D===null||!U||(oe.log({...U,popupCapability:z.current(),name:"provider.overlay.returned",stage:"overlay_return",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:x}),oe.performance({...U,popupCapability:z.current(),stage:"overlay_return",durationMs:oe.elapsed(D),durationMode:"buyer",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:x}),xt.current=null)},[z,oe]),rn=wr((x,D,U)=>{let It=Ge.current;bt("overlay_timeout"),It&&oe.error({...It,popupCapability:z.current(),errorCode:"REQUEST_TIMEOUT",failureCategory:"provider_runtime",stage:"overlay_return",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk",statusClass:"timeout",terminalReason:"overlay_timeout"}),Kt(D,{...U,telemetryReported:!0,provider:"paypal",paymentMethodCategory:"paypal",presentationMode:G,terminalReason:"overlay_timeout"}),$e(!0),fn(),mn()},[bt,mn,Kt,z,G,fn,oe]),gn=wr(()=>{z.markAvailable();let x=Ge.current;x&&(Q.current=x.attempt,oe.log({...x,popupCapability:z.current(),name:"provider.popup.opened",stage:"overlay_open",provider:"paypal",paymentMethodCategory:"paypal"}))},[z,oe]),{finishAttempt:Lt,generationRef:ke,invalidateAttempt:Bn,isAttemptCurrent:zn,isAttemptInvalidated:kn,startAttempt:en}=la(rn,{onHandoffObserved:gn}),nr=wr(()=>($e(!1),en("paypal")),[en]),mr=wr(x=>{Bn(x?.generation),x?.showRetry&&$e(!0),x?.remount&&fn(),x?.focus!==!1&&mn()},[mn,Bn,fn]),Gn=x=>{let D=Dt.current;return D&&Kn.current.set(x,D),x};Ut(()=>{be.current!==M&&(be.current=M,pn.current=!1,Bt.current=!1,F(!1),mt(!1),ce(!1),An.current?.("loading"))},[M]),Ut(()=>{zt(()=>Qt.current?.(De&&!vt))},[De,vt]);let kt=Gd(c);Ut(()=>{let x={attempt:ke.current+1,inAppBrowser:ve.inAppBrowser,appFamily:ve.appFamily,popupCapability:z.current(),presentationMode:G},D=()=>({...Ge.current??x,popupCapability:z.current()}),U={error:u=>oe.error({...u,...D()}),log:u=>oe.log({...u,...D()}),performance:u=>oe.performance({...u,...D()}),terminal:u=>oe.terminal({...u,...D()}),startTiming:oe.startTiming,elapsed:oe.elapsed},It=s?`${s.slice(0,6)}\u2026(len ${s.length})`:"(empty)",ut=typeof navigator>"u"?"(no navigator)":navigator.userAgent;if(Te(`mount clientId=${It} env=${c??"(unset)"}\u2192${kt??"live"} ccy=${y} sub=${v}`),Te(`ua=${ut.slice(0,80)}${ut.length>80?"\u2026":""}`),!s){Te("FAIL: clientId empty \u2014 gateway misconfigured"),ce(!0),U.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(!ye.current){Te("FAIL: containerRef not attached");return}Pt.current=U.startTiming(),U.log({name:"provider.load.started",stage:"provider_load",provider:"paypal",paymentMethodCategory:"paypal"});let Ct=!1,In=!1,at=()=>Ct||In,Nr=E?Re:void 0,Et,Un=!1,fr=()=>{Et=Wd(),Et||console.warn("[FloPay] DirectPayPal: secure idempotency key unavailable; retries may not be deduplicated."),Un=!0},Yn=null,Gt=!1,rr=null,Er=!1,gr=()=>{!rr||Er||(Er=!0,rr.close().catch(()=>{}))},Rn=!1,Lr=!1,Jn=ye.current,_r=null,qn=null,or=[],hr=null,_t=!1,jn=!1,$n=null,Fn=u=>{if(!u||typeof u.getBoundingClientRect!="function")return"(no rect)";let l=u.getBoundingClientRect();return`${Math.round(l.width)}\xD7${Math.round(l.height)}`},ar=u=>{if(!u)return"(empty)";try{let l=new URL(u,typeof window>"u"?"https://localhost":window.location.href),A=l.pathname.toLowerCase();return A.includes("checkcaptcha")||A.includes("captcha")?`CAPTCHA(${l.host}${A})`:A.includes("risk")||A.includes("challenge")?`RISK(${l.host}${A})`:A.includes("smart/buttons")?`smart-buttons(${l.host})`:`${l.host}${A}`.slice(0,100)}catch{return u.slice(0,80)}},Je=u=>{let l=u.getAttribute("src"),A=u.getAttribute("srcdoc"),te=u.getAttribute("name"),Ie=u.getAttribute("sandbox"),qe=[];return l&&qe.push(`src=${ar(l)}`),A&&qe.push(`srcdoc[${A.length}ch]`),!l&&!A&&qe.push("src=(empty) srcdoc=(empty)"),te&&qe.push(`name=${te.slice(0,40)}`),Ie!==null&&qe.push(`sandbox="${Ie.slice(0,40)}"`),qe.join(" ")},hn=u=>{if(!(u instanceof HTMLIFrameElement))return"";try{let l=u.contentDocument;if(!l)return"cd=null";let A=l.body?.children.length??0,te=l.body?.innerHTML.length??0,Ie=l.head?.innerHTML.length??0;return`cd=same-origin readyState=${l.readyState} body[${A}children,${te}ch] head[${Ie}ch]`}catch(l){return`cd=cross-origin(${l.message.slice(0,30)})`}},tn=[],Dn=u=>{if(at())return;let l=u.message??String(u.error??"(no message)");l&&(l.toLowerCase().includes("paypal")||l.toLowerCase().includes("zoid")||l.toLowerCase().includes("postrobot")||l.toLowerCase().includes("storage"))&&(Te(`window:error ${l.slice(0,140)}`),tn.push(l))},Yr=u=>{if(at())return;let l=u.reason instanceof Error?u.reason.message:String(u.reason??"(no reason)");l&&(l.toLowerCase().includes("paypal")||l.toLowerCase().includes("zoid")||l.toLowerCase().includes("postrobot")||l.toLowerCase().includes("storage"))&&(Te(`window:rejection ${l.slice(0,140)}`),tn.push(l))},ir={value:0},Tr=()=>{_r?.disconnect(),_r=null,qn?.disconnect(),qn=null;for(let u of or.splice(0))clearTimeout(u);jn=!1,_t&&typeof window<"u"&&(window.removeEventListener("error",Dn),window.removeEventListener("unhandledrejection",Yr)),_t=!1},Wn=()=>{if(!(_t||at()||Rn)){if(_t=!0,tn.length=0,ir.value=0,typeof window<"u"&&(window.addEventListener("error",Dn),window.addEventListener("unhandledrejection",Yr)),typeof PerformanceObserver<"u")try{qn=new PerformanceObserver(u=>{if(!at())for(let l of u.getEntries()){if(!l.name.toLowerCase().includes("paypal"))continue;ir.value+=1;let A=Math.round(l.duration);Te(`net ${A}ms ${l.name.slice(0,90)}`)}}),qn.observe({type:"resource",buffered:!0})}catch{}$n?.()}},Pn=()=>{hr&&(clearTimeout(hr),hr=null)},Pr=()=>{Tr(),Pn()},Cn={setEnabled:u=>{u?Wn():Tr()}};gt.current=Cn,an.current&&Wn();let C=Hd,S=u=>{if(at()||C(u))return;let l=ko(u)??u;zt(()=>bn.current?.(l))},O=(u,l)=>{if(Ct||Gt)return;Gt=!0,In=!0,Pr(),gr();let A=au({kind:u,generationActive:!0,automaticRetryAllowed:Ke,automaticRetryUsed:pn.current});if(A.action==="retry"){pn.current=!0,F(!1),ot(!1),mt(!0),An.current?.("retrying"),Yn=setTimeout(()=>{Ct||ft(te=>te+1)},tu);return}if(F(!1),ot(!1),mt(!1),ce(!0),A.action!=="ignore"){if(An.current?.("exhausted"),A.action==="unavailable"){console.error("[FloPay] DirectPayPal load/render failure:",l);return}if(A.report){let te=Mi({code:jl(u,l),message:l},{inAppBrowser:ve.inAppBrowser,handoffObserved:!1});te.popupBlocked&&z.markBlocked(),U.error({errorCode:te.popupBlocked?te.errorCode:A.report.errorCode,stage:A.report.stage,operationOutcome:A.report.operationOutcome,provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk",failureCategory:"provider_runtime",terminalReason:te.terminalReason})}Bt.current||(Bt.current=!0,console.error("[FloPay] Direct PayPal initialization failed:",jl(u,l)))}};ce(!1);let ee=async(u,l=Dt.current)=>{if(at())return;let A=l?.sessionId??e;if(_n.current){await _n.current(u,{sessionId:A,accountPatch:l?.accountPatch,nonce:l?.nonce});return}let te=U.startTiming();U.log({name:"payment.processing.started",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"});let Ie=()=>{U.log({name:"payment.processing.completed",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"}),U.performance({stage:"processing",durationMs:U.elapsed(te),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"process_payment"})};try{let qe=Ld({body:u,sessionId:A,nonce:l?.nonce??sn.current,accountPatch:l?.accountPatch,session:Nt.current,email:Ye.current}),ue=await new Ui(wt,{telemetry:!1}).processPayment(qe.userId,qe.params);if(ue.ok){if(In||Ct&&xn.current)return;Ie(),U.terminal({outcome:"payment_succeeded",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:"approved"}),zt(()=>Tn.current?.({status:"succeeded",checkoutMethod:"paypal"}));return}if(at())return;let Be=await ue.json().catch(()=>null),tt=jd(Be),st=tt.message;Ie(),ue.status===400&&(typeof Be?.declineCode=="string"||!Array.isArray(Be?.fields))?U.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:"approved"}):ue.status===400||ue.status===422?U.terminal({outcome:"validation_rejected",provider:"paypal",paymentMethodCategory:"paypal",statusClass:"4xx",terminalReason:"approved"}):U.error({errorCode:"PAYMENT_PROCESSING_FAILED",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"process_payment",statusClass:iu(ue.status),failureCategory:ue.status>=500?"server_error":void 0}),S(st),zt(()=>pt.current?.(dn("paypal",st,{code:tt.code,declineCode:tt.declineCode})));return}catch(qe){if(at())return;Ie(),U.error({errorCode:"NETWORK_REQUEST_FAILED",failureCategory:"transport_error",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"process_payment",statusClass:"network_error"});let fe=$d(qe instanceof Error?qe.message:void 0);S(fe),zt(()=>pt.current?.(dn("paypal",fe)));return}},it=()=>new qi("PayPal render was superseded.","api_error",{code:"paypal_render_superseded"}),Yt=u=>at()?Promise.reject(it()):Promise.resolve(u),me=async u=>{if(at())throw it();Un||fr();let l=Dt.current,A=l?.sessionId??e,te=l?.nonce??sn.current;U.log({name:"payment.intent.started",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create"});let Ie;try{Ie=await new Ui(wt,{telemetry:!1}).createSessionIntent(A,te??"",zd(Nr),{idempotencyKey:Et})}catch(qe){throw U.error({...qd(qe,"PAYMENT_PROCESSING_FAILED","unknown"),stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create"}),qe}if(at())throw it();if(Ie.provider!=="paypal"||Ie.providerObjectType!==Re)throw new Error(u);return U.log({name:"payment.intent.completed",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create",statusClass:"2xx"}),Ie.providerObjectId},W=(u,l)=>{let A=l?.nonce??sn.current;if(!A)return;let te=l?.sessionId??e,Ie=Jd(u);new Ui(wt,{telemetry:!1}).reportSessionIntentDecline(te,A,{provider:"paypal",paymentMethodCategory:"wallet",paymentMethodType:"paypal",providerDeclineReason:Ie}).catch(()=>{})},k=_e;Te("loadScript:scheduled (deferred 1 tick)");let _=null,H=setTimeout(()=>{if(Ct){Te("loadScript:skipped (cancelled before defer ran)");return}Te("loadScript:start");let u=kt==="live"?"production":kt,l={};Re==="subscription"?l={intent:"subscription",vault:!0}:Re==="order"&&(l={intent:"capture"}),_=Qd({clientId:s,currency:y,...l,...u?{environment:u}:{},...u==="sandbox"?{dataNamespace:"paypal_sandbox"}:{}});let A=!1;_.then(te=>{if(A=!0,Te(`loadScript:resolved inactive=${at()} ns=${!!te} buttons=${!!te?.Buttons}`),at())return;if(!te?.Buttons){Te("FAIL: namespace missing Buttons factory"),O("namespace_unusable","PayPal SDK did not expose the Buttons factory.");return}U.log({name:"provider.ready",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"}),U.performance({stage:"provider_ready",durationMs:U.elapsed(Pt.current),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk"}),U.log({name:"provider.availability.checked",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"});let Ie=async(h,Y)=>{if(at()||he.current!==k)return;let Ee=h.vaultSetupToken??h.subscriptionID??h.orderID??"",Me=Ee?Kn.current.get(Ee):Vt.current.get(k);if(!(!Me||!zn(Me.generation))&&Lt(Me.generation)){Kn.current.delete(Ee),Vt.current.delete(Me.surfaceKey),bt("approved");try{if(ot(!0),zt(()=>bn.current?.(null)),!Ee)throw new qi("PayPal did not return an approval token.","api_error",{code:"paypal_missing_token"});let j=Yd({accountPatch:Me.accountPatch,email:Ye.current,billingName:dt.current,session:Nt.current});if(Kd(j))try{j=Vd(j,await Y?.order?.get?.())}catch{}if((jt.current||Se)&&!Ul(j.email)){let J=await T("PayPal",j);if(!J)return;j=J}Ul(j.email)&&(Me.accountPatch=dr({...Me.accountPatch,...j}),await jt.current?.(j));let nn=Ud(Ee,Nr);await ee(nn,Me)}catch(j){S(j instanceof Error?j.message:"PayPal capture failed.")}finally{at()||ot(!1)}}},qe=h=>{let Y=Oe?()=>Yt(Oe):()=>me(h);return async()=>Gn(await Y())},fe=te.Buttons({style:{layout:"horizontal",height:$a,tagline:!1},...G==="app_switch"?{appSwitchWhenAvailable:!0}:{},onClick:async(h,Y)=>{if(at()){await Y.reject();return}fr();let Ee=yr.current,Me={};if(Ee)try{let J=await Ee("paypal");if(at()){await Y.reject();return}if(!J.proceed){Dt.current=null,Vt.current.delete(k),await Y.reject();return}Me={sessionId:J.sessionId,accountPatch:J.accountPatch,nonce:J.nonce}}catch(J){Te(`onClick:runBeforeButtonClick rejected msg=${(J instanceof Error?J.message:String(J)).slice(0,120)}`),Dt.current=null,Vt.current.delete(k),await Y.reject();return}zt(()=>yn.current?.("paypal"));let j=nr(),nn={generation:j,surfaceKey:k,...Me};Dt.current=nn,Vt.current.set(k,nn),Ge.current={...x,attempt:j},await Y.resolve(),U.log({name:"payment.method.selected",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"}),U.log({name:"provider.handoff.requested",stage:"overlay_open",provider:"paypal",paymentMethodCategory:"paypal"}),xt.current=U.startTiming()},createOrder:Re==="order"?qe("Failed to create PayPal order."):void 0,createSubscription:Re==="subscription"?qe("Failed to create PayPal subscription."):void 0,createVaultSetupToken:Re==="setup_token"?async()=>Gn(await me("Failed to create PayPal setup token.")):void 0,onApprove:Ie,onCancel:()=>{if(at())return;let h=Vt.current.get(k)??Dt.current,Y=h&&zn(h.generation)?Nd(h.sessionId??e,Nr):null;h&&Vt.current.delete(h.surfaceKey),Dt.current=null,bt("cancelled"),U.terminal({outcome:"payment_cancelled",terminalReason:"cancelled",provider:"paypal",paymentMethodCategory:"paypal"}),Le.current=!0,mr({generation:h?.generation,remount:!0,focus:!1}),Y&&zt(()=>Ln.current?.(Y))},onError:h=>{if(at()||he.current!==k)return;let Y=h instanceof Error?h.message:"PayPal failed to render.";if(Te(`onError rendered=${Rn} msg=${Y.slice(0,120)}`),Rn){let Ee=Vt.current.get(k)??Dt.current;if(Ee&&!zn(Ee.generation)||!Ee&&kn())return;if(C(Y)){Lt(Ee?.generation);return}let{errorCode:Me,popupBlocked:j,providerDeclined:nn,terminalReason:J}=Mi(h,{inAppBrowser:ve.inAppBrowser,handoffObserved:Ee!=null&&Q.current===Ee.generation});if(j&&z.markBlocked(),bt(J),nn){U.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:J}),W(h,Ee),zt(()=>pt.current?.(dn("paypal",Y))),Ee&&Vt.current.delete(Ee.surfaceKey),Dt.current=null,Lt(Ee?.generation);return}U.error({errorCode:Me,failureCategory:"provider_runtime",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk",terminalReason:J}),Ee&&Vt.current.delete(Ee.surfaceKey),Dt.current=null,mr({generation:Ee?.generation,remount:!0,showRetry:!0,focus:!0}),Kt(h,{code:"paypal_runtime_failed",popupBlocked:j,telemetryReported:!0,provider:"paypal",paymentMethodCategory:"paypal",presentationMode:G,terminalReason:J});return}O(C(Y)?"teardown":"pre_ready_callback",Y)}}),ue=fe.isEligible();if(Te(`isEligible=${ue}`),U.log({name:"provider.eligibility.checked",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"}),!ue){F(!1),O("ineligible","PayPal buttons are not eligible to render in this context (paypal_ineligible).");return}Lr=!0,rr=fe,$n=()=>{if(!_t||jn||at()||Rn)return;jn=!0,Te(`container:dims ${Fn(Jn)} visibility=${typeof document>"u"?"(no document)":document.visibilityState}`),typeof MutationObserver<"u"&&(_r=new MutationObserver(Y=>{if(!at()){for(let Ee of Y)if(Ee.type==="childList")Ee.addedNodes.forEach(Me=>{if(!(Me instanceof Element))return;let j=Me.tagName.toLowerCase(),nn=(Me.getAttribute("title")??"").slice(0,40),J=j==="iframe"?` ${Je(Me)}`:"";Te(`child+ ${j}${nn?` title="${nn}"`:""}${J} dims=${Fn(Me)}`)});else if(Ee.type==="attributes"&&Ee.target instanceof Element){let Me=Ee.target;if(Me.tagName.toLowerCase()!=="iframe")continue;let j=Ee.attributeName;(j==="src"||j==="srcdoc")&&Te(`attr~ iframe ${j}=${j==="srcdoc"?`[${(Me.getAttribute("srcdoc")??"").length}ch]`:ar(Me.getAttribute("src"))} dims=${Fn(Me)}`)}}}),_r.observe(Jn,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["src","srcdoc"]}));let h=Y=>{if(at()||Rn)return;let Ee=Jn.querySelectorAll("iframe"),Me=typeof document<"u"&&"hasStorageAccess"in document;Te(`watchdog:${Y} container=${Fn(Jn)} children=${Jn.childElementCount} iframes=${Ee.length} visibility=${typeof document>"u"?"(no document)":document.visibilityState} cookies=${typeof navigator>"u"?"?":navigator.cookieEnabled} hasStorageAccessApi=${Me} paypalNetRequests=${ir.value}`),Ee.forEach((j,nn)=>{let J=(j.getAttribute("title")??"").slice(0,40);Te(` iframe[${nn}] ${Fn(j)}${J?` title="${J}"`:""} ${Je(j)}`);let Mr=hn(j);Mr&&Te(` ${Mr}`)}),tn.length===0&&Te(" (no PayPal/zoid window errors captured)")};or.push(setTimeout(()=>h("3s"),3e3)),or.push(setTimeout(()=>h("8s"),8e3)),or.push(setTimeout(()=>h("15s"),15e3))},$n(),Te("render:start");let tt=U.startTiming();hr=setTimeout(()=>{at()||Rn||(Te("watchdog:11s retryable render timeout"),O("watchdog_expired","PayPal Buttons render did not settle within 11000ms."))},nu);let st=fe.render(Jn);(async()=>{try{if(await st,Te(`render:resolved inactive=${at()}`),Pr(),at()){gr();return}Rn=!0,F(!0),mt(!1),An.current?.("ready"),U.log({name:"checkout.rendered",stage:"checkout_render",provider:"paypal",paymentMethodCategory:"paypal"}),U.performance({stage:"checkout_render",durationMs:U.elapsed(tt),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"})}catch(h){let Y=h instanceof Error?h.message:"PayPal failed to render.";Te(`render:rejected msg=${Y.slice(0,120)}`),Pr(),O(C(Y)?"teardown":"render_rejected",Y)}})()}).catch(te=>{let Ie=te instanceof Error?te.message:"PayPal operation failed.";Te(`provider:failed msg=${Ie.slice(0,120)}`);let qe="script_rejected";A&&C(Ie)?qe="teardown":A&&Lr&&(qe="render_rejected"),O(qe,Ie)})},0);return()=>{Ct=!0,clearTimeout(H),Yn&&clearTimeout(Yn),Pr(),gt.current===Cn&&(gt.current=null),gr(),xt.current=null,Ge.current=null}},[Ke,wt,s,y,c,Re,G,E,e,Oe,_e,oe,T,Se,Te,bt]);let re=X?ji("pre",{"data-testid":"flopay-direct-paypal-debug",style:{margin:"0 0 8px 0",padding:"6px 8px",background:vt?"#fef2f2":"#f3f4f6",border:`1px solid ${vt?"#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=${De} failed=${vt})`,Xt.length===0?`
|
|
2
2
|
(waiting for first lifecycle event\u2026)`:`
|
|
3
|
-
${
|
|
4
|
-
`)}`]}):null;return ot&&!j?fe?to("div",{children:Wt}):null:qi("div",{children:[Wt,Ue&&to(Io,{identity:Ue.identity,methodLabel:Ue.methodLabel,testId:"flopay-direct-paypal-identity-pane",onComplete:se,onCancel:()=>se(null)}),qi("div",{"aria-hidden":Ye||Ue?!0:void 0,style:Ye||Ue?{position:"relative",height:0,opacity:0,pointerEvents:"none"}:{position:"relative",minHeight:ja},children:[!Me&&!Ye&&to("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"}}),to("div",{ref:ee,"data-testid":"flopay-direct-paypal-container",tabIndex:-1,role:"group","aria-label":"PayPal payment method",style:{minHeight:ja,display:"flex",opacity:Me?1:0},"aria-busy":E||v},Ze)]},Ze),De&&to("button",{ref:he,type:"button","data-testid":"flopay-direct-paypal-focus-target",onClick:bn,style:tu,children:"Try PayPal again"})]})}function $a(e){return to(jl,{...e})}function $l(e){return to(jl,{...e})}import{jsx as Wl,jsxs as au}from"react/jsx-runtime";function Eo({children:e,margin:t,icon:n=!0,styleOverride:o}){return au("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"}:{},...o??{}},children:[n&&Wl("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",style:{flexShrink:0},children:Wl("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]})}import{clearCachedInlineCheckout as Wa,clearCachedInlineSession as ji,hashCreateParams as Hl,legacyCachedSessionMatchesDraft as Vl,persistCachedInlineIdempotencyKey as Ha,persistCachedInlineSession as Va,readCachedInlineIdempotencyKey as Kl,readCachedInlineSession as Gl,serializeCreateParams as ca}from"@flopay/shared";import{resolveBillingApiUrl as iu}from"@flopay/shared";import{useEffect as Hr,useMemo as su,useRef as Yl,useState as Jl}from"react";import{jsx as lu}from"react/jsx-runtime";function Ka({flopay:e,paypalFlopay:t,options:n,onInstrument:o,children:a}){let[i,s]=Jl(e instanceof Promise?null:e),[c,f]=Jl(t instanceof Promise||!t?null:t),C=Yl(null),T=Yl(null),I=Ro(o);Hr(()=>{I({class:"lifecycle",name:"checkout.mount"})},[I]),Hr(()=>{i&&I({class:"lifecycle",name:"sdk.initialize.ready"})},[I,i]),Hr(()=>{if(i)return mn(i)?.subscribe?.(I)},[I,i]),Hr(()=>{if(!(!c||c===i))return mn(c)?.subscribe?.(I)},[I,i,c]),Hr(()=>{if(!i)return;let O=mn(i);return C.current=O?.beginCheckout()??O?.now()??0,O?.log({name:"checkout.mount",stage:"checkout_mount"}),()=>{O?.log({name:"checkout.unmount",stage:"unmount"})}},[i]),Hr(()=>{let O=!1;return e instanceof Promise?e.then(Se=>{O||s(Se)},()=>{O||I({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED"})}):s(e),()=>{O=!0}},[I,e]),Hr(()=>{let O=!1;if(!t){f(null);return}return t instanceof Promise?t.then(Se=>{O||f(Se)},()=>{O||I({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED",provider:"paypal"})}):f(t),()=>{O=!0}},[I,t]),Hr(()=>{if(!i||T.current===i)return;T.current=i;let O=mn(i);O?.log({name:"checkout.rendered",stage:"checkout_render"}),I({class:"lifecycle",name:"checkout.rendered"}),O?.performance({stage:"checkout_render",durationMs:O.elapsed(C.current??0),durationMode:"machine"})},[I,i]);let z=iu(n?.billingApiUrl),ie=su(()=>({flopay:i,paypalFlopay:c,billingApiUrl:z,emitInstrument:I}),[i,c,z,I]);return lu(Jn.Provider,{value:ie,children:a})}import{markSessionRecentlyCompleted as _o,wasSessionRecentlyCompleted as $i}from"@flopay/shared";async function Ga(e,t){e.current?.abort();let n=new AbortController;e.current=n;try{return await t(n.signal)}finally{e.current===n&&(e.current=null)}}import{completeSavedCardNextAction as cu,loadFloPay as Zl,PaymentAPI as Ja,runSavedCardChallenge as du}from"@flopay/js";import{classifyPaymentRejection as uu,FloPayError as Et,isAuthorizationOnlySession as pu,isMountableVaultBlock as yu,isSetupIntentClientSecret as mu,normalizeCheckoutFailureOutcome as Xl}from"@flopay/shared";var ua="card";async function fu(e,t,n){if(n){if(typeof e.retrieveSetupIntent!="function")return null;let{setupIntent:i,error:s}=await e.retrieveSetupIntent(t);return{error:s,intent:i??null}}if(typeof e.retrievePaymentIntent!="function")return null;let{paymentIntent:o,error:a}=await e.retrievePaymentIntent(t);return{error:a,intent:o??null}}async function gu(e,t,n,o){if(o){if(typeof e.confirmCardSetup!="function")return null;let{setupIntent:s,error:c}=await e.confirmCardSetup(t,n);return{error:c,intent:s??null}}if(typeof e.confirmCardPayment!="function")return null;let{paymentIntent:a,error:i}=await e.confirmCardPayment(t,n);return{error:i,intent:a??null}}function To(e){return new Et("Card authentication was cancelled.","api_error",{code:"three_ds_aborted",cause:e})}function hu(){return new Et("Card authentication timed out.","api_error",{code:"three_ds_timeout"})}function Hi(e,t){return Object.assign(e,{checkoutMethod:t})}function xr(e,t){let n=e instanceof Et?e:new Et(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 da(e,t){try{return await e()}catch(n){throw xr(n,t)}}function ec(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 tc(e){return du(e)}async function Mo(e,t){let{billingApiUrl:n,sessionId:o,signal:a}=t,i=t.nonce??t.session.clientSecret,s=new Ja(n,{telemetry:!1}),c=`${n.replace(/\/+$/,"")}/v1/checkouts/sessions/${encodeURIComponent(o)}/status`,f;try{f=await cu({billingApiUrl:n,sessionId:o,nonce:i,nextActionRedirectUrl:e.nextActionRedirectUrl,signal:a,createDeclineError:T=>kr({type:T.declineReason??"authorization_declined",gatewayErrorCode:T.gatewayDeclineReason??void 0},"Card was declined.",{checkoutMethod:"card"})},s)}catch(T){if(a.aborted||T instanceof Error&&T.name==="AbortError")throw T instanceof Et&&T.code==="three_ds_aborted"?T:To(T);if(!(T instanceof Et)||T.code!=="three_ds_timeout"&&T.code!=="checkout_processing_timeout")throw T;try{f=await s.waitForCheckoutSessionCompletion(o,{initialDelayMs:0,nonce:i,statusUrl:c,timeoutMs:5e3,signal:a})}catch(z){if(a.aborted)throw To(z);if(!(z instanceof Et)||z.code!=="checkout_processing_timeout")throw z}let I=f&&qr(f,t.session);if(!Ar(I)&&I?.status!=="expired"){if(t.telemetry){let z=new Ja(n);try{z.reportThreeDsAbandoned(o)}finally{z.destroy()}}throw hu()}}let C=f&&qr(f,t.session);if(!Ar(C))throw So(C);return{...Mr(C,o),checkoutMethod:"card"}}function kr(e,t="Payment failed. Please try again.",n){let o=n?.checkoutMethod??e?.checkoutMethod??(e?.type==="paypal_redirect_required"?"paypal":"card"),a=e?.message??t,i=wo(a)??a,s=Hi(new Et(i,"api_error",{code:e?.code??Xl(e?.outcome)??Xl(e?.type)??e?.gatewayErrorCode}),o);return e?.orderId&&(s.orderId=e.orderId),s}function Wi(e){return typeof window<"u"&&window.location.href?window.location.href:e.successUrl||e.cancelUrl||void 0}function Ya(e){return typeof e=="string"&&e.startsWith("pi_")&&e.includes("_secret_")}function nc(e,t){let n=[e?.threeDSecureToken,e?.clientSecret,e?.stripeClientSecret];for(let a of n)if(typeof a=="string"&&a.length>0&&(!t?.requirePaymentIntentClientSecret||Ya(a)))return a;let o=e?.data;if(o&&typeof o=="object"){let a=o,i=[a.threeDSecureToken,a.clientSecret,a.stripeClientSecret,a.id];for(let c of i)if(typeof c=="string"&&c.length>0&&(!t?.requirePaymentIntentClientSecret||Ya(c)))return c;let s=a.gateways;if(s&&typeof s=="object"){let c=s.stripe;if(c&&typeof c=="object"){let f=c,C=[f.stripeClientSecret,f.clientSecret];for(let T of C)if(typeof T=="string"&&T.length>0&&(!t?.requirePaymentIntentClientSecret||Ya(T)))return T}}}}async function Pu({billingApiUrl:e,sessionId:t,nonce:n,responseJson:o}){let a=nc(o,{requirePaymentIntentClientSecret:!0});if(typeof a=="string"&&a.length>0)return{type:"3ds_required",threeDSecureToken:a};if(!t)return null;try{let c=(await new Ja(e,{telemetry:!1}).getUnifiedCheckoutSession(t,n)).data.stripe?.clientSecret;if(Ya(c))return{type:"3ds_required",threeDSecureToken:c}}catch{}return null}async function Ao({billingApiUrl:e,sessionId:t,session:n,nonce:o,tokenizedData:a,returnUrl:i,telemetry:s}){let c=e.replace(/\/+$/,""),f=t??n.id,C=o??n.clientSecret,T=n.customer?.id??n.accountData?.userId??"",I=n.customer?.email??n.accountData?.email??"",z=n.customer?.firstName??n.accountData?.firstName??"",ie=n.customer?.lastName??n.accountData?.lastName??"",O=n.customer?.country??n.accountData?.country??void 0,Se=n.customer?.zip??n.accountData?.zip??void 0,v=await new Ja(c,s===!1?{telemetry:!1}:void 0).processPayment(T,{sessionId:f,nonce:C,paymentMethodCategory:"saved",tokenizedData:a,accountData:{userId:T,email:I,firstName:z,lastName:ie,country:O,zip:Se},returnUrl:i??Wi(n)});if(v.ok){let N=typeof v.json=="function"?await v.json().catch(()=>null):null;if(pu(n)||N?.status==="authorized")return{type:"success",result:{status:"authorized",paymentId:typeof N?.paymentId=="string"?N.paymentId:n.paymentId,sessionId:typeof N?.sessionId=="string"?N.sessionId:f,authorizationExpiresAt:typeof N?.authorizationExpiresAt=="string"?N.authorizationExpiresAt:n.authorizationExpiresAt,paymentMethodId:ra(a),checkoutMethod:Ql(a,n)}};let _e=a?.threeDSecureActionResultTokenId;return{type:"success",result:{status:"succeeded",..._e?{paymentIntentId:_e}:{},paymentMethodId:ra(a),checkoutMethod:Ql(a,n)}}}let P;try{P=await v.json()}catch(N){throw new Et("Payment failed. Please try again.","api_error",{code:"InvalidPaymentProcessResponse",statusCode:v.status,cause:N})}if(P?.type==="3ds_required"&&typeof P.nextActionRedirectUrl=="string")return{type:"next_action_required",nextActionRedirectUrl:P.nextActionRedirectUrl};if(P?.type==="paypal_redirect_required"||P?.type==="3ds_required"){let N=nc(P);if(!N)throw new Et("Authentication is required but no redirect token was provided.","api_error",{code:"InvalidPaymentProcessResponse",statusCode:v.status});return{type:P.type,threeDSecureToken:N,paymentMethodId:P.paymentMethodId}}if(P?.gatewayErrorCode==="authentication_required"){let N=await Pu({billingApiUrl:c,sessionId:f,nonce:C,responseJson:P});if(N)return N;throw Hi(new Et("Your card requires authentication. Please enter your payment details below.","api_error",{code:"authentication_required"}),"card")}let ve=new Et(P?.message??"Payment failed. Please try again.","api_error",{code:P?.code??P?.gatewayErrorCode,declineCode:P?.declineCode??P?.gatewayDeclineReason,statusCode:v.status});throw Object.assign(ve,{telemetryOutcome:uu(v.status,P)})}async function Za(e,{flopay:t,paypalFlopay:n,attempt3DS:o,billingApiUrl:a,sessionId:i,session:s,returnUrl:c,telemetry:f,signal:C}){let T=t?.getRawProvider();if(!T)throw xr(new Et("Payment provider is not available.","api_error"),"card");if(e.type==="3ds_required"){if(!o||!e.threeDSecureToken)throw Hi(new Et("Your card requires authentication. Please enter your payment details below.","api_error",{code:"authentication_required"}),"card");let I=mu(e.threeDSecureToken),z=null,ie=e.paymentMethodId,O=await da(()=>fu(T,e.threeDSecureToken,I),"card");if(O){if(O.error)throw xr(new Et(O.error.message??`Failed to retrieve 3DS ${I?"setup":"payment"} status.`,"api_error",{code:O.error.code}),"card");let G=O.intent;!ie&&G?.payment_method&&(typeof G.payment_method=="string"?ie=G.payment_method:"id"in G.payment_method&&(ie=G.payment_method.id??void 0))}let Se=ie?await da(()=>gu(T,e.threeDSecureToken,{payment_method:ie,return_url:c??Wi(s)??window.location.href},I),"card"):null;if(Se){if(Se.error)throw xr(new Et(Se.error.message??"3DS authentication failed.","api_error",{code:Se.error.code}),"card");z=Se.intent}else{let G=await da(()=>T.handleNextAction({clientSecret:e.threeDSecureToken}),"card");if(G.error)throw xr(new Et(G.error.message??"3DS authentication failed.","api_error",{code:G.error.code}),"card");z=(I?G.setupIntent:G.paymentIntent)??null}if(z&&(z.status==="requires_capture"||z.status==="succeeded"||z.status==="processing")){let G=await Ao({billingApiUrl:a,sessionId:i,session:s,telemetry:f,tokenizedData:{id:z.id,type:"card",threeDSecureActionResultTokenId:z.id},returnUrl:c});return G.type==="success"?{...G.result,paymentIntentId:G.result.paymentIntentId??z.id,paymentMethodId:G.result.paymentMethodId??ie}:G.type==="next_action_required"?Mo(G,{billingApiUrl:a,sessionId:i??s.id,session:s,signal:C}):Za(G,{flopay:t,paypalFlopay:n,attempt3DS:o,billingApiUrl:a,sessionId:i,session:s,returnUrl:c,telemetry:f,signal:C})}throw xr(new Et("3DS authentication did not complete successfully.","api_error"),"card")}if(e.type==="paypal_redirect_required"){let I=(n??t)?.getRawProvider();if(!I)throw xr(new Et("PayPal is not available.","api_error"),"paypal");if(e.paymentMethodId){let{error:ie}=await da(()=>I.handleNextAction({clientSecret:e.threeDSecureToken}),"paypal");if(ie)throw xr(new Et(ie.message??"PayPal authorization failed.","api_error",{code:ie.code}),"paypal");return{status:"succeeded",checkoutMethod:"paypal"}}let{error:z}=await da(()=>I.confirmPayment({clientSecret:e.threeDSecureToken,confirmParams:{return_url:c??Wi(s)??window.location.href,payment_method_data:{type:"paypal"}},redirect:"if_required"}),"paypal");if(z)throw xr(new Et(z.message??"PayPal authorization failed.","api_error",{code:z.code}),"paypal");return{status:"succeeded",checkoutMethod:"paypal"}}throw new Et("Unsupported payment redirect state.","api_error")}function pa(e){if(e instanceof Et){let o=wo(e.message);return o&&o!==e.message?Object.assign(new Et(o,e.type,{code:e.code,declineCode:e.declineCode,param:e.param,statusCode:e.statusCode,sessionId:e.sessionId}),{checkoutMethod:e.checkoutMethod,orderId:e.orderId,telemetryFailureCategory:e.telemetryFailureCategory,telemetryOutcome:e.telemetryOutcome,telemetryRequestCategory:e.telemetryRequestCategory}):e}let t=e instanceof Error?e.message:"Payment failed. Please try again.",n=wo(t)??t;return new Et(n,"api_error")}function Vi(e){let t=e.data.stripe?.publishableKey,n=!!e.data.paypal?.publishableKey,o=yu(e.data.session?.vault)||Qr(e.data.session);if(!t&&!n&&!o)throw new Et("Session advertises no supported gateways or hosted vault (expected `gateways.stripe`, `gateways.paypal`, or vault markup).","validation_error");return t?{publishableKey:t,paypalPublishableKey:e.data.stripe?.paypalPublishableKey??t}:{}}function Ql(e,t){return e?e.isPaypal?"paypal":"card":t&&Qr(t)?"card":void 0}async function Ki({publishableKey:e,paypalPublishableKey:t,billingApiUrl:n,locale:o,telemetry:a}){if(!e)return{flopay:null,paypalFlopay:null};let i=t&&t!==e?t:void 0,[s,c]=await Promise.all([Zl(e,{billingApiUrl:n,locale:o,telemetry:a}),i?Zl(i,{billingApiUrl:n,locale:o,telemetry:a}).catch(C=>(console.warn("[FloPay] Failed to load PayPal Stripe instance:",C),null)):Promise.resolve(null)]);if(!s)throw new Et("The payment provider did not initialize.","authentication_error");let f=null;return i?f=c:t&&(f=s),{flopay:s,paypalFlopay:f}}import{PaymentAPI as Bo,PciVaultCardCapture as vu,toStripeAppearance as bu}from"@flopay/js";import{buildCheckoutProcessMetadata as Cu,buildProcessPaymentAvsAccount as Su,buildWalletSheetWindowMessage as wu,COUNTRY_OPTIONS as ku,classifyPaymentRejection as Iu,clearStripePayPalReturn as Ru,computeVaultCardThemeColors as Eu,darkenHex as _u,denyPaymentPermissionToNewFrames as Tu,FloPayError as Br,filterStripeMethodsByCountryGate as Mu,getPostalCodeExample as Au,getPostalCodeLabel as ts,getStateFromPostalCode as xu,getStateLabel as Gi,getStateOptions as Bu,getStripeMethodDisplayName as fa,hasMatchingStripePayPalReturn as Fu,isAuthorizationOnlySession as Yi,isAVSFieldVisible as Yt,isMountableVaultBlock as Du,isPostalCodeSupported as Ou,isSetupIntentClientSecret as Ji,isValidEmail as Pn,isValidPostalCode as Nu,isWalletSheetRefusedForWindowSize as Lu,needsStripeMethodExplicitConfirm as rc,normalizeBeforeButtonClickError as oc,normalizeCheckoutFailureOutcome as zu,partitionStripeMethods as Uu,randomUuidV4 as qu,readMatchingStripePayPalContinuation as ju,readStripeRedirectParams as hc,resolveAVSConfig as $u,resolveButtonsLayoutTheme as Wu,resolveSetupFutureUsage as Pc,resolveTheme as Hu,resolveVaultMountOptions as Zi,STRIPE_PAYPAL_RESUME_KEY as Vu,derivePrimaryTileStyle as Ku,shouldPreferWalletPopup as ac,stripeExpressMethodToOptionKey as Gu,stripeRedirectReturnUrl as vc,toCssWeight as Yu,WALLET_SHEET_WINDOW_TOO_SMALL_CODE as bc}from"@flopay/shared";import{ExpressCheckoutElement as Cc,PaymentElement as Ju,Elements as no,useElements as as,useStripe as is}from"@stripe/react-stripe-js";import Zu,{useCallback as Ge,useContext as Do,useEffect as pt,useLayoutEffect as Xu,useMemo as vt,useRef as K,useState as ae}from"react";function xo(e,t){return{...t,inAppBrowser:e.browser.inAppBrowser,appFamily:e.browser.appFamily,popupCapability:e.capability.current(),presentationMode:e.presentationMode}}function Xa(e,t){if(e)return{error:n=>e.error(xo(t,n)),log:n=>e.log(xo(t,n)),performance:n=>e.performance(xo(t,n)),terminal:n=>e.terminal(xo(t,n)),now:()=>e.now(),elapsed:n=>e.elapsed(n),setCheckoutContext:n=>e.setCheckoutContext(n),beginCheckout:n=>e.beginCheckout(n),disable:()=>e.disable(),subscribe:n=>e.subscribe(n),flush:()=>e.flush(),destroy:()=>e.destroy()}}import{darkenHex as Ec}from"@flopay/shared";import{Fragment as Fo,jsx as d,jsxs as Ke}from"react/jsx-runtime";var Ir="flopay_stripe_resume",ic="flopay_wallet_resume",Sc="fw1",Qu="fw2",wc=300*1e3,ep=900,tp=25e3,np=25e3,rp=1e4,cr={provider:"paypal",paymentMethodCategory:"paypal"},op="x-flopay-process-result-source",ap="status";async function ip(e,t,n){try{let o=(await e.getUnifiedCheckoutSession(t,n)).data.session;if(o?.status==="complete")return null;if(o?.status==="authorized")return{status:"authorized",paymentId:o.paymentId,sessionId:o.id||t,authorizationExpiresAt:o.authorizationExpiresAt}}catch{}}var Qa={},ma=class{constructor(t){this.reason=t}};function sp(e){return e==null?"confirmation_result_missing":"confirmation_result_not_object"}function en(e,t){if(typeof window>"u")return!1;try{return t===void 0?window.localStorage.removeItem(e):window.localStorage.setItem(e,JSON.stringify(t)),!0}catch{return!1}}function ss(e){return`${Qu}:${e}`}function ei(e){return en(ss(e))}function ti(e,t){if(typeof window>"u")return null;let n=ss(e);try{let o=localStorage.getItem(n);if(!o)return null;let a=JSON.parse(o);return typeof a.createdAt!="number"||Date.now()-a.createdAt<0||Date.now()-a.createdAt>wc||a.sessionId!==e||a.nonce!==t||typeof a.clientSecret!="string"||typeof a.providerObjectId!="string"||typeof a.paymentMethodType!="string"?(ei(e),null):a}catch{return ei(e),null}}function lp(e){return en(ss(e.sessionId),e)}function sc(e,t,n){let o=ti(e,t);return!o||o.clientSecret!==n?!1:ei(e)}function Xi(e,t,n){if(typeof window>"u")return;ti(e,t)?.clientSecret===n&&ei(e)}function cp(e){return typeof e.payment_method=="string"?e.payment_method:typeof e.payment_method?.id=="string"?e.payment_method.id:null}function Qi(e,t,n){if(!e||typeof e.id!="string"||t&&e.id!==t)return{kind:"ambiguous"};if(e.status==="canceled"||e.status==="requires_payment_method")return{kind:"terminal"};let o=n?e.status==="succeeded":na(e.status),a=cp(e);return!o||!a?{kind:"ambiguous"}:{kind:"confirmed",intentId:e.id,paymentMethodId:a}}async function lc(e,t,n){let o=null;try{return await Promise.race([_l(e,t),new Promise(a=>{o=window.setTimeout(()=>{o!==null&&n?.delete(o),a(null)},rp),n?.add(o)})])}finally{o!==null&&(window.clearTimeout(o),n?.delete(o))}}function dp(e){return e==="provider_sdk"?"PROVIDER_RUNTIME_FAILED":"REQUEST_TIMEOUT"}function kc(e){return e instanceof Br&&(e.type==="validation_error"||e.statusCode===400||e.statusCode===422)}async function ni(e,t,...n){let o=n[2].provider;t?.({class:"lifecycle",name:"payment.intent.started",provider:o});try{return await new Bo(e,{telemetry:!1}).createSessionIntent(...n)}catch(a){throw kc(a)||t?.({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:"intent_create",provider:o}),a}}var es=Vu,ya=new Map,up=250,cc="Just a moment \u2014 we are finalizing your order. Please press pay again.",pp="We are still confirming your last payment with your bank. Please wait a moment before trying again.";function ls(e,t,n,o){e?.error({errorCode:"PROVIDER_LOAD_FAILED",failureCategory:"provider_runtime",stage:"provider_load",provider:t,paymentMethodCategory:n,requestCategory:"provider_sdk",...o?{terminalReason:o}:{}})}async function ri({billingApiUrl:e,sessionId:t,nonce:n,request:o}){if(!(!t||!n))try{await new Bo(e,{telemetry:!1}).reportSessionIntentDecline(t,n,o)}catch{}}function yp(e){return e instanceof Br&&typeof e.statusCode=="number"&&e.statusCode>=400&&e.statusCode<500}function Ic({event:e,fallbackEmail:t,fallbackName:n}){let o=e.billingDetails,a=t?.trim(),i=oa(n),s=i.firstName?i:oa(o?.name);return lr({email:Pn(a)?a:o?.email?.trim(),firstName:s.firstName,lastName:s.lastName})}async function mp({event:e,prepared:t,email:n,billingName:o,methodLabel:a,collect:i}){let s=Ic({event:e,fallbackEmail:t?.accountPatch?.email??n,fallbackName:[t?.accountPatch?.firstName,t?.accountPatch?.lastName].join(" ").trim()||o});return Pn(s.email)?s:i(a,s)}var ga=180,dc=`flopay-card-enter ${ga}ms cubic-bezier(0, 0, 0.2, 1) both`,uc=`flopay-card-exit ${ga}ms cubic-bezier(0.4, 0, 0.2, 1) both`,fp=`flopay-buttons-enter ${ga}ms cubic-bezier(0, 0, 0.2, 1) both`,gp=`flopay-buttons-exit ${ga}ms cubic-bezier(0.4, 0, 0.2, 1) both`;function hp(e){return e.gateway==="stripe"?"stripe":e.gateway==="paypal"||e.isPaypal?"paypal":void 0}function cs(e){return Ku(e)}var Pp={visibility:"hidden",position:"absolute",pointerEvents:"none",width:"100%",height:0,overflow:"hidden"};function vp(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 ns={width:"100%",minHeight:ea,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 pc(e){return e==="paypal"?"paypal":e==="apple_pay"?"apple_pay":"google_pay"}function rs(e){return e==="paypal"?"PayPal":fa(e)}function bp(e){let t=Au(e);return`Enter a valid ${ts(e)}${t?` (e.g. ${t})`:""}`}function Cp(e,t,n){let o=Ou(e),a=t.trim(),i=n&&o,s=i&&!a,c=i&&!!a&&!Nu(e,a);return{visible:n,supported:o,required:i,empty:s,malformed:c}}function Sp(e,t){let n=e.trim(),o=t&&!n,a=t&&!!n&&!Pn(n);return{required:t,empty:o,malformed:a,value:n}}function wp(e){return typeof e=="number"?`${e}px`:e}function ds(e){return d(Rp,{...e})}function yc({sessionId:e,nonce:t,email:n,billingApiUrl:o,onTokenizedBody:a,onErrorChange:i,isProcessing:s=!1,onButtonClick:c,onDecline:f,onTechnicalFailure:C,runBeforeButtonClick:T,billingName:I,onBuyerIdentityReady:z,onLoadStateChange:ie,placeholderBorderRadius:O,popupCapabilityOwner:Se,externalTelemetryContext:G,presentationMode:v}){let P=jr(),{emitInstrument:ve}=Do(Jn),N=is(),_e=as(),Y=vt(()=>Xa(mn(P),G),[G,P]),[Ne,yt]=ae("loading");pt(()=>{ie?.(Ne)},[Ne,ie]);let[Be,mt]=ae(!1),Nt=K(!1),fe=!Pn(n?.trim())||!I?.trim(),{request:Fe,collect:bt,finish:Te}=ko(),qe=K(!1),Re=K(null),ee=K(null),[je,lt]=ae(0),[It,rt]=ae(!1),ce=K(!1),X=K(new Map),{startAttempt:L,finishAttempt:he,invalidateAttempt:$e,isAttemptInvalidated:Me,isAttemptCurrent:A,generationRef:Ye}=sa((E,ne,Ue)=>{C?.(E,ne,{...Ue,popupBlocked:Ue?.popupBlocked??zr(ne),provider:"stripe",paymentMethodCategory:"paypal",presentationMode:v,terminalReason:"overlay_timeout"}),rt(!0),lt(M=>M+1)},{onHandoffObserved:()=>{Se.markAvailable(),Y?.log({name:"provider.popup.opened",stage:"overlay_open",...cr,attempt:Ye.current})}});pt(()=>{It&&ee.current?.focus()},[It,je]);let Je=Ge(()=>{lt(E=>E+1)},[]),Ze=Ge((E,ne,Ue)=>{$e(Ue),C?.("paypal",E,{code:ne,popupBlocked:zr(E),provider:"stripe",paymentMethodCategory:"paypal",presentationMode:v}),rt(!0),Je()},[$e,C,v,Je]),We=Ge(()=>{window.setTimeout(()=>{(Re.current?.querySelector("iframe")??Re.current)?.focus()},0)},[]);pt(()=>{ce.current&&(ce.current=!1,We())},[We,je]);let ze=Ge(()=>{rt(!1),i?.(null),We()},[We,i]);pt(()=>{if(!N||qe.current)return;let[E,ne,Ue]=hc();if(!E||!ne)return;let M=ju(ne);if(!M)return;qe.current=!0;let se=!0,Xe=ya.get(ne);Xe||(Xe=Ue==="failed"?Promise.resolve(null):Promise.resolve().then(()=>N.retrievePaymentIntent(ne)),ya.set(ne,Xe));let we={accountPatch:M.accountPatch,sessionId:M.sessionId,nonce:M.nonce},ht=()=>{Y?.error({errorCode:"REDIRECT_RESUME_FAILED",stage:"redirect_resume",...cr,requestCategory:"provider_sdk"})};return Y?.log({name:"provider.redirect.resumed",stage:"redirect_resume",...cr}),(async()=>{try{mt(!0);let m=await Xe;if(!se)return;if(m?.error){ya.delete(ne),ht(),i?.(m.error.message??"Failed to retrieve PayPal payment status.");return}if(Ru(),ya.delete(ne),Ue==="failed"){let Ee="PayPal payment was declined. Please try again.";Y?.terminal({outcome:"payment_declined",...cr,terminalReason:"provider_declined"}),i?.(Ee),f?.(yn("paypal",Ee));return}let w=m?.paymentIntent;if(w&&w.id!==E){ht(),i?.("Failed to match the returned PayPal payment.");return}if(w&&(w.status==="requires_capture"||w.status==="succeeded")){let Ee=typeof w.payment_method=="string"?w.payment_method:w.payment_method?.id;a({id:Ee??w.id,type:"card",threeDSecureActionResultTokenId:w.id,isPaypal:!0},{...we,presentationMode:"redirect"})}else{let Ee="PayPal payment was not completed. Please try again.";Y?.terminal({outcome:w?.status==="canceled"?"payment_cancelled":"payment_declined",...cr,terminalReason:w?.status==="canceled"?"cancelled":"provider_declined"}),i?.(Ee),f?.(yn("paypal",Ee))}}catch(m){if(!se)return;ya.delete(ne),ht(),i?.(m instanceof Error?m.message:"Failed to complete PayPal payment.")}finally{se&&mt(!1)}})(),()=>{se=!1,qe.current=!1}},[N,a,i,f,Y]);let De=Ge(async(E=!1)=>{let ne=T?await T("paypal"):{proceed:!0};if(!ne.proceed)return X.current.delete(je),!1;let Ue=L("paypal");return X.current.set(je,{generation:Ue,accountPatch:ne.accountPatch,sessionId:ne.sessionId,nonce:ne.nonce}),rt(!1),Y?.log({name:`provider.${E?"redirect.started":"handoff.requested"}`,stage:E?"redirect":"overlay_open",...cr,attempt:Ue}),c?.("paypal"),!0},[c,Y,T,L,je]),be=Ge(async E=>{if(s||Be||!await De()){E.reject();return}E.resolve()},[s,De,Be]),Ct=Ge(async E=>{if(!N||!_e)return;let ne=X.current.get(je);if(ne&&!A(ne.generation)){X.current.delete(je);return}if(!ne&&Me()||ne&&!he(ne.generation))return;ne||he();let Ue=ne??null;if(X.current.delete(je),!Ue&&T){let Xt=await T("paypal");if(!Xt.proceed){E.paymentFailed({reason:"fail",message:"PayPal checkout was cancelled."});return}Ue={accountPatch:Xt.accountPatch,sessionId:Xt.sessionId,nonce:Xt.nonce}}let M=Ue?.sessionId??e,se=Ue?.nonce??t,Xe=await mp({event:E,prepared:Ue,email:n,billingName:I,methodLabel:"PayPal",collect:bt});if(!Xe){E.paymentFailed({reason:"fail",message:"Buyer details are required."});return}let we=Xe.email,ht={...Ue?.accountPatch,...lr(Xe,!0)};try{if(mt(!0),i?.(null),!M||!Pn(we))throw new Error("Missing sessionId or email for PayPal payment");await z?.(Xe);let Xt=N.createPaymentMethod,{error:m,paymentMethod:w}=await Xt({type:"paypal"});if(m){Ze(m,"stripe_paypal_create_payment_method_failed",ne?.generation),E.paymentFailed({reason:"fail"});return}let Ee=await ni(o,ve,M,se??"",{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:"paypal",paymentMethodId:w?.id??null,intentKind:"payment"});if(Ee.provider!=="stripe")throw new Error("Invalid provider returned for PayPal intent");let de=Ee.clientSecret,y={return_url:vc()};if(w?.id&&(y.payment_method=w.id),!en(es,{clientSecret:de,sessionId:M,nonce:se,accountPatch:ht})&&v==="redirect")throw new Error("Unable to save PayPal checkout progress. Please try again.");let{error:_,paymentIntent:F}=await N.confirmPayment({clientSecret:de,confirmParams:y,redirect:"if_required"});if(_){if(en(es),Ba(_)){let et=_.message??"Your payment was declined.";Y?.terminal({outcome:"payment_declined",...cr,terminalReason:"provider_declined"}),i?.(et),f?.(yn("paypal",et,{code:go(_),declineCode:Mi(_)})),await ri({billingApiUrl:o,sessionId:M,nonce:se,request:{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:"paypal",providerDeclineReason:go(_)??"provider_declined"}})}else Ze(_,"stripe_paypal_confirm_failed",ne?.generation);return}en(es);let j=typeof F?.payment_method=="string"?F.payment_method:F?.payment_method?.id;a({id:j??F?.id,type:"card",threeDSecureActionResultTokenId:F?.id,isPaypal:!0},{accountPatch:ht,paymentMethodCategory:"paypal",presentationMode:v,sessionId:M,nonce:se});return}catch(Xt){Ze(Xt,"stripe_paypal_failed",ne?.generation)}finally{mt(!1)}},[N,_e,e,t,n,I,bt,z,o,ve,a,i,f,T,Ze,he,A,Me,Y,v,je]),Zt=Ge(async()=>{if(!(Nt.current||s||Be||!N||!_e)){Nt.current=!0,mt(!0);try{if(!await De(!0))return;await Ct({expressPaymentType:"paypal",paymentFailed:()=>{}})}finally{Nt.current=!1,mt(!1)}}},[_e,Ct,s,De,N,Be]),ot=v==="redirect"?d("button",{type:"button",disabled:s||Be,onClick:()=>{Zt()},style:{width:"100%",minHeight:ea,border:"1px solid #d1d5db",borderRadius:O??8,background:"#ffc439",color:"#111827",cursor:s||Be?"not-allowed":"pointer",fontSize:"1rem",fontWeight:700},children:"Pay with PayPal"}):d(Cc,{onReady:E=>yt(Ai(E,["paypal"])),onLoadError:()=>{yt("load_error"),ls(Y,"paypal","paypal","provider_error")},onClick:be,onConfirm:Ct,onCancel:()=>{let E=X.current.get(je);X.current.delete(je),Y?.terminal({outcome:"payment_cancelled",...cr,terminalReason:"cancelled",...E?{attempt:E.generation}:{}}),$e(E?.generation),rt(!1),ce.current=!0,Je()},options:{buttonType:{paypal:"paypal"},billingAddressRequired:fe,emailRequired:fe,phoneNumberRequired:!1,shippingAddressRequired:!1,paymentMethods:{applePay:"never",googlePay:"never",paypal:"auto",link:"never"}}},je),Lt=Ke(Fo,{children:[Ke("div",{ref:Re,tabIndex:-1,"data-testid":"flopay-paypal-focus-target",role:"group","aria-label":"PayPal payment method",style:{borderRadius:8,outlineOffset:4},children:[It&&d("button",{ref:ee,type:"button","data-testid":"flopay-paypal-retry-button",onClick:ze,style:ns,children:"Try PayPal again"}),Fe&&d(Io,{identity:Fe.identity,methodLabel:Fe.methodLabel,onComplete:Te,onCancel:()=>Te(null)},Fe.id),d("div",{style:{display:Fe?"none":void 0},children:ot})]}),Be&&!Fe&&d(Sr,{status:"processing"})]});return v==="redirect"?Lt:d(xi,{state:Ne,placeholderTestId:"flopay-paypal-placeholder",borderRadius:O,children:Lt})}function mc(e){return e==="apple_pay"||e==="google_pay"}var kp=200;function Ip({active:e}){return Xu(()=>e?Tu(document):void 0,[e]),null}function fc({sessionId:e,nonce:t,email:n,billingApiUrl:o,intentKind:a,expressMethods:i,onTokenizedBody:s,onErrorChange:c,onButtonClick:f,onDecline:C,onTechnicalFailure:T,runBeforeButtonClick:I,billingName:z,onBuyerIdentityReady:ie,onLoadStateChange:O,placeholderBorderRadius:Se,popupCapabilityOwner:G,externalTelemetryContext:v}){let P=jr(),{emitInstrument:ve}=Do(Jn),N=is(),_e=as(),Y=vt(()=>Xa(mn(P),v),[v,P]),[Ne,yt]=ae("loading");pt(()=>{O?.(Ne)},[Ne,O]);let[Be,mt]=ae(!1);pt(()=>{rt.current=Be},[Be]);let Nt=K(!Pn(n?.trim())||!z?.trim()).current,{request:fe,collect:Fe,finish:bt}=ko(),Te=K(null),qe=K(null),[Re,ee]=ae(0),[je,lt]=ae(()=>ac()),It=K(je),rt=K(!1),[ce,X]=ae(!1),[L,he]=ae(()=>ti(e,t)?"blocked":"idle"),[$e,Me]=ae("google_pay"),A=K(null),Ye=K(!0),Je=K(!1),Ze=K("google_pay"),We=K("google_pay"),ze=K(null),De=K(null),be=K(new Set),Ct=K(null),Zt=K(null);pt(()=>(Ye.current=!0,()=>{Ye.current=!1;for(let y of be.current)window.clearTimeout(y);be.current.clear()}),[]);let ot=K(new Map),{startAttempt:Lt,finishAttempt:E,invalidateAttempt:ne,isAttemptInvalidated:Ue,isAttemptCurrent:M,generationRef:se}=sa((y,re,_)=>{T?.(y,re,{..._,popupBlocked:_?.popupBlocked??zr(re),provider:"stripe",paymentMethodCategory:"wallet",presentationMode:"popup",terminalReason:"overlay_timeout"}),Me(y),X(!0),ee(F=>F+1)},{onHandoffObserved:y=>{Zt.current=se.current,G.markAvailable(),Y?.log({name:"provider.popup.opened",stage:"overlay_open",provider:"stripe",paymentMethodCategory:"wallet",attempt:se.current,...y==="apple_pay"||y==="google_pay"?{walletType:y}:{}})},defersMissingTerminal:mc,onMissingTerminalDeferred:(y,re)=>{let _=Y?.now()??globalThis.performance?.now()??Date.now(),F=Ct.current,j=F?.generation===re?F.startedAt:_;Y?.performance({stage:"overlay_return",durationMs:Math.max(0,_-j),durationMode:"buyer",provider:"stripe",paymentMethodCategory:"wallet",requestCategory:"provider_sdk",operationOutcome:"watchdog_expired",attempt:re,...mc(y)?{walletType:y}:{}}),Y?.flush?.().catch(()=>{})}});pt(()=>{ce&&qe.current?.focus()},[ce,Re]);let Xe=Ge(()=>{ee(y=>y+1)},[]),we=Ge((y,re,_,F,j=!1)=>{ne(F),T?.(y,re,{code:_,popupBlocked:zr(re),telemetryReported:j,provider:"stripe",paymentMethodCategory:"wallet",presentationMode:"popup"}),Me(y),X(!0),Xe()},[ne,T,Xe]),ht=Ge(()=>{window.setTimeout(()=>{(Te.current?.querySelector("iframe")??Te.current)?.focus()},0)},[]);pt(()=>{Je.current&&(Je.current=!1,ht())},[ht,Re]);let Xt=Ge(()=>{X(!1),c?.(null),ht()},[ht,c]),m=Ge(()=>{A.current?.()},[]);pt(()=>{let y=null,re=()=>{y=null;let F=ac();F!==It.current&&(It.current=F,lt(F),!rt.current&&!M(se.current)&&Xe())},_=()=>{y!==null&&window.clearTimeout(y),y=window.setTimeout(re,kp)};return window.addEventListener("resize",_),()=>{window.removeEventListener("resize",_),y!==null&&window.clearTimeout(y)}},[se,M,Xe]),pt(()=>{let y=ti(e,t);if(!y)return;let re=!1,_=!1,F=async()=>{if(!_){_=!0,re||he("checking");try{let j=await lc(N,y.clientSecret,be.current);if(re)return;let et=Qi(j,y.providerObjectId,Ji(y.clientSecret));if(et.kind==="confirmed"){if(!sc(e,t,y.clientSecret))return;A.current=null,he("idle"),s({id:et.paymentMethodId,type:"card",threeDSecureActionResultTokenId:et.intentId},{...y.accountPatch?{accountPatch:y.accountPatch}:{},paymentMethodCategory:"wallet",sessionId:e,nonce:t});return}if(et.kind==="terminal"){Xi(e,t,y.clientSecret),A.current=null,he("idle"),Me(y.paymentMethodType),X(!0),Xe();return}he("blocked")}catch{re||he("blocked")}finally{_=!1}}};return A.current=F,he("blocked"),()=>{re=!0,A.current===F&&(A.current=null)}},[t,s,Xe,e,N]);let w=Ge(async y=>{let re=!1,_=Ae=>{re||(re=!0,y.paymentFailed({reason:"fail",...Ae?{message:Ae}:{}}))};if(!N||!_e){_();return}let F=ot.current.get(Re);if(F&&!M(F.generation)){ot.current.delete(Re),_();return}if(!F&&Ue()){_();return}if(F&&!E(F.generation)){_();return}F||E();let j=y.expressPaymentType??F?.method??Ze.current,et=F??null,St=pc(j),wt;j==="apple_pay"?wt="apple_pay":j==="google_pay"&&(wt="google_pay");let ct=F?.generation??se.current,$=Y,wn=$?.now()??globalThis.performance?.now()??Date.now(),On=new AbortController,fn=!1,zt=!1,Ut=null,Tn=e,vn="processing",xt="other",jn="provider_runtime",qt,ur=new Promise((Ae,Le)=>{qt=Le}),jt=window.setTimeout(()=>{fn=!0,On.abort(),qt(Qa)},tp),$n=async(Ae,Le,Bt)=>{vn=Ae,xt=Le,jn=Le==="intent_create"||Le==="session_claim"?"transport_error":"provider_runtime";let kn=$?.now()??globalThis.performance?.now()??Date.now();try{return await Promise.race([Bt,ur])}finally{let In=$?.now()??globalThis.performance?.now()??Date.now();$?.performance({stage:Ae,durationMs:Math.max(0,In-kn),durationMode:"machine",requestCategory:Le,paymentMethodCategory:"wallet",provider:"stripe",...fn?{statusClass:"timeout"}:{}})}};try{if(mt(!0),c?.(null),!et&&I){let oe=await $n("processing","other",I(St));if(!oe.proceed){_();return}et={accountPatch:oe.accountPatch,sessionId:oe.sessionId,nonce:oe.nonce}}let Ae=et?.sessionId??e;Tn=Ae;let Le=et?.nonce??t,Bt=ze.current??et?.accountPatch,kn=Ic({event:y,fallbackEmail:Bt?.email??n,fallbackName:[Bt?.firstName,Bt?.lastName].join(" ").trim()||z});if(!Pn(kn.email)){_("Buyer details are required."),Fe(rs(j),kn).then(oe=>{oe&&(ze.current=oe)});return}ze.current=null;let In={...et?.accountPatch,...lr(kn,!0)};await $n("processing","session_claim",Promise.resolve(ie?.(kn)));let{error:Rn}=await $n("tokenization","provider_sdk",_e.submit());if(Rn){_(),we(j,Rn,"stripe_wallet_submit_failed",F?.generation);return}if(!Ae)throw new Error("Missing sessionId or email for payment.");let gn={provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:j,paymentMethodId:null,intentKind:a},bn=JSON.stringify({sessionId:Ae,nonce:Le??"",request:gn}),ln=De.current,on=ln?.retryIdentity===bn?ln.authorizationAttemptId:qu();De.current={authorizationAttemptId:on,retryIdentity:bn};let $t=await $n("processing","intent_create",ni(o,ve,Ae,Le??"",{...gn,authorizationAttemptId:on},{signal:On.signal}));if($t.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let Rt=$t.clientSecret,cn=lp({createdAt:Date.now(),sessionId:Ae,...Le?{nonce:Le}:{},clientSecret:Rt,providerObjectId:$t.providerObjectId,paymentMethodType:j,accountPatch:In});window.clearTimeout(jt),zt=!0,$?.performance({stage:"callback",durationMs:Math.max(0,($?.now()??globalThis.performance?.now()??Date.now())-wn),durationMode:"machine",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",provider:"stripe"});let dn=$?.now()??globalThis.performance?.now()??Date.now(),ue={stage:"provider_confirmation",provider:"stripe",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",...wt?{walletType:wt}:{},attempt:ct},Xn=!1,Mn=null;$?.log({name:"payment.provider_confirmation.started",...ue}),Ut=window.setTimeout(()=>{Ut!==null&&be.current.delete(Ut),Xn=!0;let oe=$?.now()??globalThis.performance?.now()??Date.now();$?.error({errorCode:"PROVIDER_RUNTIME_FAILED",...ue,operationOutcome:"watchdog_expired",durationMs:Math.max(0,oe-dn),statusClass:"timeout",failureCategory:"provider_runtime",terminalReason:"provider_error"}),$?.flush?.().catch(()=>{}),Mn?.()},np),be.current.add(Ut);let pr=(oe,Pt)=>{Ut!==null&&(window.clearTimeout(Ut),be.current.delete(Ut),Ut=null);let tt=$?.now()??globalThis.performance?.now()??Date.now(),kt=Math.max(0,tt-dn),ke=oe;Xn&&(oe==="resolved"?ke="resolved_late":oe==="returned_error"?ke="returned_error_late":ke="rejected_late");let An=Pt??(oe==="resolved"?"approved":"provider_error");return $?.log({name:"payment.provider_confirmation.returned",...ue,operationOutcome:ke,terminalReason:An}),$?.performance({...ue,durationMs:kt,durationMode:"buyer",operationOutcome:ke,terminalReason:An}),{durationMs:kt,operationOutcome:ke,terminalReason:An}},tn=!1,hn=!1,yr=oe=>{if(!oe||typeof oe!="object")return null;let Pt=oe;if(Pt.error)return null;let tt=Pt.setupIntent??Pt.paymentIntent,kt=Qi(tt??null,void 0,!!Pt.setupIntent);return kt.kind==="confirmed"?kt:null},Wn=oe=>{if(tn||F&&se.current!==F.generation)return;let Pt=yr(oe);if(!Pt)return;if(cn&&!sc(Ae,Le,Rt)){tn=!0;return}let{intentId:tt,paymentMethodId:kt}=Pt;tn=!0,hn=!0,De.current=null,A.current=null,Ye.current&&(he("idle"),mt(!1));let ke=`${Sc}:${Ae}`;en(ke,{createdAt:Date.now(),sessionId:Ae,nonce:Le,accountPatch:In,paymentMethodId:kt,providerIntentId:tt,paymentMethodType:j});try{s({id:kt,type:"card",threeDSecureActionResultTokenId:tt},{accountPatch:In,paymentMethodCategory:"wallet",sessionId:Ae,nonce:Le})}finally{en(ke)}},Wt=!1;Mn=async()=>{if(!(Wt||tn||hn)){Wt=!0,Ye.current&&he("checking");try{let oe=await lc(N,Rt,be.current);if(tn||hn)return;let Pt=Ji(Rt),tt=Qi(oe,$t.providerObjectId,Pt);if(tt.kind==="confirmed"){Wn(Pt?{setupIntent:oe}:{paymentIntent:oe});return}if(tt.kind==="terminal"){if(hn=!0,Xi(Ae,Le,Rt),De.current=null,A.current=null,!Ye.current)return;he("idle"),_(),we(j,new Error("Wallet confirmation did not complete."),"stripe_wallet_confirmation_terminal",F?.generation,!0);return}Ye.current&&!hn&&(he("blocked"),mt(!1))}catch{Ye.current&&!hn&&(he("blocked"),mt(!1))}finally{Wt=!1}}},A.current=Mn;let p,dt;try{let oe=await(Ji(Rt)?N.confirmSetup({elements:_e,clientSecret:Rt,redirect:"if_required"}):N.confirmPayment({elements:_e,clientSecret:Rt,redirect:"if_required"}));if(!oe||typeof oe!="object")throw new ma(sp(oe));if(p=oe,!p.error&&!yr(p))throw new ma("confirmation_result_unconfirmed");dt=pr(p.error?"returned_error":"resolved",p.error&&Ba(p.error)?"provider_declined":void 0)}catch(oe){let Pt=oe instanceof ma?oe.reason:void 0,tt=Pt!==void 0,kt=pr(tt?"returned_error":"rejected");if($?.error({...tt?{errorCode:"CONFIGURATION_INVALID",failureCategory:"invalid_response",reason:Pt}:Ni(oe),...ue,operationOutcome:kt.operationOutcome,durationMs:kt.durationMs,statusClass:"unknown",terminalReason:kt.terminalReason}),!Ye.current||tn)return;await Mn?.();return}let W=p.error;if(W){if(!Ye.current||tn)return;if(Ba(W)){hn=!0,Xi(Ae,Le,Rt),De.current=null,A.current=null,he("idle");let oe=W.message??"Your payment was declined.";_(oe),c?.(oe),C?.(yn(St,oe,{code:go(W),declineCode:Mi(W)})),ri({billingApiUrl:o,sessionId:Ae,nonce:Le,request:{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:j,providerDeclineReason:go(W)??"provider_declined",...$t.intentKind==="payment"&&$t.providerObjectId.startsWith("pi_")?{providerIntentId:$t.providerObjectId}:{}}})}else $?.error({...Ni(W),...ue,operationOutcome:dt.operationOutcome,durationMs:dt.durationMs,statusClass:"unknown",terminalReason:dt.terminalReason}),await Mn?.();return}if(Wn(p),!tn)throw new Error("Invalid provider returned for APM intent")}catch(Ae){if(Ae===Qa){let Le=$?.now()??globalThis.performance?.now()??Date.now();$?.error({errorCode:dp(xt),stage:vn,requestCategory:xt,paymentMethodCategory:"wallet",provider:"stripe",...wt?{walletType:wt}:{},operationOutcome:"watchdog_expired",checkoutSessionId:Tn,durationMs:Math.max(0,Le-wn),statusClass:"timeout",failureCategory:jn,attempt:ct,terminalReason:"provider_error"}),$?.flush?.().catch(()=>{})}_(),we(j,Ae,Ae===Qa?"stripe_wallet_authorization_timeout":"stripe_wallet_failed",F?.generation,Ae===Qa)}finally{if(window.clearTimeout(jt),Ut!==null&&(window.clearTimeout(Ut),be.current.delete(Ut)),!zt){let Ae=$?.now()??globalThis.performance?.now()??Date.now();$?.performance({stage:"callback",durationMs:Math.max(0,Ae-wn),durationMode:"machine",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",provider:"stripe",...fn?{statusClass:"timeout"}:{}})}Ye.current&&mt(!1)}},[N,_e,e,t,n,z,Fe,ie,o,ve,a,s,c,C,I,we,E,M,Ue,se,Y,Re]),Ee=vt(()=>yl(i),[i]),de=vt(()=>i.map(Gu),[i]);return Ke(Fo,{children:[d(xi,{state:Ne,placeholderTestId:"flopay-wallet-placeholder",borderRadius:Se,children:Ke("div",{ref:Te,tabIndex:-1,"data-testid":"flopay-wallet-focus-target",role:"group","aria-label":"Wallet payment methods",style:{borderRadius:8,outlineOffset:4},children:[ce&&Ke("button",{ref:qe,type:"button","data-testid":"flopay-wallet-retry-button",onClick:Xt,style:ns,children:["Try ",rs($e)," again"]}),L!=="idle"&&Ke("div",{role:"status","aria-live":"polite",children:[d("p",{children:"We are still confirming your payment. Check its status before trying again."}),d("button",{type:"button",onClick:m,disabled:L==="checking",style:ns,children:L==="checking"?"Checking payment status\u2026":"Check payment status"})]}),fe&&d(Io,{identity:fe.identity,methodLabel:fe.methodLabel,onComplete:bt,onCancel:()=>bt(null)},fe.id),L==="idle"&&Ke("div",{style:{display:fe?"none":void 0},children:[d(Ip,{active:je}),d(Cc,{onReady:y=>{yt(Ai(y,de))},onLoadError:y=>{yt("load_error"),ls(Y,"stripe","wallet","provider_error")},onClick:async y=>{let re=Y?.now()??globalThis.performance?.now()??Date.now();Ze.current=y.expressPaymentType,We.current=pc(y.expressPaymentType);let _=!0,F=window.setTimeout(()=>{_=!1,y.reject()},ep),j=I?await I(We.current):{proceed:!0};if(window.clearTimeout(F),!_)return;if(!j.proceed){ot.current.delete(Re),y.reject();return}let et=Lt(y.expressPaymentType);Ct.current={generation:et,startedAt:re},ot.current.set(Re,{generation:et,method:y.expressPaymentType,accountPatch:j.accountPatch,sessionId:j.sessionId,nonce:j.nonce}),X(!1),Y?.log({name:"provider.handoff.requested",stage:"overlay_open",provider:"stripe",paymentMethodCategory:"wallet",attempt:et,...y.expressPaymentType==="apple_pay"||y.expressPaymentType==="google_pay"?{walletType:y.expressPaymentType}:{}}),f?.(We.current),y.resolve()},onConfirm:w,onCancel:()=>{let y=ot.current.get(Re);ot.current.delete(Re);let re=Ct.current,_=Y?.now()??globalThis.performance?.now()??Date.now();if(y&&re?.generation===y.generation&&Lu({method:y.method,elapsedMs:_-re.startedAt,handoffObserved:Zt.current===y.generation})){Y?.error({errorCode:"PROVIDER_RUNTIME_FAILED",failureCategory:"provider_runtime",stage:"overlay_open",provider:"stripe",paymentMethodCategory:"wallet",requestCategory:"provider_sdk",terminalReason:"provider_error",attempt:y.generation,walletType:"google_pay"}),De.current=null,we(y.method,new Error("The browser window is too small for the Google Pay sheet."),bc,y.generation,!0);return}Y?.terminal({outcome:"payment_cancelled",provider:"stripe",paymentMethodCategory:"wallet",terminalReason:"cancelled",...y?{attempt:y.generation}:{}}),ne(y?.generation),De.current=null,X(!1),Je.current=!0,Xe()},options:{...ml,paymentMethods:Ee,emailRequired:Nt,billingAddressRequired:Nt}},Re)]})]})}),Be&&d(Sr,{status:"processing"})]})}function Rc(e,t,n){let o=Pc(n,t,"inline_apm");return{...e,paymentMethodTypes:[t],...o?{setupFutureUsage:o}:null}}function os({method:e,sessionId:t,nonce:n,email:o,billingName:a,onBuyerIdentityReady:i,billingApiUrl:s,onTokenizedBody:c,onErrorChange:f,onDecline:C,onCancel:T,runBeforeButtonClick:I,onButtonClick:z,isProcessing:ie,submitButtonColor:O,submitButtonBorderRadius:Se,submitButtonStyle:G,errorText:v}){let P=jr(),{emitInstrument:ve}=Do(Jn),N=is(),_e=as(),[Y,Ne]=ae(!1),yt=K(!1),[Be,mt]=ae(!1),[Nt,fe]=ae("loading"),[Fe,bt]=ae(""),Te=!Pn(o?.trim()),qe=!Te||Pn(Fe.trim()),Re=Ge(async()=>{if(!N||!_e||ie||yt.current||!Be)return;yt.current=!0,Ne(!0);let ee=I?await I("card"):{proceed:!0};if(!ee.proceed){yt.current=!1,Ne(!1);return}z?.("card");let je=ee.sessionId??t,lt=ee.nonce??n,It=oa(a?.trim()),rt=lr({email:ee.accountPatch?.email?.trim()||o?.trim()||Fe.trim(),firstName:ee.accountPatch?.firstName?.trim()||It.firstName,lastName:ee.accountPatch?.lastName?.trim()||It.lastName}),ce=rt.email,X=lr({...ee.accountPatch,...rt});try{if(f?.(null),!Pn(ce))throw new Error("A valid email address is required for payment.");await i?.(rt);let L=await _e.submit();if(L.error){f?.(L.error.message??"Payment failed.");return}let he=[rt.firstName,rt.lastName].filter(Boolean).join(" "),$e=await N.createPaymentMethod({elements:_e,params:{billing_details:{email:ce,...he?{name:he}:{}}}});if($e.error||!$e.paymentMethod){f?.($e.error?.message??"Failed to create payment method.");return}let Me=$e.paymentMethod;if(!je||!ce)throw new Error("Missing sessionId or email for payment.");let A=Me.type||e,Ye=await ni(s,ve,je,lt??"",{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:A,paymentMethodId:null,intentKind:"payment"});if(Ye.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let Je=Ye.clientSecret;en(Ir,{clientSecret:Je,sessionId:je,nonce:lt,accountPatch:X,paymentMethodId:Me.id,paymentMethodType:Me.type??e,gateway:"stripe"});let{error:Ze,paymentIntent:We}=await N.confirmPayment({clientSecret:Je,confirmParams:{return_url:window.location.href,payment_method:Me.id},redirect:"if_required"});if(Ze){en(Ir);let be=Ze.message??"Payment failed.";f?.(be),C?.(yn("card",be,{code:Ze.code})),await ri({billingApiUrl:s,sessionId:je,nonce:lt,request:{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:e,providerDeclineReason:Ze.code??"provider_declined"}});return}let ze=We?.status;if(!na(ze)){en(Ir);let be=ze==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";f?.(be),C?.(yn("card",be,{code:ze??"missing_payment_intent"}));return}en(Ir);let De=typeof We?.payment_method=="string"?We.payment_method:We?.payment_method?.id;c({id:De??Me.id,type:"card",threeDSecureActionResultTokenId:We?.id,gateway:"stripe",paymentMethodType:Me.type??e},{accountPatch:X,paymentMethodCategory:"apm",sessionId:je,nonce:lt})}catch(L){f?.(L instanceof Error?L.message:"Payment failed. Please try again.")}finally{yt.current=!1,Ne(!1)}},[N,_e,ie,Be,I,z,t,n,o,a,Fe,i,s,ve,e,c,f,C]);return Ke("div",{"data-testid":`flopay-stripe-method-form-${e}`,style:{display:"flex",flexDirection:"column"},children:[Te&&d("div",{"data-testid":"flopay-apm-identity-fields",style:{display:"flex",flexDirection:"column",gap:"0.75rem",marginBottom:"0.75rem"},children:Te&&Ke("label",{style:{display:"flex",flexDirection:"column",gap:"0.375rem"},children:["Email address",d("input",{type:"email",autoComplete:"email",required:!0,value:Fe,onChange:ee=>bt(ee.target.value),style:{minHeight:42,padding:"0 0.75rem",border:"1px solid #d1d5db",borderRadius:6}})]})}),d(Ju,{onReady:()=>fe("ready"),onLoadError:()=>{fe("load_error"),ls(mn(P),"stripe","apm")},onChange:ee=>{mt(!!ee.complete)},options:{layout:fl,fields:{billingDetails:{email:"never"}},defaultValues:{billingDetails:{...a?.trim()?{name:a.trim()}:{},...Pn(o?.trim())?{email:o?.trim()}:{}}}}}),d(gl,{testId:`flopay-stripe-method-pay-${e}`,onClick:()=>{Re()},disabled:!Be||!qe||Y||ie||Nt!=="ready",color:O,borderRadius:Se,style:G,children:Y?"Processing\u2026":`Pay with ${fa(e)}`}),v&&d(Eo,{margin:"0.75rem 0 0",children:v})]})}function gc({sessionId:e,nonce:t,email:n,billingName:o,onBuyerIdentityReady:a,billingApiUrl:i,paymentElementMethods:s,stripeInstance:c,paymentElementBaseOptions:f,futureUseSession:C,onTokenizedBody:T,onErrorChange:I,onButtonClick:z,onDecline:ie,runBeforeButtonClick:O,onLoadStateChange:Se,isProcessing:G=!1,submitButtonColor:v="#4A49FF",submitButtonBorderRadius:P=8,submitButtonStyle:ve,buttonAppearance:N,themeId:_e,onExpandApm:Y,expandedApmMethod:Ne}){let{emitInstrument:yt}=Do(Jn),[Be,mt]=ae(null),[Nt,fe]=ae(null),Fe=K(!1),{request:bt,collect:Te,finish:qe}=ko();pt(()=>{s.length>0&&c?Se?.("ready"):c||Se?.("loading")},[s.length,c,Se]);let Re=Ge(async ce=>{if(!c||Fe.current||G)return;Fe.current=!0,fe(ce);let X=O?await O("card"):{proceed:!0};if(!X.proceed){Fe.current=!1,fe(null);return}z?.("card");let L=X.sessionId??e,he=X.nonce??t,$e=oa([X.accountPatch?.firstName,X.accountPatch?.lastName].filter(Boolean).join(" ")||o),Me=lr({email:X.accountPatch?.email?.trim()||n?.trim(),firstName:X.accountPatch?.firstName?.trim()||$e.firstName,lastName:X.accountPatch?.lastName?.trim()||$e.lastName});if(!Pn(Me.email)){fe(null);let Je=await Te(fa(ce),Me);if(!Je){Fe.current=!1;return}Me=Je,fe(ce)}let A=Me.email,Ye=lr({...X.accountPatch,...Me});try{if(I?.(null),!L||!Pn(A))throw new Error("Missing sessionId or email for payment.");await a?.(Me);let Je=await ni(i,yt,L,he??"",{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:ce,paymentMethodId:null,intentKind:"payment"});if(Je.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let Ze=Je.clientSecret;en(Ir,{clientSecret:Ze,sessionId:L,nonce:he,accountPatch:Ye,paymentMethodType:ce,gateway:"stripe"});let{error:We,paymentIntent:ze}=await c.confirmPayment({clientSecret:Ze,confirmParams:{return_url:window.location.href,payment_method_data:{type:ce,billing_details:{name:[Me.firstName,Me.lastName].filter(Boolean).join(" "),...A?{email:A}:{}}}},redirect:"if_required"});if(We){en(Ir);let Ct=We.message??"Payment failed.";I?.(Ct),ie?.(yn("card",Ct,{code:We.code})),await ri({billingApiUrl:i,sessionId:L,nonce:he,request:{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:ce,providerDeclineReason:We.code??"provider_declined"}});return}let De=ze?.status;if(!na(De)){en(Ir);let Ct=De==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";I?.(Ct),ie?.(yn("card",Ct,{code:De??"missing_payment_intent"}));return}en(Ir);let be=typeof ze?.payment_method=="string"?ze.payment_method:ze?.payment_method?.id;T({id:be??ze?.id,type:"card",threeDSecureActionResultTokenId:ze?.id,gateway:"stripe",paymentMethodType:ce},{accountPatch:Ye,paymentMethodCategory:"apm",sessionId:L,nonce:he})}catch(Je){I?.(Je instanceof Error?Je.message:"Payment failed. Please try again.")}finally{Fe.current=!1,fe(null)}},[c,G,O,z,e,t,n,Te,i,yt,o,a,T,I,ie]),[ee,je]=ae(null),lt=Y?Ne??null:ee,It=Ge(ce=>{Fe.current||G||lt&<!==ce||(rc(ce)?Y?Y(ce):je(ce):Re(ce))},[lt,G,Re,Y]),rt=vt(()=>ee?Rc(f,ee,C):null,[ee,f,C]);return d("div",{"data-testid":"flopay-stripe-payment-element-region",style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:bt?d(Io,{identity:bt.identity,methodLabel:bt.methodLabel,onComplete:qe,onCancel:()=>qe(null)},bt.id):s.map(ce=>{let X=Ne===ce,L=Nt===ce,he=Nt!==null&&Nt!==ce||Ne!=null&&Ne!==ce;return Ke(Zu.Fragment,{children:[d(pl,{method:ce,themeId:_e,submitting:L,disabled:he,highlighted:X,hasNextStep:rc(ce),onClick:()=>It(ce),backgroundColor:N?.backgroundColor,borderColor:N?.borderColor,textColor:N?.textColor,borderRadius:N?.borderRadius,fontFamily:N?.fontFamily}),!Y&&ee===ce&&rt&&c&&d(no,{stripe:c,options:rt,children:d(os,{method:ce,sessionId:e,nonce:t,email:n,billingName:o,onBuyerIdentityReady:a,billingApiUrl:i,onTokenizedBody:T,onErrorChange:I,onDecline:ie,onCancel:()=>je(null),runBeforeButtonClick:O,onButtonClick:z,isProcessing:G,submitButtonColor:v,submitButtonBorderRadius:P,submitButtonStyle:ve})},ce)]},ce)})})}function Rp({sessionId:e,nonce:t,billingApiUrl:n,telemetry:o,email:a,userId:i,onComplete:s,onError:c,onDecline:f,onTokenizedBody:C,firstName:T,lastName:I,chv:z,className:ie,submitLabel:O,isProcessing:Se,error:G,onErrorChange:v,showPayPal:P=!0,showStripe:ve=!0,walletPresentation:N="auto",enabledPaymentMethods:_e,enabledPaymentMethodCountries:Y,showApplePay:Ne=!0,showGooglePay:yt=!0,layout:Be="default",theme:mt,buttonsTheme:Nt,buttonsStyles:fe,appearance:Fe,cardButtonContent:bt,cardBackButtonContent:Te,cardTitleContent:qe,showSecurityFooter:Re,onButtonClick:ee,onBeforeButtonClick:je,onBuyerIdentityReady:lt,enableAVS:It,cardFieldOrder:rt,cardPreFormSlot:ce,avsLayout:X="row",country:L,zip:he,addressLine1:$e,addressLine2:Me,city:A,state:Ye,onCountryChange:Je,onZipChange:Ze,avsCheck:We,checkoutType:ze,checkoutLayout:De,totalAmount:be=0,currency:Ct="usd",initialCardOpen:Zt=!1,directPaypal:ot,isSubscription:Lt=!1,session:E,dataAttachmentPending:ne=!1,dataAttachmentRequiresIdentity:Ue=!1,debug:M=!1}){let se=jr(),Xe=Li(),we=Do(sr),{emitInstrument:ht}=Do(Jn),Xt=K(null);Xt.current||(Xt.current=Ua());let m=Xt.current,[,w]=ae(0),Ee=K(null);Ee.current||(Ee.current=Qo());let de=Ee.current,y=vt(()=>({browser:de,capability:m,presentationMode:"popup"}),[de,m]),re=E??we.session,_=vt(()=>({futureUse:re?.futureUse,futureUseUnsupported:re?.futureUseUnsupported}),[re?.futureUse,re?.futureUseUnsupported]),F=re?.gateways?.paypal?.providerObjectType??ot?.providerObjectType,j=ne||we.claimPending===!0,et=Ue||we.claimRequiresIdentity===!0,St=j&&!et,wt=Ol(),ct=n||wt,[$,wn]=ae(!1),[On,fn]=ae(null),[zt,Ut]=ae(L??""),[Tn,vn]=ae(he??""),[xt,jn]=ae($e??""),[qt,ur]=ae(Me??""),[jt,$n]=ae(A??""),[Ae,Le]=ae(Ye??""),[Bt,kn]=ae(""),[In,Rn]=ae({}),gn=K(he??""),bn=K(L??""),ln=K($e??""),on=K(Me??""),$t=K(A??""),Rt=K(Ye??""),cn=K(""),dn=K({});pt(()=>{let r=(g,q,ge,D,Q)=>{if(dn.current[g])return;let Tt=q?.trim();!Tt||Tt===ge.current||(ge.current=Tt,D(Tt),Q?.(Tt))};r("country",L,bn,Ut,Je),r("zip",he,gn,vn,Ze),r("addressLine1",$e,ln,jn),r("addressLine2",Me,on,ur),r("city",A,$t,$n),r("state",Ye,Rt,Le)},[L,he,$e,Me,A,Ye,Je,Ze]);let ue=vt(()=>$u(It),[It]),Xn=ue!==null,Mn=vt(()=>Yi(E),[E]),pr=Du(E?.vault),tn=!!E?.gateways?.pcivault,hn=Ml(E),Wn=!!(E?.gateways?.stripe?.enabledPaymentMethods??_e)?.includes("card")||Qr(E),Wt=pr||Wn||tn,p=!!(ve&&Wt&&e),[dt,W]=ae(()=>Be!=="buttons"||Zt?e??null:null),[oe,Pt]=ae(0),tt=Be!=="buttons"||Zt||!!e&&dt===e,kt=E?.captureMethod,ke=K(se);pt(()=>{ke.current=se},[se]);let[An,Dr]=ae(null);pt(()=>{if(!p||!e||!tt){Dr(null);return}let r=ke.current?ke.current.cardCapture({sessionId:e,captureMethod:kt}):new vu({sessionId:e,captureMethod:kt,billingApiUrl:ct,telemetry:o});return Dr({sessionId:e,captureMethod:kt,billingApiUrl:ct,telemetry:o,capture:r}),()=>{r.unmount()}},[p,e,tt,kt,ct,o]);let _t=p&&e&&tt&&An?.sessionId===e&&An.captureMethod===kt&&An.billingApiUrl===ct&&An.telemetry===o?An.capture:null,Nn=vt(()=>{let r=zt,g=ue?Yt(ue.postal_code,r):!1;return Cp(r,Tn,g)},[ue,zt,Tn]),{avsInvalid:Qn,invalidAvsFields:er}=vt(()=>{let r={line1:!1,city:!1,state:!1,zip:!1};if(!p||!ue)return{avsInvalid:!1,invalidAvsFields:r};let g=zt,q=(Q,Tt)=>Yt(Q,g)&&!Tt.trim(),ge={line1:q(ue.address_line_1,xt),city:q(ue.city,jt),state:q(ue.state,Ae),zip:Nn.empty||Nn.malformed};return{avsInvalid:ge.line1||ge.city||ge.state||ge.zip,invalidAvsFields:ge}},[p,ue,zt,xt,jt,Ae,Nn]),[Ht,mr]=ae(!1),[fr,xn]=ae(!1),[gr,Hn]=ae(!1),[hr,Er]=ae({line1:!1,city:!1,state:!1}),Ln=K(!1),tr=K({email:!1,line1:!1,city:!1,state:!1,zip:!1}),nr=K(!1),Mt=Ge(r=>{tr.current[r]=!0,nr.current=!0},[]),zn=Ge(r=>!Ln.current&&tr.current[r],[]),En=Ge(r=>{zn(r)&&Er(g=>g[r]?g:{...g,[r]:!0})},[zn]),[rr,or]=ae(()=>Zi(E?.vault,{billingApiUrl:ct,sessionId:e,nonce:t})),[nt,nn]=ae(Zt&&Wt?"card":"buttons"),[un,Bn]=ae(null),Or=nt==="expanding"||nt==="card",Pr=E?.gateways?.stripe&&!hn?"stripe":void 0,_r=Ge(()=>{ht?.({class:"card_surface",provider:Pr})},[Pr,ht]),Vn=K(null),rn=Ge(r=>{Vn.current&&clearTimeout(Vn.current),Vn.current=setTimeout(()=>{Vn.current=null,r()},ga)},[]);pt(()=>()=>{Vn.current&&clearTimeout(Vn.current)},[]);let Nr=K(!1),[an,k]=ae(0),b=K(null),H=Ge(()=>{_r(),W(e??null),Nr.current&&(Nr.current=!1,k(r=>r+1)),Pt(r=>r+1),nn("expanding"),rn(()=>nn("card"))},[rn,_r,e]),J=Ge(()=>{nn("collapsing"),rn(()=>nn("buttons"))},[rn]),ut=Ge(r=>{Bn(r),nn("apm-expanding"),rn(()=>nn("apm-form"))},[rn]),Vt=Ge(()=>{nn("apm-collapsing"),rn(()=>{nn("buttons"),Bn(null)})},[rn]);pt(()=>{Be==="buttons"&&Zt&&Wt&&(W(e??null),nn("card"))},[Be,Zt,Wt,e]);let[ye,x]=ae(null),B=K(!1),R=K(null),l=K("idle"),[u,h]=ae(!1),V=K(u);V.current=u;let[pe,Ce]=ae(()=>ot?.existingOrderId?{orderId:ot.existingOrderId,attempts:1}:null),Kt=K(pe);pt(()=>{Kt.current=pe},[pe]);let te=K(null),Ie=vt(()=>{if(lt||we.claimBuyerIdentity||E?.buyerIdentified!==!1||!e||!t)return;let r=`${ct}|${e}|${t}`;te.current?.key!==r&&(te.current={key:r,claim:Co(new Bo(ct,{telemetry:!1}),e,t,{...i?{userId:i}:{},...T?{firstName:T}:{},...I?{lastName:I}:{}})});let g=te.current.claim;return async q=>{await g(q)}},[lt,we.claimBuyerIdentity,E?.buyerIdentified,e,t,ct,i,T,I]),Oe=lt??we.claimBuyerIdentity??Ie,at=G??On,Z=vt(()=>Hu(mt),[mt]),S=vt(()=>{let r=Z?.buttonsLayout??Wu(Nt);return fe?{...r,...fe,cardButton:{...r.cardButton,...fe.cardButton},cardFormContainer:{...r.cardFormContainer,...fe.cardFormContainer},backButton:{...r.backButton,...fe.backButton},backButtonIcon:{...r.backButtonIcon,...fe.backButtonIcon},submitButton:{...r.submitButton,...fe.submitButton},title:{...r.title,...fe.title}}:r},[Z,Nt,fe]),U=Fe??Z?.appearance,He=vt(()=>Eu({appearance:U,buttonsStyles:S,layout:Be}),[U,S,Be]),Pe=we.inlineSessionPatchProcessing??!1,xe=(Se??$)||Pe,ft=ct.replace(/\/+$/,""),Qe=vt(()=>Oi({userId:i,email:a,firstName:T,lastName:I,country:L,zip:he},In),[i,a,T,I,L,he,In]),oo=[Qe.firstName,Qe.lastName].filter(r=>!!r?.trim()).join(" "),Cs=!Pn(Qe.email?.trim()),li=K(null);p&&li.current===null&&(li.current=Cs);let Lr=p&&(li.current??Cs),ci=vt(()=>Sp(Bt,Lr),[Bt,Lr]),ao=ci.empty||ci.malformed,Un=vt(()=>se?se.getRawProvider():null,[se]),Ss=vt(()=>Xe?Xe.getRawProvider():null,[Xe]),Uo=be||100,io=Ct.toLowerCase(),di=vt(()=>U?bu(U):null,[U]),so=di,ws=vt(()=>{let r=di??{},g=r.rules??{};return{...r,rules:{...g,".AccordionItem":{padding:"10px 14px",boxShadow:"none",...g[".AccordionItem"]??{}},".AccordionItemContents":{padding:"6px 14px 12px",boxShadow:"none",...g[".AccordionItemContents"]??{}}}}},[di]),ks=vt(()=>({...Tl(be,re?.captureMethod,_),currency:io,...so?{appearance:so}:null}),[be,io,re?.captureMethod,_,so]),ui=Pc(_,"paypal","paypal"),Is=vt(()=>({mode:"payment",amount:Uo,currency:io,captureMethod:"manual",...ui?{setupFutureUsage:ui}:null,...so?{appearance:so}:null}),[Uo,io,ui,so]),me=Ge(r=>{fn(r),v?.(r)},[v]),Rs=K(0);pt(()=>{an!==Rs.current&&(Rs.current=an,me(null))},[an,me]);let pi=K(""),[Es,Uc]=ae(!1),yi=Ge(()=>{Uc(!0)},[]);pt(()=>{if(!p||!Lr||!Oe||!Es||ao||pi.current)return;let r=lr({email:Pn(Qe.email?.trim())?Qe.email?.trim():cn.current.trim(),firstName:Qe.firstName?.trim(),lastName:Qe.lastName?.trim()});pi.current=JSON.stringify(r),Rn(g=>({...g,...r})),Promise.resolve(Oe(r)).catch(g=>{pi.current="",me(g instanceof Error?g.message:"Failed to attach buyer details.")})},[p,Lr,Oe,Es,ao,Qe.email,Qe.firstName,Qe.lastName,me]),pt(()=>{!p||!_t||_t.setCardFieldOrder?.(rt??null,ue==null&&!Lr)},[p,_t,rt,ue,Lr]),pt(()=>{(nt==="expanding"||nt==="collapsing"||nt==="apm-expanding"||nt==="apm-collapsing")&&me(null)},[nt,me]);let vr=Ge((r,g,q)=>{f?.(yn(r,g,q))},[f]),lo=Ge((r,g,q)=>{let ge=q?.popupBlocked??zr(g);ge&&m.markBlocked()&&w(it=>it+1);let D=rs(r),Q=q?.code===bc?wu(D):xa(D,ge,de.inAppBrowser),Tt=go(g),Gn=(Tt?.toLowerCase()==="error"?void 0:Tt)??dl(q?.code)??"external_payment_method_failed",Ve=new Br(Q,"api_error",{code:"external_payment_method_failed",param:r,details:{providerCode:Gn,popupBlocked:ge,inAppBrowser:de.inAppBrowser,appFamily:de.appFamily,popupCapability:m.current(),presentationMode:q?.presentationMode??"popup"}});q?.telemetryReported||mn(se)?.error(xo({...y,presentationMode:q?.presentationMode??"popup"},{errorCode:ge?"POPUP_BLOCKED":"PROVIDER_RUNTIME_FAILED",failureCategory:"provider_runtime",stage:"provider_ready",provider:q?.provider??(r==="paypal"?"paypal":"stripe"),paymentMethodCategory:q?.paymentMethodCategory??(r==="paypal"?"paypal":"wallet"),requestCategory:"provider_sdk",terminalReason:q?.terminalReason??(ge?"popup_blocked":"provider_error")})),x(null),Be==="buttons"&&(nn("buttons"),Bn(null)),me(Q),c?.(Ve),console.error("[FloPay] External payment method failed:",{method:r,code:Gn,popupBlocked:ge})},[de,y,se,Be,c,m,me]);pt(()=>{if(!p||!e){or(null);return}let r={billingApiUrl:ft,sessionId:e,nonce:t},g=Zi(E?.vault,r);if(g){or(g);return}if(!tt){or(null);return}let q=`${ft}\0${e}\0${t??""}`,ge=b.current;if(ge&&ge.key===q){or(ge.mount);return}or(null);let D=!0;return new Bo(ft).getVaultCapture(e,t).then(Q=>{if(!D)return;let Tt=Zi(Q,r);Tt?.verificationRequired&&!Q.html&&(b.current={key:q,mount:Tt}),Tt?or(Tt):me("Failed to load the secure card form.")}).catch(Q=>{D&&me(Q instanceof Error?Q.message:"Failed to load the secure card form.")}),()=>{D=!1}},[p,tt,oe,e,E?.vault,ft,t,me]);let ar=K({onComplete:s,onError:c,updateError:me,emitDecline:vr,resolvedAccount:Qe,avsConfig:ue,avsCheckProp:We,sessionId:e,nonce:t,baseUrl:ft,captureMethod:E?.captureMethod,paymentId:E?.paymentId,authorizationExpiresAt:E?.authorizationExpiresAt,serverSideCardGateway:hn});ar.current={onComplete:s,onError:c,updateError:me,emitDecline:vr,resolvedAccount:Qe,avsConfig:ue,avsCheckProp:We,sessionId:e,nonce:t,baseUrl:ft,captureMethod:E?.captureMethod,paymentId:E?.paymentId,authorizationExpiresAt:E?.authorizationExpiresAt,serverSideCardGateway:hn};let mi=K(!1),_s=Ge(()=>{let r=ar.current,g=r.resolvedAccount.email?.trim(),q=Pn(g)?g:cn.current.trim();if(!Pn(q))return null;let ge=r.resolvedAccount.firstName?.trim(),D=r.resolvedAccount.lastName?.trim(),Q=bn.current.trim()||r.resolvedAccount.country?.trim()||"",Tt=r.avsConfig?Yt(r.avsConfig.state,Q):!1,Gn=r.avsConfig?Yt(r.avsConfig.address_line_1,Q):!1,Ve=r.avsConfig?Yt(r.avsConfig.postal_code,Q):!1,it=r.avsConfig?Yt(r.avsConfig.city,Q):!1,gt=r.avsConfig?Yt(r.avsConfig.address_line_2,Q):!1,Ft=Gn&&!Tt&&Ve?xu(Q,(gn.current??"").trim()):null,Jr=Tt?Rt.current:Ft;return{accountData:{userId:r.resolvedAccount.userId??"",email:q,...ge?{firstName:ge}:{},...D?{lastName:D}:{},...Ve&&gn.current?{zip:gn.current}:{},...it&&$t.current?{city:$t.current}:{},...Jr?{state:Jr}:{},...Gn&&ln.current?{addressLine1:ln.current}:{},...gt&&on.current?{addressLine2:on.current}:{},...Q?{country:Q}:{}},...r.avsCheckProp===void 0?{}:{avsCheck:r.avsCheckProp},...r.avsConfig?{avsConfig:{country:Yt(r.avsConfig.country,Q),postal_code:Ve,address_line_1:Gn,address_line_2:gt,city:it,state:Tt}}:{}}},[]),Ts=K(j);Ts.current=j,pt(()=>{j||at!==cc||ar.current.updateError(null)},[j,at]),pt(()=>{!p||!_t||_t.setSubmitGate?.(Qn||j||ao||u)},[p,_t,Qn,j,ao,u]),pt(()=>{if(!p||!_t)return;mi.current=!1;let r=null,g=()=>{r&&clearTimeout(r),r=setTimeout(()=>{r=null,l.current="idle",x(null)},400)},q=_t.on("submitting",()=>{mr(!0),R.current&&clearTimeout(R.current),l.current="validation-window",R.current=setTimeout(()=>{R.current=null,l.current==="validation-window"&&(l.current="processing")},up),x("processing");let Ve=ar.current;if(!Ve.sessionId||!Ve.nonce)return;let it=_s();if(!it){Ve.updateError("Enter a valid email address."),l.current="idle",x(null);return}new Bo(Ve.baseUrl).patchAccountSnapshot(Ve.sessionId,Ve.nonce,it,{telemetryMode:"best_effort"}).catch(gt=>{if(!yp(gt))return;let Ft=gt instanceof Error?gt.message:"Please check your billing address and try again.";Ve.updateError(Ft),l.current="idle",x(null),Ve.onError?.(gt instanceof Br?gt:new Br(Ft,"api_error"))})}),ge=_t.on("complete",Ve=>{_o(Ve.sessionId??ar.current.sessionId),l.current="terminal",h(!1),x("success"),setTimeout(()=>{if(mi.current)return;mi.current=!0;let it=ar.current,gt=Yi(it)||Ve.outcome==="authorized",Ft=it.serverSideCardGateway?{}:{paymentIntentId:Ve.intentId};ar.current.onComplete?.(gt?{status:"authorized",...Ft,paymentId:Ve.paymentId??it.paymentId,sessionId:Ve.sessionId??it.sessionId,authorizationExpiresAt:Ve.authorizationExpiresAt??it.authorizationExpiresAt,checkoutMethod:"card"}:{status:"succeeded",...Ft,checkoutMethod:"card"})},600)}),D=_t.on("decline",Ve=>{let it=ar.current,gt=Ve.message??"Your payment was declined. Please try another card or contact your bank.";l.current="terminal",h(!1),it.updateError(gt),x("error");let Ft=Ve.failureOutcome??zu(Ve.declineReason)??"authorization_declined";it.emitDecline("card",gt,{code:Ft,declineCode:Ft}),g()}),Q=_t.on("error",Ve=>{let it=ar.current,gt=Ve.message??"There was a problem processing your payment. Please try again.";l.current="terminal",h(!1),it.updateError(gt),x("error"),it.onError?.(new Br(gt,"api_error",{code:Ve.failureOutcome??"capture_failed"})),g()}),Tt=_t.on("challenge_dismissed",()=>{R.current&&(clearTimeout(R.current),R.current=null),l.current="processing",h(!0),x(null)}),Gn=_t.on("blocked",()=>{if(V.current){ar.current.updateError(pp);return}if(!Ts.current){mr(!0);return}yi(),ar.current.updateError(cc)});return()=>{r&&(clearTimeout(r),r=null),R.current&&(clearTimeout(R.current),R.current=null),l.current="idle",h(!1),x(null),q(),ge(),D(),Q(),Tt(),Gn()}},[p,_t,yi,_s]);let br=!!ot?.clientId,qo=Array.isArray(_e),Ca=qo&&_e.length>0,Ms=qo&&_e.includes("paypal"),Sa=K(null);Sa.current===null&&(Sa.current=Fu());let co=Sa.current?"redirect":ul(de,N,m.current()),{expressMethods:wa,paymentElementMethods:fi}=vt(()=>Uu(_e,{excludePaypal:br}),[_e,br]),As=br||!!Xe||Ms&&co==="redirect",qc=vt(()=>As?wa.filter(r=>r!=="paypal"):wa,[wa,As]),jc=vt(()=>{let r=[];return Ne&&r.push("apple_pay"),yt&&r.push("google_pay"),r},[Ne,yt]),uo=qo?qc:jc,$c=ve&&uo.length>0,xs=Xn?zt:L,ka=vt(()=>Mu(fi,xs,Y),[fi,xs,Y]),gi=vt(()=>({mode:"payment",amount:Uo,currency:io,paymentMethodCreation:"manual",appearance:ws}),[Uo,io,ws]),[Bs,Fs]=ae("loading"),[Ds,Os]=ae("loading"),[Ns,Ls]=ae("loading"),[Wc,hi]=ae(!1),[zs,Pi]=ae("loading"),[vi,Hc]=ae();pt(()=>{Hc(Qo())},[]);let Ia=vi?.inAppBrowser,Ra=vi?Fa(vi,ot?.approvalPresentation,F??(Lt?"subscription":"order")):"popup",Us=P&&(br||(qo?Ms:Ia===!1)),qs=ve&&$c,jo=(!St||!!we.waitForDataAttachment)&&Us&&br,js=zs==="retrying"||zs==="exhausted",$o=null;ve&&(Xe?$o=Ss:co==="redirect"&&($o=Un));let $s=vt(()=>({...y,presentationMode:co}),[y,co]),Wo=!St&&Us&&!!$o&&(!br||js),po=!St&&qs&&!!Un,Ho=!St&&ve&&Ca&&ka.length>0&&!!Un,Vc=jo&&!js?Wc:Wo&&Bi(Bs),Kc=po&&Bi(Ds),Gc=Ho&&Ns!=="load_error",Ws=r=>r==="loading"||r==="ready",Hs=jo||Wo&&Ws(Bs)||po&&Ws(Ds)||Ho&&Ns!=="load_error",Ea=K(!1);pt(()=>{if(!Ea.current){if(!ve&&!P){Ea.current=!0;let r=new Br("FloPay: both `showStripe` and `showPayPal` are false \u2014 nothing to render.","validation_error");c?.(r),me(r.message)}else if(!ve&&P&&!br){Ea.current=!0;let r=new Br("FloPay: `showStripe` is false and no PayPal gateway is configured for this session \u2014 nothing to render.","validation_error");c?.(r),me(r.message)}else if(Ia!==void 0&&!St&&!Wt&&!Hs){Ea.current=!0;let r=new Br("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"});c?.(r),me(r.message)}}},[ve,P,br,Ia,St,Wt,Hs,c,me]);let Vs=K(!1);pt(()=>{if(Vs.current||!Ca)return;let r=[];Ne!==!0&&r.push("showApplePay"),yt!==!0&&r.push("showGooglePay"),r.length!==0&&(Vs.current=!0,console.warn(`[FloPay] ${r.join(" / ")} ${r.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.`))},[Ca,Ne,yt]);let Ks=Ge((r,g)=>we.applyInlineSessionPatch?we.applyInlineSessionPatch(r).then(q=>({error:null,sessionId:q.sessionId||e,nonce:q.session?.clientSecret||t})).catch(q=>{let ge=oc(g,q);return me(ge.message),c?.(ge),{error:ge,sessionId:e,nonce:t}}):Promise.resolve({error:null,sessionId:e,nonce:t}),[we.applyInlineSessionPatch,t,c,e,me]),ir=Ge(async r=>{if(r!=="card"&&St&&await we.waitForDataAttachment?.(),!je)return{proceed:!0};try{let g=await je({method:r,sessionId:e||void 0,createSession:we.inlineSessionDraft});if(g===!1)return{proceed:!1};if(g&&typeof g=="object"){g.account&&Rn(ge=>({...ge??{},...g.account}));let q=await Ks(g,r);return q.error?{proceed:!1,accountPatch:g.account}:{proceed:!0,accountPatch:g.account,sessionId:q.sessionId,nonce:q.nonce}}return{proceed:!0}}catch(g){let q=oc(r,g);return me(q.message),c?.(q),{proceed:!1}}},[Ks,we.inlineSessionDraft,we.waitForDataAttachment,St,je,c,e,me]),Gs=Ge(async(r,g)=>{if(B.current)return;B.current=!0,wn(!0),x("processing"),me(null);let q=g?.sessionId??e,ge=g?.nonce??t,D=Oi(Qe,g?.accountPatch),Q=g?.completionPaymentMethodId??ra(r),Tt=r.originalPaymentMethodId?{...r,originalPaymentMethodId:void 0}:r,Gn=hp(r),Ve=g?.presentationMode?Xa(mn(se),{...y,presentationMode:g.presentationMode}):void 0,it=()=>{ht?.({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:"process_payment",provider:Gn}),Ve?.error({errorCode:"PAYMENT_PROCESSING_FAILED",stage:"processing",...cr,requestCategory:"process_payment"})};try{let gt=new Bo(ft),Ft=await gt.processPayment(D.userId??"",{sessionId:q,nonce:ge,paymentMethodCategory:g?.paymentMethodCategory??vp(r),tokenizedData:Tt,accountData:{...g?.accountPatch,userId:D.userId??"",email:D.email??"",firstName:D.firstName||void 0,lastName:D.lastName||void 0,...Su({avsConfig:ue,country:bn.current,zip:gn.current,city:$t.current,state:Rt.current,addressLine1:ln.current,addressLine2:on.current})},...Cu({chv:z,avsCheck:We,checkoutType:ze,checkoutLayout:De,avsConfig:ue,country:bn.current})}),Jr=async pn=>{let Zr=Yi(E)||pn?.status==="authorized";_o(q),Ve?.terminal({outcome:"payment_succeeded",...cr}),x("success"),Ce(null),await new Promise(Zo=>setTimeout(Zo,600));let Cr;typeof pn?.paymentId=="string"?Cr=pn.paymentId:E?.paymentId&&(Cr=E.paymentId);let Xr;typeof pn?.authorizationExpiresAt=="string"?Xr=pn.authorizationExpiresAt:E?.authorizationExpiresAt&&(Xr=E.authorizationExpiresAt),s?.(Zr?{status:"authorized",...Cr===void 0?{}:{paymentId:Cr},sessionId:typeof pn?.sessionId=="string"?pn.sessionId:q,...Xr===void 0?{}:{authorizationExpiresAt:Xr},paymentIntentId:r.threeDSecureActionResultTokenId,paymentMethodId:Q,checkoutMethod:r.isPaypal?"paypal":"card"}:{status:"succeeded",paymentIntentId:r.threeDSecureActionResultTokenId,paymentMethodId:Q,checkoutMethod:r.isPaypal?"paypal":"card"})};if(Ft.ok){await Jr(Ft.status===204?null:await Ft.json().catch(()=>null));return}let qn=await Ft.json().catch(()=>null);if(qn?.type==="paypal_redirect_required"){let pn=qn.threeDSecureToken,Zr=qn.paymentMethodId||r.id||"";if(!se||!pn){x("error"),me("PayPal authorization required but no token provided.");return}try{let Cr=Xe?.getRawProvider();if(!Cr){me("PayPal is not available.");return}let Xr={return_url:window.location.href};Zr&&(Xr.payment_method=Zr);let{error:Zo}=await Cr.confirmPayment({clientSecret:pn,confirmParams:Xr,redirect:"if_required"});if(Zo){x("error");let il=Zo.message??"PayPal payment failed.";me(il),vr("paypal",il,{code:Zo.code})}}catch(Cr){x("error"),me(Cr instanceof Error?Cr.message:"PayPal authorization failed.")}return}if(qn?.type==="paypal_direct_required"){let pn=qn.orderId;if(!pn){x("error"),me("PayPal retry required but no order id provided.");return}let Zr=Kt.current?.attempts??0;if(Zr>=2){x("error"),me("PayPal payment could not be completed after multiple attempts."),vr("paypal","paypal_direct_required retry limit exceeded");return}hi(!1),Pi("loading"),Ce({orderId:pn,attempts:Zr+1}),x(null);return}if(Ft.headers.get(op)===ap){let pn=await ip(gt,q,ge);if(pn!==void 0){await Jr(pn);return}}Iu(Ft.status,qn)?Ve?.terminal({outcome:"payment_declined",...cr,terminalReason:"provider_declined"}):it(),x("error");let al=qn?.message??"Payment failed. Please try again.";me(al),vr(r.isPaypal?"paypal":"card",al,{code:qn?.code??qn?.gatewayErrorCode,declineCode:qn?.declineCode??qn?.gatewayDeclineReason}),await new Promise(pn=>setTimeout(pn,400))}catch(gt){kc(gt)||it(),x("error"),me(gt instanceof Error?gt.message:"An unexpected error occurred"),await new Promise(Ft=>setTimeout(Ft,400))}finally{wn(!1),x(null),B.current=!1}},[ft,e,t,Qe,ue,We,ze,De,z,se,Xe,E,s,me,vr,ht,y]),Fn=Ge((r,g)=>{C?C(r):Gs(r,g)},[C,Gs]),Vo=`${Sc}:${e}`;pt(()=>{if(typeof window>"u")return;let r=localStorage.getItem(Vo);if(!r)return;let g;try{g=JSON.parse(r)}catch{en(Vo);return}if(!g||typeof g.createdAt!="number"||Date.now()-g.createdAt<0||Date.now()-g.createdAt>wc||typeof g.paymentMethodId!="string"||typeof g.providerIntentId!="string"||typeof g.paymentMethodType!="string"||g.sessionId!==e||!t||g.nonce!==t||!uo.includes(g.paymentMethodType)){en(Vo);return}en(Vo),Fn({id:g.paymentMethodId,type:"card",threeDSecureActionResultTokenId:g.providerIntentId,gateway:"stripe",paymentMethodType:g.paymentMethodType},{...g.accountPatch?{accountPatch:g.accountPatch}:{},paymentMethodCategory:"wallet",sessionId:e,nonce:t})},[Fn,t,e,Vo,uo]);let Ys=K(!1);pt(()=>{if(typeof window>"u"||Ys.current)return;let[r,g,q]=hc();if(!r||!g||Sa.current||!se)return;let ge=se.getRawProvider();if(!ge)return;let D=it=>{let gt=localStorage.getItem(it);if(!gt)return null;try{return JSON.parse(gt)}catch{return en(it),null}},Q=D(Ir)??D(ic),Tt;if(Q?.clientSecret){if(Q.clientSecret!==g)return;Tt={...Q.accountPatch?{accountPatch:Q.accountPatch}:{},...Q.sessionId?{sessionId:Q.sessionId}:{},...Q.nonce?{nonce:Q.nonce}:{}}}else if(Q?.sessionId&&Q.sessionId!==e)return;Ys.current=!0,en(Ir),en(ic),window.history.replaceState({},"",vc());let Gn=Q?.paymentMethodType??Q?.tokenType??"card",Ve="card";(async()=>{if(q==="failed"){let Tr="Payment was declined. Please try again.";me(Tr),vr(Ve,Tr);return}let{paymentIntent:it,error:gt}=await ge.retrievePaymentIntent(g);if(gt){let Tr=gt.message??"Failed to retrieve payment status.";me(Tr),vr(Ve,Tr,{code:gt.code});return}let Ft=it?.status,Jr=na(Ft);if(!it||!Jr){let Tr=Ft==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";me(Tr),vr(Ve,Tr,{code:Ft??"missing_payment_intent"});return}let qn=typeof it.payment_method=="string"?it.payment_method:it.payment_method?.id;Fn({id:qn??Q?.paymentMethodId??Q?.tokenId??it.id,type:"card",threeDSecureActionResultTokenId:it.id,gateway:Q?.gateway??"stripe",paymentMethodType:Gn},Tt)})()},[e,Fn,se,me,vr]);let bi=Ge(r=>{r.preventDefault()},[]);if(!(p||se!==null))return d("div",{"data-testid":"flopay-loading","aria-busy":"true",children:"Loading payment form..."});let Ko=Be==="buttons",Dn=U?.variables,Yc=new Set(["#FFFFFF","#ffffff","#fff","#FFF","white"]),Ci=Dn?.colorBackground,Jc=Ci&&!Yc.has(Ci)?Ci:void 0,Go=S.cardInputBorder??(Ko?"#e5e7eb":"#A4A4FF"),Js=Dn?.colorDanger??"#dc2626",Gt=r=>er[r]&&(hr[r]||Ht),_a=ao&&(gr||Ht),Kn=r=>r?Js:Go,Ta=(Nn.malformed||Nn.empty)&&(fr||Ht),Zc=Kn(Ta),Si=S.cardFormContainer?.backgroundColor??Jc??(Ko?"white":"#EDEDFF"),yo=S.cardInputBackground??Dn?.colorBackground??"white",wi=ho(Te),Zs=ho(qe),mo=S.nameInput,Xs=S.cardInputFontSize??wp(mo?.fontSize)??Dn?.fontSizeBase??"16px",Qs=typeof mo?.fontFamily=="string"?mo.fontFamily:Dn?.fontFamily??"Poppins, sans-serif",el=Yu(mo?.fontWeight)??400,Xc=S.cardInputColor??(typeof mo?.color=="string"?mo.color:void 0)??Dn?.colorText??"#262833",Qc=S.cardInputPlaceholderColor??"#9ca3af",Qt=Dn?.borderRadius??"8px",Gr=Dn?.borderRadius??S.cardButton?.borderRadius??Qt,Yr=Dn?.colorPrimary??"#4A49FF",ed=Dn?.colorPrimaryHover??_u(Yr,.12),ki=Dn?.colorText??"#262833",Ii={fontSize:Xs,fontFamily:Qs,fontWeight:el,color:Xc,WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},Yo={marginTop:"0.375rem",...Ii,fontSize:"0.75rem",lineHeight:1.4,color:Js},td={"--flopay-input-placeholder-color":Qc,"--flopay-input-font-size":Xs,"--flopay-input-font-family":Qs,"--flopay-input-font-weight":String(el)},Jo=S.cardFormContainer??{},Ri=Jo.padding??(Ko?"0":"1rem"),Ei=Jo.borderRadius??Qt,nd=_t&&rr?d(_i,{capture:_t,html:rr.html,messageToken:rr.messageToken,expectedOrigin:rr.expectedOrigin,verificationRequired:rr.verificationRequired,theme:He,submitLabel:O,onReady:()=>{if(!Lr&&!ue||typeof document>"u")return;let r=()=>{let q=(document.querySelector('[data-testid="flopay-vault-identity-fields"]')??document.querySelector('[data-testid="flopay-avs-fields"]'))?.querySelector("input:not([disabled]), select:not([disabled])");if(q){Ln.current=!0;try{q.focus()}finally{Ln.current=!1}}};nr.current||r()},onError:r=>{r&&rr.verificationRequired&&l.current==="idle"&&(Nr.current=!0),me(r)},onValidation:r=>{let g=l.current;(g==="idle"||g==="validation-window")&&(me(r),r&&l.current==="validation-window"&&(R.current&&(clearTimeout(R.current),R.current=null),l.current="idle",x(null)))}},an):d("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"}),tl=Ke("div",{onFocusCapture:r=>{["INPUT","SELECT","TEXTAREA","IFRAME"].includes(r.target.tagName)&&_r()},style:{backgroundColor:Si,borderRadius:Ei,...Jo,padding:Ri,...td,display:"flex",flexDirection:"column"},children:[d("style",{children:`
|
|
3
|
+
${Xt.join(`
|
|
4
|
+
`)}`]}):null;return vt&&!ie?X?ro("div",{children:re}):null:ji("div",{children:[re,et&&ro(Ro,{identity:et.identity,methodLabel:et.methodLabel,testId:"flopay-direct-paypal-identity-pane",onComplete:Pe,onCancel:()=>Pe(null)}),ji("div",{"aria-hidden":ze||et?!0:void 0,style:ze||et?{position:"relative",height:0,opacity:0,pointerEvents:"none"}:{position:"relative",minHeight:$a},children:[!De&&!ze&&ro("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"}}),ro("div",{ref:ye,"data-testid":"flopay-direct-paypal-container",tabIndex:-1,role:"group","aria-label":"PayPal payment method",style:{minHeight:$a,display:"flex",opacity:De?1:0},"aria-busy":P||w},_e)]},_e),Ue&&ro("button",{ref:Ne,type:"button","data-testid":"flopay-direct-paypal-focus-target",onClick:ln,style:ru,children:"Try PayPal again"})]})}function Wa(e){return ro($l,{...e})}function Wl(e){return ro($l,{...e})}import{jsx as Hl,jsxs as su}from"react/jsx-runtime";function _o({children:e,margin:t,icon:n=!0,styleOverride:o}){return su("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"}:{},...o??{}},children:[n&&Hl("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",style:{flexShrink:0},children:Hl("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]})}import{clearCachedInlineCheckout as Ha,clearCachedInlineSession as $i,hashCreateParams as Vl,legacyCachedSessionMatchesDraft as Kl,persistCachedInlineIdempotencyKey as Va,persistCachedInlineSession as Ka,readCachedInlineIdempotencyKey as Gl,readCachedInlineSession as Yl,serializeCreateParams as da}from"@flopay/shared";import{resolveBillingApiUrl as lu}from"@flopay/shared";import{useEffect as Vr,useMemo as cu,useRef as Jl,useState as Zl}from"react";import{jsx as du}from"react/jsx-runtime";function Ga({flopay:e,paypalFlopay:t,options:n,onInstrument:o,children:a}){let[i,s]=Zl(e instanceof Promise?null:e),[c,y]=Zl(t instanceof Promise||!t?null:t),v=Jl(null),B=Jl(null),R=Eo(o);Vr(()=>{R({class:"lifecycle",name:"checkout.mount"})},[R]),Vr(()=>{i&&R({class:"lifecycle",name:"sdk.initialize.ready"})},[R,i]),Vr(()=>{if(i)return un(i)?.subscribe?.(R)},[R,i]),Vr(()=>{if(!(!c||c===i))return un(c)?.subscribe?.(R)},[R,i,c]),Vr(()=>{if(!i)return;let L=un(i);return v.current=L?.beginCheckout()??L?.now()??0,L?.log({name:"checkout.mount",stage:"checkout_mount"}),()=>{L?.log({name:"checkout.unmount",stage:"unmount"})}},[i]),Vr(()=>{let L=!1;return e instanceof Promise?e.then(Ae=>{L||s(Ae)},()=>{L||R({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED"})}):s(e),()=>{L=!0}},[R,e]),Vr(()=>{let L=!1;if(!t){y(null);return}return t instanceof Promise?t.then(Ae=>{L||y(Ae)},()=>{L||R({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED",provider:"paypal"})}):y(t),()=>{L=!0}},[R,t]),Vr(()=>{if(!i||B.current===i)return;B.current=i;let L=un(i);L?.log({name:"checkout.rendered",stage:"checkout_render"}),R({class:"lifecycle",name:"checkout.rendered"}),L?.performance({stage:"checkout_render",durationMs:L.elapsed(v.current??0),durationMode:"machine"})},[R,i]);let N=lu(n?.billingApiUrl),le=cu(()=>({flopay:i,paypalFlopay:c,billingApiUrl:N,emitInstrument:R}),[i,c,N,R]);return du(er.Provider,{value:le,children:a})}import{markSessionRecentlyCompleted as To,wasSessionRecentlyCompleted as Wi}from"@flopay/shared";async function Ya(e,t){e.current?.abort();let n=new AbortController;e.current=n;try{return await t(n.signal)}finally{e.current===n&&(e.current=null)}}import{completeSavedCardNextAction as uu,loadFloPay as Xl,PaymentAPI as Za,runSavedCardChallenge as pu}from"@flopay/js";import{classifyPaymentRejection as yu,FloPayError as Tt,isAuthorizationOnlySession as mu,isMountableVaultBlock as fu,isSetupIntentClientSecret as gu,normalizeCheckoutFailureOutcome as Ql}from"@flopay/shared";var pa="card";async function hu(e,t,n){if(n){if(typeof e.retrieveSetupIntent!="function")return null;let{setupIntent:i,error:s}=await e.retrieveSetupIntent(t);return{error:s,intent:i??null}}if(typeof e.retrievePaymentIntent!="function")return null;let{paymentIntent:o,error:a}=await e.retrievePaymentIntent(t);return{error:a,intent:o??null}}async function Pu(e,t,n,o){if(o){if(typeof e.confirmCardSetup!="function")return null;let{setupIntent:s,error:c}=await e.confirmCardSetup(t,n);return{error:c,intent:s??null}}if(typeof e.confirmCardPayment!="function")return null;let{paymentIntent:a,error:i}=await e.confirmCardPayment(t,n);return{error:i,intent:a??null}}function Mo(e){return new Tt("Card authentication was cancelled.","api_error",{code:"three_ds_aborted",cause:e})}function vu(){return new Tt("Card authentication timed out.","api_error",{code:"three_ds_timeout"})}function Vi(e,t){return Object.assign(e,{checkoutMethod:t})}function Fr(e,t){let n=e instanceof Tt?e:new Tt(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 ua(e,t){try{return await e()}catch(n){throw Fr(n,t)}}function tc(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 nc(e){return pu(e)}async function Ao(e,t){let{billingApiUrl:n,sessionId:o,signal:a}=t,i=t.nonce??t.session.clientSecret,s=new Za(n,{telemetry:!1}),c=`${n.replace(/\/+$/,"")}/v1/checkouts/sessions/${encodeURIComponent(o)}/status`,y;try{y=await uu({billingApiUrl:n,sessionId:o,nonce:i,nextActionRedirectUrl:e.nextActionRedirectUrl,signal:a,createDeclineError:B=>kr({type:B.declineReason??"authorization_declined",gatewayErrorCode:B.gatewayDeclineReason??void 0},"Card was declined.",{checkoutMethod:"card"})},s)}catch(B){if(a.aborted||B instanceof Error&&B.name==="AbortError")throw B instanceof Tt&&B.code==="three_ds_aborted"?B:Mo(B);if(!(B instanceof Tt)||B.code!=="three_ds_timeout"&&B.code!=="checkout_processing_timeout")throw B;try{y=await s.waitForCheckoutSessionCompletion(o,{initialDelayMs:0,nonce:i,statusUrl:c,timeoutMs:5e3,signal:a})}catch(N){if(a.aborted)throw Mo(N);if(!(N instanceof Tt)||N.code!=="checkout_processing_timeout")throw N}let R=y&&jr(y,t.session);if(!Br(R)&&R?.status!=="expired"){if(t.telemetry){let N=new Za(n);try{N.reportThreeDsAbandoned(o)}finally{N.destroy()}}throw vu()}}let v=y&&jr(y,t.session);if(!Br(v))throw wo(v);return{...xr(v,o),checkoutMethod:"card"}}function kr(e,t="Payment failed. Please try again.",n){let o=n?.checkoutMethod??e?.checkoutMethod??(e?.type==="paypal_redirect_required"?"paypal":"card"),a=e?.message??t,i=ko(a)??a,s=Vi(new Tt(i,"api_error",{code:e?.code??Ql(e?.outcome)??Ql(e?.type)??e?.gatewayErrorCode}),o);return e?.orderId&&(s.orderId=e.orderId),s}function Hi(e){return typeof window<"u"&&window.location.href?window.location.href:e.successUrl||e.cancelUrl||void 0}function Ja(e){return typeof e=="string"&&e.startsWith("pi_")&&e.includes("_secret_")}function rc(e,t){let n=[e?.threeDSecureToken,e?.clientSecret,e?.stripeClientSecret];for(let a of n)if(typeof a=="string"&&a.length>0&&(!t?.requirePaymentIntentClientSecret||Ja(a)))return a;let o=e?.data;if(o&&typeof o=="object"){let a=o,i=[a.threeDSecureToken,a.clientSecret,a.stripeClientSecret,a.id];for(let c of i)if(typeof c=="string"&&c.length>0&&(!t?.requirePaymentIntentClientSecret||Ja(c)))return c;let s=a.gateways;if(s&&typeof s=="object"){let c=s.stripe;if(c&&typeof c=="object"){let y=c,v=[y.stripeClientSecret,y.clientSecret];for(let B of v)if(typeof B=="string"&&B.length>0&&(!t?.requirePaymentIntentClientSecret||Ja(B)))return B}}}}async function bu({billingApiUrl:e,sessionId:t,nonce:n,responseJson:o}){let a=rc(o,{requirePaymentIntentClientSecret:!0});if(typeof a=="string"&&a.length>0)return{type:"3ds_required",threeDSecureToken:a};if(!t)return null;try{let c=(await new Za(e,{telemetry:!1}).getUnifiedCheckoutSession(t,n)).data.stripe?.clientSecret;if(Ja(c))return{type:"3ds_required",threeDSecureToken:c}}catch{}return null}async function xo({billingApiUrl:e,sessionId:t,session:n,nonce:o,tokenizedData:a,returnUrl:i,telemetry:s}){let c=e.replace(/\/+$/,""),y=t??n.id,v=o??n.clientSecret,B=n.customer?.id??n.accountData?.userId??"",R=n.customer?.email??n.accountData?.email??"",N=n.customer?.firstName??n.accountData?.firstName??"",le=n.customer?.lastName??n.accountData?.lastName??"",L=n.customer?.country??n.accountData?.country??void 0,Ae=n.customer?.zip??n.accountData?.zip??void 0,g=await new Za(c,s===!1?{telemetry:!1}:void 0).processPayment(B,{sessionId:y,nonce:v,paymentMethodCategory:"saved",tokenizedData:a,accountData:{userId:B,email:R,firstName:N,lastName:le,country:L,zip:Ae},returnUrl:i??Hi(n)});if(g.ok){let I=typeof g.json=="function"?await g.json().catch(()=>null):null;if(mu(n)||I?.status==="authorized")return{type:"success",result:{status:"authorized",paymentId:typeof I?.paymentId=="string"?I.paymentId:n.paymentId,sessionId:typeof I?.sessionId=="string"?I.sessionId:y,authorizationExpiresAt:typeof I?.authorizationExpiresAt=="string"?I.authorizationExpiresAt:n.authorizationExpiresAt,paymentMethodId:oa(a),checkoutMethod:ec(a,n)}};let Ke=a?.threeDSecureActionResultTokenId;return{type:"success",result:{status:"succeeded",...Ke?{paymentIntentId:Ke}:{},paymentMethodId:oa(a),checkoutMethod:ec(a,n)}}}let w;try{w=await g.json()}catch(I){throw new Tt("Payment failed. Please try again.","api_error",{code:"InvalidPaymentProcessResponse",statusCode:g.status,cause:I})}if(w?.type==="3ds_required"&&typeof w.nextActionRedirectUrl=="string")return{type:"next_action_required",nextActionRedirectUrl:w.nextActionRedirectUrl};if(w?.type==="paypal_redirect_required"||w?.type==="3ds_required"){let I=rc(w);if(!I)throw new Tt("Authentication is required but no redirect token was provided.","api_error",{code:"InvalidPaymentProcessResponse",statusCode:g.status});return{type:w.type,threeDSecureToken:I,paymentMethodId:w.paymentMethodId}}if(w?.gatewayErrorCode==="authentication_required"){let I=await bu({billingApiUrl:c,sessionId:y,nonce:v,responseJson:w});if(I)return I;throw Vi(new Tt("Your card requires authentication. Please enter your payment details below.","api_error",{code:"authentication_required"}),"card")}let je=new Tt(w?.message??"Payment failed. Please try again.","api_error",{code:w?.code??w?.gatewayErrorCode,declineCode:w?.declineCode??w?.gatewayDeclineReason,statusCode:g.status});throw Object.assign(je,{telemetryOutcome:yu(g.status,w)})}async function Xa(e,{flopay:t,paypalFlopay:n,attempt3DS:o,billingApiUrl:a,sessionId:i,session:s,returnUrl:c,telemetry:y,signal:v}){let B=t?.getRawProvider();if(!B)throw Fr(new Tt("Payment provider is not available.","api_error"),"card");if(e.type==="3ds_required"){if(!o||!e.threeDSecureToken)throw Vi(new Tt("Your card requires authentication. Please enter your payment details below.","api_error",{code:"authentication_required"}),"card");let R=gu(e.threeDSecureToken),N=null,le=e.paymentMethodId,L=await ua(()=>hu(B,e.threeDSecureToken,R),"card");if(L){if(L.error)throw Fr(new Tt(L.error.message??`Failed to retrieve 3DS ${R?"setup":"payment"} status.`,"api_error",{code:L.error.code}),"card");let K=L.intent;!le&&K?.payment_method&&(typeof K.payment_method=="string"?le=K.payment_method:"id"in K.payment_method&&(le=K.payment_method.id??void 0))}let Ae=le?await ua(()=>Pu(B,e.threeDSecureToken,{payment_method:le,return_url:c??Hi(s)??window.location.href},R),"card"):null;if(Ae){if(Ae.error)throw Fr(new Tt(Ae.error.message??"3DS authentication failed.","api_error",{code:Ae.error.code}),"card");N=Ae.intent}else{let K=await ua(()=>B.handleNextAction({clientSecret:e.threeDSecureToken}),"card");if(K.error)throw Fr(new Tt(K.error.message??"3DS authentication failed.","api_error",{code:K.error.code}),"card");N=(R?K.setupIntent:K.paymentIntent)??null}if(N&&(N.status==="requires_capture"||N.status==="succeeded"||N.status==="processing")){let K=await xo({billingApiUrl:a,sessionId:i,session:s,telemetry:y,tokenizedData:{id:N.id,type:"card",threeDSecureActionResultTokenId:N.id},returnUrl:c});return K.type==="success"?{...K.result,paymentIntentId:K.result.paymentIntentId??N.id,paymentMethodId:K.result.paymentMethodId??le}:K.type==="next_action_required"?Ao(K,{billingApiUrl:a,sessionId:i??s.id,session:s,signal:v}):Xa(K,{flopay:t,paypalFlopay:n,attempt3DS:o,billingApiUrl:a,sessionId:i,session:s,returnUrl:c,telemetry:y,signal:v})}throw Fr(new Tt("3DS authentication did not complete successfully.","api_error"),"card")}if(e.type==="paypal_redirect_required"){let R=(n??t)?.getRawProvider();if(!R)throw Fr(new Tt("PayPal is not available.","api_error"),"paypal");if(e.paymentMethodId){let{error:le}=await ua(()=>R.handleNextAction({clientSecret:e.threeDSecureToken}),"paypal");if(le)throw Fr(new Tt(le.message??"PayPal authorization failed.","api_error",{code:le.code}),"paypal");return{status:"succeeded",checkoutMethod:"paypal"}}let{error:N}=await ua(()=>R.confirmPayment({clientSecret:e.threeDSecureToken,confirmParams:{return_url:c??Hi(s)??window.location.href,payment_method_data:{type:"paypal"}},redirect:"if_required"}),"paypal");if(N)throw Fr(new Tt(N.message??"PayPal authorization failed.","api_error",{code:N.code}),"paypal");return{status:"succeeded",checkoutMethod:"paypal"}}throw new Tt("Unsupported payment redirect state.","api_error")}function ya(e){if(e instanceof Tt){let o=ko(e.message);return o&&o!==e.message?Object.assign(new Tt(o,e.type,{code:e.code,declineCode:e.declineCode,param:e.param,statusCode:e.statusCode,sessionId:e.sessionId}),{checkoutMethod:e.checkoutMethod,orderId:e.orderId,telemetryFailureCategory:e.telemetryFailureCategory,telemetryOutcome:e.telemetryOutcome,telemetryRequestCategory:e.telemetryRequestCategory}):e}let t=e instanceof Error?e.message:"Payment failed. Please try again.",n=ko(t)??t;return new Tt(n,"api_error")}function Ki(e){let t=e.data.stripe?.publishableKey,n=!!e.data.paypal?.publishableKey,o=fu(e.data.session?.vault)||to(e.data.session);if(!t&&!n&&!o)throw new Tt("Session advertises no supported gateways or hosted vault (expected `gateways.stripe`, `gateways.paypal`, or vault markup).","validation_error");return t?{publishableKey:t,paypalPublishableKey:e.data.stripe?.paypalPublishableKey??t}:{}}function ec(e,t){return e?e.isPaypal?"paypal":"card":t&&to(t)?"card":void 0}async function Gi({publishableKey:e,paypalPublishableKey:t,billingApiUrl:n,locale:o,telemetry:a}){if(!e)return{flopay:null,paypalFlopay:null};let i=t&&t!==e?t:void 0,[s,c]=await Promise.all([Xl(e,{billingApiUrl:n,locale:o,telemetry:a}),i?Xl(i,{billingApiUrl:n,locale:o,telemetry:a}).catch(v=>(console.warn("[FloPay] Failed to load PayPal Stripe instance:",v),null)):Promise.resolve(null)]);if(!s)throw new Tt("The payment provider did not initialize.","authentication_error");let y=null;return i?y=c:t&&(y=s),{flopay:s,paypalFlopay:y}}import{PaymentAPI as Fo,PciVaultCardCapture as Cu,toStripeAppearance as Su}from"@flopay/js";import{buildCheckoutProcessMetadata as wu,buildProcessPaymentAvsAccount as ku,buildWalletSheetWindowMessage as Iu,COUNTRY_OPTIONS as Ru,classifyPaymentRejection as Eu,clearStripePayPalReturn as _u,computeVaultCardThemeColors as Tu,darkenHex as Mu,denyPaymentPermissionToNewFrames as Au,FloPayError as Dr,filterStripeMethodsByCountryGate as xu,getPostalCodeExample as Bu,getPostalCodeLabel as ns,getStateFromPostalCode as Fu,getStateLabel as Yi,getStateOptions as Du,getStripeMethodDisplayName as ga,hasMatchingStripePayPalReturn as Ou,isAuthorizationOnlySession as Ji,isAVSFieldVisible as Wt,isMountableVaultBlock as Nu,isPostalCodeSupported as Lu,isSetupIntentClientSecret as Zi,isValidEmail as vn,isValidPostalCode as zu,isWalletSheetRefusedForWindowSize as Uu,needsStripeMethodExplicitConfirm as oc,normalizeBeforeButtonClickError as ac,normalizeCheckoutFailureOutcome as qu,partitionStripeMethods as ju,randomUuidV4 as $u,readMatchingStripePayPalContinuation as Wu,readStripeRedirectParams as Pc,resolveAVSConfig as Hu,resolveButtonsLayoutTheme as Vu,resolveSetupFutureUsage as vc,resolveTheme as Ku,resolveVaultMountOptions as Xi,STRIPE_PAYPAL_RESUME_KEY as Gu,derivePrimaryTileStyle as Yu,shouldPreferWalletPopup as ic,stripeExpressMethodToOptionKey as Ju,stripeRedirectReturnUrl as bc,toCssWeight as Zu,WALLET_SHEET_WINDOW_TOO_SMALL_CODE as Cc}from"@flopay/shared";import{ExpressCheckoutElement as Sc,PaymentElement as Xu,Elements as oo,useElements as is,useStripe as ss}from"@stripe/react-stripe-js";import Qu,{useCallback as Ve,useContext as Oo,useEffect as yt,useLayoutEffect as ep,useMemo as St,useRef as V,useState as se}from"react";function Bo(e,t){return{...t,inAppBrowser:e.browser.inAppBrowser,appFamily:e.browser.appFamily,popupCapability:e.capability.current(),presentationMode:e.presentationMode}}function Qa(e,t){if(e)return{error:n=>e.error(Bo(t,n)),log:n=>e.log(Bo(t,n)),performance:n=>e.performance(Bo(t,n)),terminal:n=>e.terminal(Bo(t,n)),now:()=>e.now(),elapsed:n=>e.elapsed(n),setCheckoutContext:n=>e.setCheckoutContext(n),beginCheckout:n=>e.beginCheckout(n),disable:()=>e.disable(),subscribe:n=>e.subscribe(n),flush:()=>e.flush(),destroy:()=>e.destroy()}}import{darkenHex as _c}from"@flopay/shared";import{Fragment as Do,jsx as d,jsxs as He}from"react/jsx-runtime";var Ir="flopay_stripe_resume",sc="flopay_wallet_resume",wc="fw1",tp="fw2",kc=300*1e3,np=900,rp=25e3,op=25e3,ap=1e4,ur={provider:"paypal",paymentMethodCategory:"paypal"},ip="x-flopay-process-result-source",sp="status";async function lp(e,t,n){try{let o=(await e.getUnifiedCheckoutSession(t,n)).data.session;if(o?.status==="complete")return null;if(o?.status==="authorized")return{status:"authorized",paymentId:o.paymentId,sessionId:o.id||t,authorizationExpiresAt:o.authorizationExpiresAt}}catch{}}var ei={},fa=class{constructor(t){this.reason=t}};function cp(e){return e==null?"confirmation_result_missing":"confirmation_result_not_object"}function Zt(e,t){if(typeof window>"u")return!1;try{return t===void 0?window.localStorage.removeItem(e):window.localStorage.setItem(e,JSON.stringify(t)),!0}catch{return!1}}function ls(e){return`${tp}:${e}`}function ti(e){return Zt(ls(e))}function ni(e,t){if(typeof window>"u")return null;let n=ls(e);try{let o=localStorage.getItem(n);if(!o)return null;let a=JSON.parse(o);return typeof a.createdAt!="number"||Date.now()-a.createdAt<0||Date.now()-a.createdAt>kc||a.sessionId!==e||a.nonce!==t||typeof a.clientSecret!="string"||typeof a.providerObjectId!="string"||typeof a.paymentMethodType!="string"?(ti(e),null):a}catch{return ti(e),null}}function dp(e){return Zt(ls(e.sessionId),e)}function lc(e,t,n){let o=ni(e,t);return!o||o.clientSecret!==n?!1:ti(e)}function Qi(e,t,n){if(typeof window>"u")return;ni(e,t)?.clientSecret===n&&ti(e)}function up(e){return typeof e.payment_method=="string"?e.payment_method:typeof e.payment_method?.id=="string"?e.payment_method.id:null}function es(e,t,n){if(!e||typeof e.id!="string"||t&&e.id!==t)return{kind:"ambiguous"};if(e.status==="canceled"||e.status==="requires_payment_method")return{kind:"terminal"};let o=n?e.status==="succeeded":ra(e.status),a=up(e);return!o||!a?{kind:"ambiguous"}:{kind:"confirmed",intentId:e.id,paymentMethodId:a}}async function cc(e,t,n){let o=null;try{return await Promise.race([Tl(e,t),new Promise(a=>{o=window.setTimeout(()=>{o!==null&&n?.delete(o),a(null)},ap),n?.add(o)})])}finally{o!==null&&(window.clearTimeout(o),n?.delete(o))}}function pp(e){return e==="provider_sdk"?"PROVIDER_RUNTIME_FAILED":"REQUEST_TIMEOUT"}function Ic(e){return e instanceof Dr&&(e.type==="validation_error"||e.statusCode===400||e.statusCode===422)}async function ri(e,t,...n){let o=n[2].provider;t?.({class:"lifecycle",name:"payment.intent.started",provider:o});try{return await new Fo(e,{telemetry:!1}).createSessionIntent(...n)}catch(a){throw Ic(a)||t?.({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:"intent_create",provider:o}),a}}var ts=Gu,ma=new Map,yp=250,dc="Just a moment \u2014 we are finalizing your order. Please press pay again.",mp="We are still confirming your last payment with your bank. Please wait a moment before trying again.";function cs(e,t,n,o){e?.error({errorCode:"PROVIDER_LOAD_FAILED",failureCategory:"provider_runtime",stage:"provider_load",provider:t,paymentMethodCategory:n,requestCategory:"provider_sdk",...o?{terminalReason:o}:{}})}async function oi({billingApiUrl:e,sessionId:t,nonce:n,request:o}){if(!(!t||!n))try{await new Fo(e,{telemetry:!1}).reportSessionIntentDecline(t,n,o)}catch{}}function fp(e){return e instanceof Dr&&typeof e.statusCode=="number"&&e.statusCode>=400&&e.statusCode<500}function Rc({event:e,fallbackEmail:t,fallbackName:n}){let o=e.billingDetails,a=t?.trim(),i=aa(n),s=i.firstName?i:aa(o?.name);return dr({email:vn(a)?a:o?.email?.trim(),firstName:s.firstName,lastName:s.lastName})}async function gp({event:e,prepared:t,email:n,billingName:o,methodLabel:a,collect:i}){let s=Rc({event:e,fallbackEmail:t?.accountPatch?.email??n,fallbackName:[t?.accountPatch?.firstName,t?.accountPatch?.lastName].join(" ").trim()||o});return vn(s.email)?s:i(a,s)}var ha=180,uc=`flopay-card-enter ${ha}ms cubic-bezier(0, 0, 0.2, 1) both`,pc=`flopay-card-exit ${ha}ms cubic-bezier(0.4, 0, 0.2, 1) both`,hp=`flopay-buttons-enter ${ha}ms cubic-bezier(0, 0, 0.2, 1) both`,Pp=`flopay-buttons-exit ${ha}ms cubic-bezier(0.4, 0, 0.2, 1) both`;function vp(e){return e.gateway==="stripe"?"stripe":e.gateway==="paypal"||e.isPaypal?"paypal":void 0}function ds(e){return Yu(e)}var bp={visibility:"hidden",position:"absolute",pointerEvents:"none",width:"100%",height:0,overflow:"hidden"};function Cp(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 rs={width:"100%",minHeight:ta,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 yc(e){return e==="paypal"?"paypal":e==="apple_pay"?"apple_pay":"google_pay"}function os(e){return e==="paypal"?"PayPal":ga(e)}function Sp(e){let t=Bu(e);return`Enter a valid ${ns(e)}${t?` (e.g. ${t})`:""}`}function wp(e,t,n){let o=Lu(e),a=t.trim(),i=n&&o,s=i&&!a,c=i&&!!a&&!zu(e,a);return{visible:n,supported:o,required:i,empty:s,malformed:c}}function kp(e,t){let n=e.trim(),o=t&&!n,a=t&&!!n&&!vn(n);return{required:t,empty:o,malformed:a,value:n}}function Ip(e){return typeof e=="number"?`${e}px`:e}function us(e){return d(_p,{...e})}function mc({sessionId:e,nonce:t,email:n,billingApiUrl:o,onTokenizedBody:a,onErrorChange:i,isProcessing:s=!1,onButtonClick:c,onDecline:y,onTechnicalFailure:v,runBeforeButtonClick:B,billingName:R,onBuyerIdentityReady:N,onLoadStateChange:le,placeholderBorderRadius:L,popupCapabilityOwner:Ae,externalTelemetryContext:K,presentationMode:g}){let w=$r(),{emitInstrument:je}=Oo(er),I=ss(),Ke=is(),Z=St(()=>Qa(un(w),K),[K,w]),[Fe,Ze]=se("loading");yt(()=>{le?.(Fe)},[Fe,le]);let[Oe,Xe]=se(!1),Rt=V(!1),rt=!vn(n?.trim())||!R?.trim(),{request:X,collect:At,finish:ct}=Io(),Qe=V(!1),we=V(null),oe=V(null),[ye,Pt]=se(0),[xt,Ge]=se(!1),Q=V(!1),xe=V(new Map),{startAttempt:ae,finishAttempt:z,invalidateAttempt:Ne,isAttemptInvalidated:Le,isAttemptCurrent:De,generationRef:F}=la((ce,P,ot)=>{v?.(ce,P,{...ot,popupBlocked:ot?.popupBlocked??Ur(P),provider:"stripe",paymentMethodCategory:"paypal",presentationMode:g,terminalReason:"overlay_timeout"}),Ge(!0),Pt(et=>et+1)},{onHandoffObserved:()=>{Ae.markAvailable(),Z?.log({name:"provider.popup.opened",stage:"overlay_open",...ur,attempt:F.current})}});yt(()=>{xt&&oe.current?.focus()},[xt,ye]);let ze=Ve(()=>{Pt(ce=>ce+1)},[]),mt=Ve((ce,P,ot)=>{Ne(ot),v?.("paypal",ce,{code:P,popupBlocked:Ur(ce),provider:"stripe",paymentMethodCategory:"paypal",presentationMode:g}),Ge(!0),ze()},[Ne,v,g,ze]),_e=Ve(()=>{window.setTimeout(()=>{(we.current?.querySelector("iframe")??we.current)?.focus()},0)},[]);yt(()=>{Q.current&&(Q.current=!1,_e())},[_e,ye]);let ft=Ve(()=>{Ge(!1),i?.(null),_e()},[_e,i]);yt(()=>{if(!I||Qe.current)return;let[ce,P,ot]=Pc();if(!ce||!P)return;let et=Wu(P);if(!et)return;Qe.current=!0;let T=!0,Pe=ma.get(P);Pe||(Pe=ot==="failed"?Promise.resolve(null):Promise.resolve().then(()=>I.retrievePaymentIntent(P)),ma.set(P,Pe));let Ft={accountPatch:et.accountPatch,sessionId:et.sessionId,nonce:et.nonce},Se=()=>{Z?.error({errorCode:"REDIRECT_RESUME_FAILED",stage:"redirect_resume",...ur,requestCategory:"provider_sdk"})};return Z?.log({name:"provider.redirect.resumed",stage:"redirect_resume",...ur}),(async()=>{try{Xe(!0);let f=await Pe;if(!T)return;if(f?.error){ma.delete(P),Se(),i?.(f.error.message??"Failed to retrieve PayPal payment status.");return}if(_u(),ma.delete(P),ot==="failed"){let Re="PayPal payment was declined. Please try again.";Z?.terminal({outcome:"payment_declined",...ur,terminalReason:"provider_declined"}),i?.(Re),y?.(dn("paypal",Re));return}let b=f?.paymentIntent;if(b&&b.id!==ce){Se(),i?.("Failed to match the returned PayPal payment.");return}if(b&&(b.status==="requires_capture"||b.status==="succeeded")){let Re=typeof b.payment_method=="string"?b.payment_method:b.payment_method?.id;a({id:Re??b.id,type:"card",threeDSecureActionResultTokenId:b.id,isPaypal:!0},{...Ft,presentationMode:"redirect"})}else{let Re="PayPal payment was not completed. Please try again.";Z?.terminal({outcome:b?.status==="canceled"?"payment_cancelled":"payment_declined",...ur,terminalReason:b?.status==="canceled"?"cancelled":"provider_declined"}),i?.(Re),y?.(dn("paypal",Re))}}catch(f){if(!T)return;ma.delete(P),Se(),i?.(f instanceof Error?f.message:"Failed to complete PayPal payment.")}finally{T&&Xe(!1)}})(),()=>{T=!1,Qe.current=!1}},[I,a,i,y,Z]);let he=Ve(async(ce=!1)=>{let P=B?await B("paypal"):{proceed:!0};if(!P.proceed)return xe.current.delete(ye),!1;let ot=ae("paypal");return xe.current.set(ye,{generation:ot,accountPatch:P.accountPatch,sessionId:P.sessionId,nonce:P.nonce}),Ge(!1),Z?.log({name:`provider.${ce?"redirect.started":"handoff.requested"}`,stage:ce?"redirect":"overlay_open",...ur,attempt:ot}),c?.("paypal"),!0},[c,Z,B,ae,ye]),Ue=Ve(async ce=>{if(s||Oe||!await he()){ce.reject();return}ce.resolve()},[s,he,Oe]),$e=Ve(async ce=>{if(!I||!Ke)return;let P=xe.current.get(ye);if(P&&!De(P.generation)){xe.current.delete(ye);return}if(!P&&Le()||P&&!z(P.generation))return;P||z();let ot=P??null;if(xe.current.delete(ye),!ot&&B){let wt=await B("paypal");if(!wt.proceed){ce.paymentFailed({reason:"fail",message:"PayPal checkout was cancelled."});return}ot={accountPatch:wt.accountPatch,sessionId:wt.sessionId,nonce:wt.nonce}}let et=ot?.sessionId??e,T=ot?.nonce??t,Pe=await gp({event:ce,prepared:ot,email:n,billingName:R,methodLabel:"PayPal",collect:At});if(!Pe){ce.paymentFailed({reason:"fail",message:"Buyer details are required."});return}let Ft=Pe.email,Se={...ot?.accountPatch,...dr(Pe,!0)};try{if(Xe(!0),i?.(null),!et||!vn(Ft))throw new Error("Missing sessionId or email for PayPal payment");await N?.(Pe);let wt=I.createPaymentMethod,{error:f,paymentMethod:b}=await wt({type:"paypal"});if(f){mt(f,"stripe_paypal_create_payment_method_failed",P?.generation),ce.paymentFailed({reason:"fail"});return}let Re=await ri(o,je,et,T??"",{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:"paypal",paymentMethodId:b?.id??null,intentKind:"payment"});if(Re.provider!=="stripe")throw new Error("Invalid provider returned for PayPal intent");let ve=Re.clientSecret,p={return_url:bc()};if(b?.id&&(p.payment_method=b.id),!Zt(ts,{clientSecret:ve,sessionId:et,nonce:T,accountPatch:Se})&&g==="redirect")throw new Error("Unable to save PayPal checkout progress. Please try again.");let{error:E,paymentIntent:M}=await I.confirmPayment({clientSecret:ve,confirmParams:p,redirect:"if_required"});if(E){if(Zt(ts),Fa(E)){let ie=E.message??"Your payment was declined.";Z?.terminal({outcome:"payment_declined",...ur,terminalReason:"provider_declined"}),i?.(ie),y?.(dn("paypal",ie,{code:ho(E),declineCode:Ai(E)})),await oi({billingApiUrl:o,sessionId:et,nonce:T,request:{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:"paypal",providerDeclineReason:ho(E)??"provider_declined"}})}else mt(E,"stripe_paypal_confirm_failed",P?.generation);return}Zt(ts);let be=typeof M?.payment_method=="string"?M.payment_method:M?.payment_method?.id;a({id:be??M?.id,type:"card",threeDSecureActionResultTokenId:M?.id,isPaypal:!0},{accountPatch:Se,paymentMethodCategory:"paypal",presentationMode:g,sessionId:et,nonce:T});return}catch(wt){mt(wt,"stripe_paypal_failed",P?.generation)}finally{Xe(!1)}},[I,Ke,e,t,n,R,At,N,o,je,a,i,y,B,mt,z,De,Le,Z,g,ye]),pn=Ve(async()=>{if(!(Rt.current||s||Oe||!I||!Ke)){Rt.current=!0,Xe(!0);try{if(!await he(!0))return;await $e({expressPaymentType:"paypal",paymentFailed:()=>{}})}finally{Rt.current=!1,Xe(!1)}}},[Ke,$e,s,he,I,Oe]),Bt=g==="redirect"?d("button",{type:"button",disabled:s||Oe,onClick:()=>{pn()},style:{width:"100%",minHeight:ta,border:"1px solid #d1d5db",borderRadius:L??8,background:"#ffc439",color:"#111827",cursor:s||Oe?"not-allowed":"pointer",fontSize:"1rem",fontWeight:700},children:"Pay with PayPal"}):d(Sc,{onReady:ce=>Ze(xi(ce,["paypal"])),onLoadError:()=>{Ze("load_error"),cs(Z,"paypal","paypal","provider_error")},onClick:Ue,onConfirm:$e,onCancel:()=>{let ce=xe.current.get(ye);xe.current.delete(ye),Z?.terminal({outcome:"payment_cancelled",...ur,terminalReason:"cancelled",...ce?{attempt:ce.generation}:{}}),Ne(ce?.generation),Ge(!1),Q.current=!0,ze()},options:{buttonType:{paypal:"paypal"},billingAddressRequired:rt,emailRequired:rt,phoneNumberRequired:!1,shippingAddressRequired:!1,paymentMethods:{applePay:"never",googlePay:"never",paypal:"auto",link:"never"}}},ye),vt=He(Do,{children:[He("div",{ref:we,tabIndex:-1,"data-testid":"flopay-paypal-focus-target",role:"group","aria-label":"PayPal payment method",style:{borderRadius:8,outlineOffset:4},children:[xt&&d("button",{ref:oe,type:"button","data-testid":"flopay-paypal-retry-button",onClick:ft,style:rs,children:"Try PayPal again"}),X&&d(Ro,{identity:X.identity,methodLabel:X.methodLabel,onComplete:ct,onCancel:()=>ct(null)},X.id),d("div",{style:{display:X?"none":void 0},children:Bt})]}),Oe&&!X&&d(Sr,{status:"processing"})]});return g==="redirect"?vt:d(Bi,{state:Fe,placeholderTestId:"flopay-paypal-placeholder",borderRadius:L,children:vt})}function fc(e){return e==="apple_pay"||e==="google_pay"}var Rp=200;function Ep({active:e}){return ep(()=>e?Au(document):void 0,[e]),null}function gc({sessionId:e,nonce:t,email:n,billingApiUrl:o,intentKind:a,expressMethods:i,onTokenizedBody:s,onErrorChange:c,onButtonClick:y,onDecline:v,onTechnicalFailure:B,runBeforeButtonClick:R,billingName:N,onBuyerIdentityReady:le,onLoadStateChange:L,placeholderBorderRadius:Ae,popupCapabilityOwner:K,externalTelemetryContext:g}){let w=$r(),{emitInstrument:je}=Oo(er),I=ss(),Ke=is(),Z=St(()=>Qa(un(w),g),[g,w]),[Fe,Ze]=se("loading");yt(()=>{L?.(Fe)},[Fe,L]);let[Oe,Xe]=se(!1);yt(()=>{Ge.current=Oe},[Oe]);let Rt=V(!vn(n?.trim())||!N?.trim()).current,{request:rt,collect:X,finish:At}=Io(),ct=V(null),Qe=V(null),[we,oe]=se(0),[ye,Pt]=se(()=>ic()),xt=V(ye),Ge=V(!1),[Q,xe]=se(!1),[ae,z]=se(()=>ni(e,t)?"blocked":"idle"),[Ne,Le]=se("google_pay"),De=V(null),F=V(!0),ze=V(!1),mt=V("google_pay"),_e=V("google_pay"),ft=V(null),he=V(null),Ue=V(new Set),$e=V(null),pn=V(null);yt(()=>(F.current=!0,()=>{F.current=!1;for(let p of Ue.current)window.clearTimeout(p);Ue.current.clear()}),[]);let Bt=V(new Map),{startAttempt:vt,finishAttempt:ce,invalidateAttempt:P,isAttemptInvalidated:ot,isAttemptCurrent:et,generationRef:T}=la((p,G,E)=>{B?.(p,G,{...E,popupBlocked:E?.popupBlocked??Ur(G),provider:"stripe",paymentMethodCategory:"wallet",presentationMode:"popup",terminalReason:"overlay_timeout"}),Le(p),xe(!0),oe(M=>M+1)},{onHandoffObserved:p=>{pn.current=T.current,K.markAvailable(),Z?.log({name:"provider.popup.opened",stage:"overlay_open",provider:"stripe",paymentMethodCategory:"wallet",attempt:T.current,...p==="apple_pay"||p==="google_pay"?{walletType:p}:{}})},defersMissingTerminal:fc,onMissingTerminalDeferred:(p,G)=>{let E=Z?.now()??globalThis.performance?.now()??Date.now(),M=$e.current,be=M?.generation===G?M.startedAt:E;Z?.performance({stage:"overlay_return",durationMs:Math.max(0,E-be),durationMode:"buyer",provider:"stripe",paymentMethodCategory:"wallet",requestCategory:"provider_sdk",operationOutcome:"watchdog_expired",attempt:G,...fc(p)?{walletType:p}:{}}),Z?.flush?.().catch(()=>{})}});yt(()=>{Q&&Qe.current?.focus()},[Q,we]);let Pe=Ve(()=>{oe(p=>p+1)},[]),Ft=Ve((p,G,E,M,be=!1)=>{P(M),B?.(p,G,{code:E,popupBlocked:Ur(G),telemetryReported:be,provider:"stripe",paymentMethodCategory:"wallet",presentationMode:"popup"}),Le(p),xe(!0),Pe()},[P,B,Pe]),Se=Ve(()=>{window.setTimeout(()=>{(ct.current?.querySelector("iframe")??ct.current)?.focus()},0)},[]);yt(()=>{ze.current&&(ze.current=!1,Se())},[Se,we]);let wt=Ve(()=>{xe(!1),c?.(null),Se()},[Se,c]),f=Ve(()=>{De.current?.()},[]);yt(()=>{let p=null,G=()=>{p=null;let M=ic();M!==xt.current&&(xt.current=M,Pt(M),!Ge.current&&!et(T.current)&&Pe())},E=()=>{p!==null&&window.clearTimeout(p),p=window.setTimeout(G,Rp)};return window.addEventListener("resize",E),()=>{window.removeEventListener("resize",E),p!==null&&window.clearTimeout(p)}},[T,et,Pe]),yt(()=>{let p=ni(e,t);if(!p)return;let G=!1,E=!1,M=async()=>{if(!E){E=!0,G||z("checking");try{let be=await cc(I,p.clientSecret,Ue.current);if(G)return;let ie=es(be,p.providerObjectId,Zi(p.clientSecret));if(ie.kind==="confirmed"){if(!lc(e,t,p.clientSecret))return;De.current=null,z("idle"),s({id:ie.paymentMethodId,type:"card",threeDSecureActionResultTokenId:ie.intentId},{...p.accountPatch?{accountPatch:p.accountPatch}:{},paymentMethodCategory:"wallet",sessionId:e,nonce:t});return}if(ie.kind==="terminal"){Qi(e,t,p.clientSecret),De.current=null,z("idle"),Le(p.paymentMethodType),xe(!0),Pe();return}z("blocked")}catch{G||z("blocked")}finally{E=!1}}};return De.current=M,z("blocked"),()=>{G=!0,De.current===M&&(De.current=null)}},[t,s,Pe,e,I]);let b=Ve(async p=>{let G=!1,E=Ye=>{G||(G=!0,p.paymentFailed({reason:"fail",...Ye?{message:Ye}:{}}))};if(!I||!Ke){E();return}let M=Bt.current.get(we);if(M&&!et(M.generation)){Bt.current.delete(we),E();return}if(!M&&ot()){E();return}if(M&&!ce(M.generation)){E();return}M||ce();let be=p.expressPaymentType??M?.method??mt.current,ie=M??null,an=yc(be),gt;be==="apple_pay"?gt="apple_pay":be==="google_pay"&&(gt="google_pay");let Xt=M?.generation??T.current,de=Z,Te=de?.now()??globalThis.performance?.now()??Date.now(),_n=new AbortController,Tn=!1,bn=!1,pt=null,Ln=e,Mn="processing",yn="other",Qt="provider_runtime",An,jt=new Promise((Ye,dt)=>{An=dt}),yr=window.setTimeout(()=>{Tn=!0,_n.abort(),An(ei)},rp),Nt=async(Ye,dt,sn)=>{Mn=Ye,yn=dt,Qt=dt==="intent_create"||dt==="session_claim"?"transport_error":"provider_runtime";let Dt=de?.now()??globalThis.performance?.now()??Date.now();try{return await Promise.race([sn,jt])}finally{let Vt=de?.now()??globalThis.performance?.now()??Date.now();de?.performance({stage:Ye,durationMs:Math.max(0,Vt-Dt),durationMode:"machine",requestCategory:dt,paymentMethodCategory:"wallet",provider:"stripe",...Tn?{statusClass:"timeout"}:{}})}};try{if(Xe(!0),c?.(null),!ie&&R){let D=await Nt("processing","other",R(an));if(!D.proceed){E();return}ie={accountPatch:D.accountPatch,sessionId:D.sessionId,nonce:D.nonce}}let Ye=ie?.sessionId??e;Ln=Ye;let dt=ie?.nonce??t,sn=ft.current??ie?.accountPatch,Dt=Rc({event:p,fallbackEmail:sn?.email??n,fallbackName:[sn?.firstName,sn?.lastName].join(" ").trim()||N});if(!vn(Dt.email)){E("Buyer details are required."),X(os(be),Dt).then(D=>{D&&(ft.current=D)});return}ft.current=null;let Vt={...ie?.accountPatch,...dr(Dt,!0)};await Nt("processing","session_claim",Promise.resolve(le?.(Dt)));let{error:Kn}=await Nt("tokenization","provider_sdk",Ke.submit());if(Kn){E(),Ft(be,Kn,"stripe_wallet_submit_failed",M?.generation);return}if(!Ye)throw new Error("Missing sessionId or email for payment.");let xn={provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:be,paymentMethodId:null,intentKind:a},mn=JSON.stringify({sessionId:Ye,nonce:dt??"",request:xn}),fn=he.current,ln=fn?.retryIdentity===mn?fn.authorizationAttemptId:$u();he.current={authorizationAttemptId:ln,retryIdentity:mn};let Kt=await Nt("processing","intent_create",ri(o,je,Ye,dt??"",{...xn,authorizationAttemptId:ln},{signal:_n.signal}));if(Kt.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let bt=Kt.clientSecret,rn=dp({createdAt:Date.now(),sessionId:Ye,...dt?{nonce:dt}:{},clientSecret:bt,providerObjectId:Kt.providerObjectId,paymentMethodType:be,accountPatch:Vt});window.clearTimeout(yr),bn=!0,de?.performance({stage:"callback",durationMs:Math.max(0,(de?.now()??globalThis.performance?.now()??Date.now())-Te),durationMode:"machine",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",provider:"stripe"});let gn=de?.now()??globalThis.performance?.now()??Date.now(),Lt={stage:"provider_confirmation",provider:"stripe",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",...gt?{walletType:gt}:{},attempt:Xt},ke=!1,Bn=null;de?.log({name:"payment.provider_confirmation.started",...Lt}),pt=window.setTimeout(()=>{pt!==null&&Ue.current.delete(pt),ke=!0;let D=de?.now()??globalThis.performance?.now()??Date.now();de?.error({errorCode:"PROVIDER_RUNTIME_FAILED",...Lt,operationOutcome:"watchdog_expired",durationMs:Math.max(0,D-gn),statusClass:"timeout",failureCategory:"provider_runtime",terminalReason:"provider_error"}),de?.flush?.().catch(()=>{}),Bn?.()},op),Ue.current.add(pt);let zn=(D,U)=>{pt!==null&&(window.clearTimeout(pt),Ue.current.delete(pt),pt=null);let It=de?.now()??globalThis.performance?.now()??Date.now(),ut=Math.max(0,It-gn),Ct=D;ke&&(D==="resolved"?Ct="resolved_late":D==="returned_error"?Ct="returned_error_late":Ct="rejected_late");let In=U??(D==="resolved"?"approved":"provider_error");return de?.log({name:"payment.provider_confirmation.returned",...Lt,operationOutcome:Ct,terminalReason:In}),de?.performance({...Lt,durationMs:ut,durationMode:"buyer",operationOutcome:Ct,terminalReason:In}),{durationMs:ut,operationOutcome:Ct,terminalReason:In}},kn=!1,en=!1,nr=D=>{if(!D||typeof D!="object")return null;let U=D;if(U.error)return null;let It=U.setupIntent??U.paymentIntent,ut=es(It??null,void 0,!!U.setupIntent);return ut.kind==="confirmed"?ut:null},mr=D=>{if(kn||M&&T.current!==M.generation)return;let U=nr(D);if(!U)return;if(rn&&!lc(Ye,dt,bt)){kn=!0;return}let{intentId:It,paymentMethodId:ut}=U;kn=!0,en=!0,he.current=null,De.current=null,F.current&&(z("idle"),Xe(!1));let Ct=`${wc}:${Ye}`;Zt(Ct,{createdAt:Date.now(),sessionId:Ye,nonce:dt,accountPatch:Vt,paymentMethodId:ut,providerIntentId:It,paymentMethodType:be});try{s({id:ut,type:"card",threeDSecureActionResultTokenId:It},{accountPatch:Vt,paymentMethodCategory:"wallet",sessionId:Ye,nonce:dt})}finally{Zt(Ct)}},Gn=!1;Bn=async()=>{if(!(Gn||kn||en)){Gn=!0,F.current&&z("checking");try{let D=await cc(I,bt,Ue.current);if(kn||en)return;let U=Zi(bt),It=es(D,Kt.providerObjectId,U);if(It.kind==="confirmed"){mr(U?{setupIntent:D}:{paymentIntent:D});return}if(It.kind==="terminal"){if(en=!0,Qi(Ye,dt,bt),he.current=null,De.current=null,!F.current)return;z("idle"),E(),Ft(be,new Error("Wallet confirmation did not complete."),"stripe_wallet_confirmation_terminal",M?.generation,!0);return}F.current&&!en&&(z("blocked"),Xe(!1))}catch{F.current&&!en&&(z("blocked"),Xe(!1))}finally{Gn=!1}}},De.current=Bn;let kt,re;try{let D=await(Zi(bt)?I.confirmSetup({elements:Ke,clientSecret:bt,redirect:"if_required"}):I.confirmPayment({elements:Ke,clientSecret:bt,redirect:"if_required"}));if(!D||typeof D!="object")throw new fa(cp(D));if(kt=D,!kt.error&&!nr(kt))throw new fa("confirmation_result_unconfirmed");re=zn(kt.error?"returned_error":"resolved",kt.error&&Fa(kt.error)?"provider_declined":void 0)}catch(D){let U=D instanceof fa?D.reason:void 0,It=U!==void 0,ut=zn(It?"returned_error":"rejected");if(de?.error({...It?{errorCode:"CONFIGURATION_INVALID",failureCategory:"invalid_response",reason:U}:Li(D),...Lt,operationOutcome:ut.operationOutcome,durationMs:ut.durationMs,statusClass:"unknown",terminalReason:ut.terminalReason}),!F.current||kn)return;await Bn?.();return}let x=kt.error;if(x){if(!F.current||kn)return;if(Fa(x)){en=!0,Qi(Ye,dt,bt),he.current=null,De.current=null,z("idle");let D=x.message??"Your payment was declined.";E(D),c?.(D),v?.(dn(an,D,{code:ho(x),declineCode:Ai(x)})),oi({billingApiUrl:o,sessionId:Ye,nonce:dt,request:{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:be,providerDeclineReason:ho(x)??"provider_declined",...Kt.intentKind==="payment"&&Kt.providerObjectId.startsWith("pi_")?{providerIntentId:Kt.providerObjectId}:{}}})}else de?.error({...Li(x),...Lt,operationOutcome:re.operationOutcome,durationMs:re.durationMs,statusClass:"unknown",terminalReason:re.terminalReason}),await Bn?.();return}if(mr(kt),!kn)throw new Error("Invalid provider returned for APM intent")}catch(Ye){if(Ye===ei){let dt=de?.now()??globalThis.performance?.now()??Date.now();de?.error({errorCode:pp(yn),stage:Mn,requestCategory:yn,paymentMethodCategory:"wallet",provider:"stripe",...gt?{walletType:gt}:{},operationOutcome:"watchdog_expired",checkoutSessionId:Ln,durationMs:Math.max(0,dt-Te),statusClass:"timeout",failureCategory:Qt,attempt:Xt,terminalReason:"provider_error"}),de?.flush?.().catch(()=>{})}E(),Ft(be,Ye,Ye===ei?"stripe_wallet_authorization_timeout":"stripe_wallet_failed",M?.generation,Ye===ei)}finally{if(window.clearTimeout(yr),pt!==null&&(window.clearTimeout(pt),Ue.current.delete(pt)),!bn){let Ye=de?.now()??globalThis.performance?.now()??Date.now();de?.performance({stage:"callback",durationMs:Math.max(0,Ye-Te),durationMode:"machine",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",provider:"stripe",...Tn?{statusClass:"timeout"}:{}})}F.current&&Xe(!1)}},[I,Ke,e,t,n,N,X,le,o,je,a,s,c,v,R,Ft,ce,et,ot,T,Z,we]),Re=St(()=>ml(i),[i]),ve=St(()=>i.map(Ju),[i]);return He(Do,{children:[d(Bi,{state:Fe,placeholderTestId:"flopay-wallet-placeholder",borderRadius:Ae,children:He("div",{ref:ct,tabIndex:-1,"data-testid":"flopay-wallet-focus-target",role:"group","aria-label":"Wallet payment methods",style:{borderRadius:8,outlineOffset:4},children:[Q&&He("button",{ref:Qe,type:"button","data-testid":"flopay-wallet-retry-button",onClick:wt,style:rs,children:["Try ",os(Ne)," again"]}),ae!=="idle"&&He("div",{role:"status","aria-live":"polite",children:[d("p",{children:"We are still confirming your payment. Check its status before trying again."}),d("button",{type:"button",onClick:f,disabled:ae==="checking",style:rs,children:ae==="checking"?"Checking payment status\u2026":"Check payment status"})]}),rt&&d(Ro,{identity:rt.identity,methodLabel:rt.methodLabel,onComplete:At,onCancel:()=>At(null)},rt.id),ae==="idle"&&He("div",{style:{display:rt?"none":void 0},children:[d(Ep,{active:ye}),d(Sc,{onReady:p=>{Ze(xi(p,ve))},onLoadError:p=>{Ze("load_error"),cs(Z,"stripe","wallet","provider_error")},onClick:async p=>{let G=Z?.now()??globalThis.performance?.now()??Date.now();mt.current=p.expressPaymentType,_e.current=yc(p.expressPaymentType);let E=!0,M=window.setTimeout(()=>{E=!1,p.reject()},np),be=R?await R(_e.current):{proceed:!0};if(window.clearTimeout(M),!E)return;if(!be.proceed){Bt.current.delete(we),p.reject();return}let ie=vt(p.expressPaymentType);$e.current={generation:ie,startedAt:G},Bt.current.set(we,{generation:ie,method:p.expressPaymentType,accountPatch:be.accountPatch,sessionId:be.sessionId,nonce:be.nonce}),xe(!1),Z?.log({name:"provider.handoff.requested",stage:"overlay_open",provider:"stripe",paymentMethodCategory:"wallet",attempt:ie,...p.expressPaymentType==="apple_pay"||p.expressPaymentType==="google_pay"?{walletType:p.expressPaymentType}:{}}),y?.(_e.current),p.resolve()},onConfirm:b,onCancel:()=>{let p=Bt.current.get(we);Bt.current.delete(we);let G=$e.current,E=Z?.now()??globalThis.performance?.now()??Date.now();if(p&&G?.generation===p.generation&&Uu({method:p.method,elapsedMs:E-G.startedAt,handoffObserved:pn.current===p.generation})){Z?.error({errorCode:"PROVIDER_RUNTIME_FAILED",failureCategory:"provider_runtime",stage:"overlay_open",provider:"stripe",paymentMethodCategory:"wallet",requestCategory:"provider_sdk",terminalReason:"provider_error",attempt:p.generation,walletType:"google_pay"}),he.current=null,Ft(p.method,new Error("The browser window is too small for the Google Pay sheet."),Cc,p.generation,!0);return}Z?.terminal({outcome:"payment_cancelled",provider:"stripe",paymentMethodCategory:"wallet",terminalReason:"cancelled",...p?{attempt:p.generation}:{}}),P(p?.generation),he.current=null,xe(!1),ze.current=!0,Pe()},options:{...fl,paymentMethods:Re,emailRequired:Rt,billingAddressRequired:Rt}},we)]})]})}),Oe&&d(Sr,{status:"processing"})]})}function Ec(e,t,n){let o=vc(n,t,"inline_apm");return{...e,paymentMethodTypes:[t],...o?{setupFutureUsage:o}:null}}function as({method:e,sessionId:t,nonce:n,email:o,billingName:a,onBuyerIdentityReady:i,billingApiUrl:s,onTokenizedBody:c,onErrorChange:y,onDecline:v,onCancel:B,runBeforeButtonClick:R,onButtonClick:N,isProcessing:le,submitButtonColor:L,submitButtonBorderRadius:Ae,submitButtonStyle:K,errorText:g}){let w=$r(),{emitInstrument:je}=Oo(er),I=ss(),Ke=is(),[Z,Fe]=se(!1),Ze=V(!1),[Oe,Xe]=se(!1),[Rt,rt]=se("loading"),[X,At]=se(""),ct=!vn(o?.trim()),Qe=!ct||vn(X.trim()),we=Ve(async()=>{if(!I||!Ke||le||Ze.current||!Oe)return;Ze.current=!0,Fe(!0);let oe=R?await R("card"):{proceed:!0};if(!oe.proceed){Ze.current=!1,Fe(!1);return}N?.("card");let ye=oe.sessionId??t,Pt=oe.nonce??n,xt=aa(a?.trim()),Ge=dr({email:oe.accountPatch?.email?.trim()||o?.trim()||X.trim(),firstName:oe.accountPatch?.firstName?.trim()||xt.firstName,lastName:oe.accountPatch?.lastName?.trim()||xt.lastName}),Q=Ge.email,xe=dr({...oe.accountPatch,...Ge});try{if(y?.(null),!vn(Q))throw new Error("A valid email address is required for payment.");await i?.(Ge);let ae=await Ke.submit();if(ae.error){y?.(ae.error.message??"Payment failed.");return}let z=[Ge.firstName,Ge.lastName].filter(Boolean).join(" "),Ne=await I.createPaymentMethod({elements:Ke,params:{billing_details:{email:Q,...z?{name:z}:{}}}});if(Ne.error||!Ne.paymentMethod){y?.(Ne.error?.message??"Failed to create payment method.");return}let Le=Ne.paymentMethod;if(!ye||!Q)throw new Error("Missing sessionId or email for payment.");let De=Le.type||e,F=await ri(s,je,ye,Pt??"",{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:De,paymentMethodId:null,intentKind:"payment"});if(F.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let ze=F.clientSecret;Zt(Ir,{clientSecret:ze,sessionId:ye,nonce:Pt,accountPatch:xe,paymentMethodId:Le.id,paymentMethodType:Le.type??e,gateway:"stripe"});let{error:mt,paymentIntent:_e}=await I.confirmPayment({clientSecret:ze,confirmParams:{return_url:window.location.href,payment_method:Le.id},redirect:"if_required"});if(mt){Zt(Ir);let Ue=mt.message??"Payment failed.";y?.(Ue),v?.(dn("card",Ue,{code:mt.code})),await oi({billingApiUrl:s,sessionId:ye,nonce:Pt,request:{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:e,providerDeclineReason:mt.code??"provider_declined"}});return}let ft=_e?.status;if(!ra(ft)){Zt(Ir);let Ue=ft==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";y?.(Ue),v?.(dn("card",Ue,{code:ft??"missing_payment_intent"}));return}Zt(Ir);let he=typeof _e?.payment_method=="string"?_e.payment_method:_e?.payment_method?.id;c({id:he??Le.id,type:"card",threeDSecureActionResultTokenId:_e?.id,gateway:"stripe",paymentMethodType:Le.type??e},{accountPatch:xe,paymentMethodCategory:"apm",sessionId:ye,nonce:Pt})}catch(ae){y?.(ae instanceof Error?ae.message:"Payment failed. Please try again.")}finally{Ze.current=!1,Fe(!1)}},[I,Ke,le,Oe,R,N,t,n,o,a,X,i,s,je,e,c,y,v]);return He("div",{"data-testid":`flopay-stripe-method-form-${e}`,style:{display:"flex",flexDirection:"column"},children:[ct&&d("div",{"data-testid":"flopay-apm-identity-fields",style:{display:"flex",flexDirection:"column",gap:"0.75rem",marginBottom:"0.75rem"},children:ct&&He("label",{style:{display:"flex",flexDirection:"column",gap:"0.375rem"},children:["Email address",d("input",{type:"email",autoComplete:"email",required:!0,value:X,onChange:oe=>At(oe.target.value),style:{minHeight:42,padding:"0 0.75rem",border:"1px solid #d1d5db",borderRadius:6}})]})}),d(Xu,{onReady:()=>rt("ready"),onLoadError:()=>{rt("load_error"),cs(un(w),"stripe","apm")},onChange:oe=>{Xe(!!oe.complete)},options:{layout:gl,fields:{billingDetails:{email:"never"}},defaultValues:{billingDetails:{...a?.trim()?{name:a.trim()}:{},...vn(o?.trim())?{email:o?.trim()}:{}}}}}),d(hl,{testId:`flopay-stripe-method-pay-${e}`,onClick:()=>{we()},disabled:!Oe||!Qe||Z||le||Rt!=="ready",color:L,borderRadius:Ae,style:K,children:Z?"Processing\u2026":`Pay with ${ga(e)}`}),g&&d(_o,{margin:"0.75rem 0 0",children:g})]})}function hc({sessionId:e,nonce:t,email:n,billingName:o,onBuyerIdentityReady:a,billingApiUrl:i,paymentElementMethods:s,stripeInstance:c,paymentElementBaseOptions:y,futureUseSession:v,onTokenizedBody:B,onErrorChange:R,onButtonClick:N,onDecline:le,runBeforeButtonClick:L,onLoadStateChange:Ae,isProcessing:K=!1,submitButtonColor:g="#4A49FF",submitButtonBorderRadius:w=8,submitButtonStyle:je,buttonAppearance:I,themeId:Ke,onExpandApm:Z,expandedApmMethod:Fe}){let{emitInstrument:Ze}=Oo(er),[Oe,Xe]=se(null),[Rt,rt]=se(null),X=V(!1),{request:At,collect:ct,finish:Qe}=Io();yt(()=>{s.length>0&&c?Ae?.("ready"):c||Ae?.("loading")},[s.length,c,Ae]);let we=Ve(async Q=>{if(!c||X.current||K)return;X.current=!0,rt(Q);let xe=L?await L("card"):{proceed:!0};if(!xe.proceed){X.current=!1,rt(null);return}N?.("card");let ae=xe.sessionId??e,z=xe.nonce??t,Ne=aa([xe.accountPatch?.firstName,xe.accountPatch?.lastName].filter(Boolean).join(" ")||o),Le=dr({email:xe.accountPatch?.email?.trim()||n?.trim(),firstName:xe.accountPatch?.firstName?.trim()||Ne.firstName,lastName:xe.accountPatch?.lastName?.trim()||Ne.lastName});if(!vn(Le.email)){rt(null);let ze=await ct(ga(Q),Le);if(!ze){X.current=!1;return}Le=ze,rt(Q)}let De=Le.email,F=dr({...xe.accountPatch,...Le});try{if(R?.(null),!ae||!vn(De))throw new Error("Missing sessionId or email for payment.");await a?.(Le);let ze=await ri(i,Ze,ae,z??"",{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:Q,paymentMethodId:null,intentKind:"payment"});if(ze.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let mt=ze.clientSecret;Zt(Ir,{clientSecret:mt,sessionId:ae,nonce:z,accountPatch:F,paymentMethodType:Q,gateway:"stripe"});let{error:_e,paymentIntent:ft}=await c.confirmPayment({clientSecret:mt,confirmParams:{return_url:window.location.href,payment_method_data:{type:Q,billing_details:{name:[Le.firstName,Le.lastName].filter(Boolean).join(" "),...De?{email:De}:{}}}},redirect:"if_required"});if(_e){Zt(Ir);let $e=_e.message??"Payment failed.";R?.($e),le?.(dn("card",$e,{code:_e.code})),await oi({billingApiUrl:i,sessionId:ae,nonce:z,request:{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:Q,providerDeclineReason:_e.code??"provider_declined"}});return}let he=ft?.status;if(!ra(he)){Zt(Ir);let $e=he==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";R?.($e),le?.(dn("card",$e,{code:he??"missing_payment_intent"}));return}Zt(Ir);let Ue=typeof ft?.payment_method=="string"?ft.payment_method:ft?.payment_method?.id;B({id:Ue??ft?.id,type:"card",threeDSecureActionResultTokenId:ft?.id,gateway:"stripe",paymentMethodType:Q},{accountPatch:F,paymentMethodCategory:"apm",sessionId:ae,nonce:z})}catch(ze){R?.(ze instanceof Error?ze.message:"Payment failed. Please try again.")}finally{X.current=!1,rt(null)}},[c,K,L,N,e,t,n,ct,i,Ze,o,a,B,R,le]),[oe,ye]=se(null),Pt=Z?Fe??null:oe,xt=Ve(Q=>{X.current||K||Pt&&Pt!==Q||(oc(Q)?Z?Z(Q):ye(Q):we(Q))},[Pt,K,we,Z]),Ge=St(()=>oe?Ec(y,oe,v):null,[oe,y,v]);return d("div",{"data-testid":"flopay-stripe-payment-element-region",style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:At?d(Ro,{identity:At.identity,methodLabel:At.methodLabel,onComplete:Qe,onCancel:()=>Qe(null)},At.id):s.map(Q=>{let xe=Fe===Q,ae=Rt===Q,z=Rt!==null&&Rt!==Q||Fe!=null&&Fe!==Q;return He(Qu.Fragment,{children:[d(yl,{method:Q,themeId:Ke,submitting:ae,disabled:z,highlighted:xe,hasNextStep:oc(Q),onClick:()=>xt(Q),backgroundColor:I?.backgroundColor,borderColor:I?.borderColor,textColor:I?.textColor,borderRadius:I?.borderRadius,fontFamily:I?.fontFamily}),!Z&&oe===Q&&Ge&&c&&d(oo,{stripe:c,options:Ge,children:d(as,{method:Q,sessionId:e,nonce:t,email:n,billingName:o,onBuyerIdentityReady:a,billingApiUrl:i,onTokenizedBody:B,onErrorChange:R,onDecline:le,onCancel:()=>ye(null),runBeforeButtonClick:L,onButtonClick:N,isProcessing:K,submitButtonColor:g,submitButtonBorderRadius:w,submitButtonStyle:je})},Q)]},Q)})})}function _p({sessionId:e,nonce:t,billingApiUrl:n,telemetry:o,email:a,userId:i,onComplete:s,onError:c,onDecline:y,onCancel:v,onTokenizedBody:B,firstName:R,lastName:N,chv:le,className:L,submitLabel:Ae,isProcessing:K,error:g,onErrorChange:w,showPayPal:je=!0,showStripe:I=!0,walletPresentation:Ke="auto",enabledPaymentMethods:Z,enabledPaymentMethodCountries:Fe,showApplePay:Ze=!0,showGooglePay:Oe=!0,layout:Xe="default",theme:Rt,buttonsTheme:rt,buttonsStyles:X,appearance:At,cardButtonContent:ct,cardBackButtonContent:Qe,cardTitleContent:we,showSecurityFooter:oe,onButtonClick:ye,onBeforeButtonClick:Pt,onBuyerIdentityReady:xt,enableAVS:Ge,cardFieldOrder:Q,cardPreFormSlot:xe,avsLayout:ae="row",country:z,zip:Ne,addressLine1:Le,addressLine2:De,city:F,state:ze,onCountryChange:mt,onZipChange:_e,avsCheck:ft,checkoutType:he,checkoutLayout:Ue,totalAmount:$e=0,currency:pn="usd",initialCardOpen:Bt=!1,directPaypal:vt,isSubscription:ce=!1,session:P,dataAttachmentPending:ot=!1,dataAttachmentRequiresIdentity:et=!1,debug:T=!1}){let Pe=$r(),Ft=zi(),Se=Oo(cr),{emitInstrument:wt}=Oo(er),f=V(null);f.current||(f.current=qa());let b=f.current,[,Re]=se(0),ve=V(null);ve.current||(ve.current=ea());let p=ve.current,G=St(()=>({browser:p,capability:b,presentationMode:"popup"}),[p,b]),E=P??Se.session,M=St(()=>({futureUse:E?.futureUse,futureUseUnsupported:E?.futureUseUnsupported}),[E?.futureUse,E?.futureUseUnsupported]),be=E?.gateways?.paypal?.providerObjectType??vt?.providerObjectType,ie=ot||Se.claimPending===!0,an=et||Se.claimRequiresIdentity===!0,gt=ie&&!an,Xt=Nl(),de=n||Xt,[Te,_n]=se(!1),[Tn,bn]=se(null),[pt,Ln]=se(z??""),[Mn,yn]=se(Ne??""),[Qt,An]=se(Le??""),[jt,yr]=se(De??""),[Nt,Ye]=se(F??""),[dt,sn]=se(ze??""),[Dt,Vt]=se(""),[Kn,xn]=se({}),mn=V(Ne??""),fn=V(z??""),ln=V(Le??""),Kt=V(De??""),bt=V(F??""),rn=V(ze??""),gn=V(""),Lt=V({});yt(()=>{let r=(m,$,Ce,q,ne)=>{if(Lt.current[m])return;let Mt=$?.trim();!Mt||Mt===Ce.current||(Ce.current=Mt,q(Mt),ne?.(Mt))};r("country",z,fn,Ln,mt),r("zip",Ne,mn,yn,_e),r("addressLine1",Le,ln,An),r("addressLine2",De,Kt,yr),r("city",F,bt,Ye),r("state",ze,rn,sn)},[z,Ne,Le,De,F,ze,mt,_e]);let ke=St(()=>Hu(Ge),[Ge]),Bn=ke!==null,zn=St(()=>Ji(P),[P]),kn=Nu(P?.vault),en=!!P?.gateways?.pcivault,nr=Al(P),Gn=!!(P?.gateways?.stripe?.enabledPaymentMethods??Z)?.includes("card")||to(P),kt=kn||Gn||en,re=!!(I&&kt&&e),[x,D]=se(()=>Xe!=="buttons"||Bt?e??null:null),[U,It]=se(0),ut=Xe!=="buttons"||Bt||!!e&&x===e,Ct=P?.captureMethod,In=V(Pe);yt(()=>{In.current=Pe},[Pe]);let[at,Nr]=se(null);yt(()=>{if(!re||!e||!ut){Nr(null);return}let r=In.current?In.current.cardCapture({sessionId:e,captureMethod:Ct}):new Cu({sessionId:e,captureMethod:Ct,billingApiUrl:de,telemetry:o});return Nr({sessionId:e,captureMethod:Ct,billingApiUrl:de,telemetry:o,capture:r}),()=>{r.unmount()}},[re,e,ut,Ct,de,o]);let Et=re&&e&&ut&&at?.sessionId===e&&at.captureMethod===Ct&&at.billingApiUrl===de&&at.telemetry===o?at.capture:null,Un=St(()=>{let r=pt,m=ke?Wt(ke.postal_code,r):!1;return wp(r,Mn,m)},[ke,pt,Mn]),{avsInvalid:fr,invalidAvsFields:Yn}=St(()=>{let r={line1:!1,city:!1,state:!1,zip:!1};if(!re||!ke)return{avsInvalid:!1,invalidAvsFields:r};let m=pt,$=(ne,Mt)=>Wt(ne,m)&&!Mt.trim(),Ce={line1:$(ke.address_line_1,Qt),city:$(ke.city,Nt),state:$(ke.state,dt),zip:Un.empty||Un.malformed};return{avsInvalid:Ce.line1||Ce.city||Ce.state||Ce.zip,invalidAvsFields:Ce}},[re,ke,pt,Qt,Nt,dt,Un]),[Gt,rr]=se(!1),[Er,gr]=se(!1),[Rn,Lr]=se(!1),[Jn,_r]=se({line1:!1,city:!1,state:!1}),qn=V(!1),or=V({email:!1,line1:!1,city:!1,state:!1,zip:!1}),hr=V(!1),_t=Ve(r=>{or.current[r]=!0,hr.current=!0},[]),jn=Ve(r=>!qn.current&&or.current[r],[]),$n=Ve(r=>{jn(r)&&_r(m=>m[r]?m:{...m,[r]:!0})},[jn]),[Fn,ar]=se(()=>Xi(P?.vault,{billingApiUrl:de,sessionId:e,nonce:t})),[Je,hn]=se(Bt&&kt?"card":"buttons"),[tn,Dn]=se(null),Yr=Je==="expanding"||Je==="card",ir=P?.gateways?.stripe&&!nr?"stripe":void 0,Tr=Ve(()=>{wt?.({class:"card_surface",provider:ir})},[ir,wt]),Wn=V(null),Pn=Ve(r=>{Wn.current&&clearTimeout(Wn.current),Wn.current=setTimeout(()=>{Wn.current=null,r()},ha)},[]);yt(()=>()=>{Wn.current&&clearTimeout(Wn.current)},[]);let Pr=V(!1),[Cn,C]=se(0),S=V(null),O=Ve(()=>{Tr(),D(e??null),Pr.current&&(Pr.current=!1,C(r=>r+1)),It(r=>r+1),hn("expanding"),Pn(()=>hn("card"))},[Pn,Tr,e]),ee=Ve(()=>{hn("collapsing"),Pn(()=>hn("buttons"))},[Pn]),it=Ve(r=>{Dn(r),hn("apm-expanding"),Pn(()=>hn("apm-form"))},[Pn]),Yt=Ve(()=>{hn("apm-collapsing"),Pn(()=>{hn("buttons"),Dn(null)})},[Pn]);yt(()=>{Xe==="buttons"&&Bt&&kt&&(D(e??null),hn("card"))},[Xe,Bt,kt,e]);let[me,W]=se(null),k=V(!1),_=V(null),H=V("idle"),[u,l]=se(!1),A=V(u);A.current=u;let[te,Ie]=se(()=>vt?.existingOrderId?{orderId:vt.existingOrderId,attempts:1}:null),qe=V(te);yt(()=>{qe.current=te},[te]);let fe=V(null),ue=St(()=>{if(xt||Se.claimBuyerIdentity||P?.buyerIdentified!==!1||!e||!t)return;let r=`${de}|${e}|${t}`;fe.current?.key!==r&&(fe.current={key:r,claim:So(new Fo(de,{telemetry:!1}),e,t,{...i?{userId:i}:{},...R?{firstName:R}:{},...N?{lastName:N}:{}})});let m=fe.current.claim;return async $=>{await m($)}},[xt,Se.claimBuyerIdentity,P?.buyerIdentified,e,t,de,i,R,N]),Be=xt??Se.claimBuyerIdentity??ue,tt=g??Tn,st=St(()=>Ku(Rt),[Rt]),h=St(()=>{let r=st?.buttonsLayout??Vu(rt);return X?{...r,...X,cardButton:{...r.cardButton,...X.cardButton},cardFormContainer:{...r.cardFormContainer,...X.cardFormContainer},backButton:{...r.backButton,...X.backButton},backButtonIcon:{...r.backButtonIcon,...X.backButtonIcon},submitButton:{...r.submitButton,...X.submitButton},title:{...r.title,...X.title}}:r},[st,rt,X]),Y=At??st?.appearance,Ee=St(()=>Tu({appearance:Y,buttonsStyles:h,layout:Xe}),[Y,h,Xe]),Me=Se.inlineSessionPatchProcessing??!1,j=(K??Te)||Me,nn=de.replace(/\/+$/,""),J=St(()=>Ni({userId:i,email:a,firstName:R,lastName:N,country:z,zip:Ne},Kn),[i,a,R,N,z,Ne,Kn]),Mr=[J.firstName,J.lastName].filter(r=>!!r?.trim()).join(" "),Ss=!vn(J.email?.trim()),ci=V(null);re&&ci.current===null&&(ci.current=Ss);let zr=re&&(ci.current??Ss),di=St(()=>kp(Dt,zr),[Dt,zr]),io=di.empty||di.malformed,Hn=St(()=>Pe?Pe.getRawProvider():null,[Pe]),ws=St(()=>Ft?Ft.getRawProvider():null,[Ft]),qo=$e||100,so=pn.toLowerCase(),ui=St(()=>Y?Su(Y):null,[Y]),lo=ui,ks=St(()=>{let r=ui??{},m=r.rules??{};return{...r,rules:{...m,".AccordionItem":{padding:"10px 14px",boxShadow:"none",...m[".AccordionItem"]??{}},".AccordionItemContents":{padding:"6px 14px 12px",boxShadow:"none",...m[".AccordionItemContents"]??{}}}}},[ui]),Is=St(()=>({...Ml($e,E?.captureMethod,M),currency:so,...lo?{appearance:lo}:null}),[$e,so,E?.captureMethod,M,lo]),pi=vc(M,"paypal","paypal"),Rs=St(()=>({mode:"payment",amount:qo,currency:so,captureMethod:"manual",...pi?{setupFutureUsage:pi}:null,...lo?{appearance:lo}:null}),[qo,so,pi,lo]),ge=Ve(r=>{bn(r),w?.(r)},[w]),Es=V(0);yt(()=>{Cn!==Es.current&&(Es.current=Cn,ge(null))},[Cn,ge]);let yi=V(""),[_s,qc]=se(!1),mi=Ve(()=>{qc(!0)},[]);yt(()=>{if(!re||!zr||!Be||!_s||io||yi.current)return;let r=dr({email:vn(J.email?.trim())?J.email?.trim():gn.current.trim(),firstName:J.firstName?.trim(),lastName:J.lastName?.trim()});yi.current=JSON.stringify(r),xn(m=>({...m,...r})),Promise.resolve(Be(r)).catch(m=>{yi.current="",ge(m instanceof Error?m.message:"Failed to attach buyer details.")})},[re,zr,Be,_s,io,J.email,J.firstName,J.lastName,ge]),yt(()=>{!re||!Et||Et.setCardFieldOrder?.(Q??null,ke==null&&!zr)},[re,Et,Q,ke,zr]),yt(()=>{(Je==="expanding"||Je==="collapsing"||Je==="apm-expanding"||Je==="apm-collapsing")&&ge(null)},[Je,ge]);let vr=Ve((r,m,$)=>{y?.(dn(r,m,$))},[y]),co=Ve((r,m,$)=>{let Ce=$?.popupBlocked??Ur(m);Ce&&b.markBlocked()&&Re(lt=>lt+1);let q=os(r),ne=$?.code===Cc?Iu(q):Ba(q,Ce,p.inAppBrowser),Mt=ho(m),Xn=(Mt?.toLowerCase()==="error"?void 0:Mt)??ul($?.code)??"external_payment_method_failed",We=new Dr(ne,"api_error",{code:"external_payment_method_failed",param:r,details:{providerCode:Xn,popupBlocked:Ce,inAppBrowser:p.inAppBrowser,appFamily:p.appFamily,popupCapability:b.current(),presentationMode:$?.presentationMode??"popup"}});$?.telemetryReported||un(Pe)?.error(Bo({...G,presentationMode:$?.presentationMode??"popup"},{errorCode:Ce?"POPUP_BLOCKED":"PROVIDER_RUNTIME_FAILED",failureCategory:"provider_runtime",stage:"provider_ready",provider:$?.provider??(r==="paypal"?"paypal":"stripe"),paymentMethodCategory:$?.paymentMethodCategory??(r==="paypal"?"paypal":"wallet"),requestCategory:"provider_sdk",terminalReason:$?.terminalReason??(Ce?"popup_blocked":"provider_error")})),W(null),Xe==="buttons"&&(hn("buttons"),Dn(null)),ge(ne),c?.(We),console.error("[FloPay] External payment method failed:",{method:r,code:Xn,popupBlocked:Ce})},[p,G,Pe,Xe,c,b,ge]);yt(()=>{if(!re||!e){ar(null);return}let r={billingApiUrl:nn,sessionId:e,nonce:t},m=Xi(P?.vault,r);if(m){ar(m);return}if(!ut){ar(null);return}let $=`${nn}\0${e}\0${t??""}`,Ce=S.current;if(Ce&&Ce.key===$){ar(Ce.mount);return}ar(null);let q=!0;return new Fo(nn).getVaultCapture(e,t).then(ne=>{if(!q)return;let Mt=Xi(ne,r);Mt?.verificationRequired&&!ne.html&&(S.current={key:$,mount:Mt}),Mt?ar(Mt):ge("Failed to load the secure card form.")}).catch(ne=>{q&&ge(ne instanceof Error?ne.message:"Failed to load the secure card form.")}),()=>{q=!1}},[re,ut,U,e,P?.vault,nn,t,ge]);let sr=V({onComplete:s,onError:c,updateError:ge,emitDecline:vr,resolvedAccount:J,avsConfig:ke,avsCheckProp:ft,sessionId:e,nonce:t,baseUrl:nn,captureMethod:P?.captureMethod,paymentId:P?.paymentId,authorizationExpiresAt:P?.authorizationExpiresAt,serverSideCardGateway:nr});sr.current={onComplete:s,onError:c,updateError:ge,emitDecline:vr,resolvedAccount:J,avsConfig:ke,avsCheckProp:ft,sessionId:e,nonce:t,baseUrl:nn,captureMethod:P?.captureMethod,paymentId:P?.paymentId,authorizationExpiresAt:P?.authorizationExpiresAt,serverSideCardGateway:nr};let fi=V(!1),Ts=Ve(()=>{let r=sr.current,m=r.resolvedAccount.email?.trim(),$=vn(m)?m:gn.current.trim();if(!vn($))return null;let Ce=r.resolvedAccount.firstName?.trim(),q=r.resolvedAccount.lastName?.trim(),ne=fn.current.trim()||r.resolvedAccount.country?.trim()||"",Mt=r.avsConfig?Wt(r.avsConfig.state,ne):!1,Xn=r.avsConfig?Wt(r.avsConfig.address_line_1,ne):!1,We=r.avsConfig?Wt(r.avsConfig.postal_code,ne):!1,lt=r.avsConfig?Wt(r.avsConfig.city,ne):!1,ht=r.avsConfig?Wt(r.avsConfig.address_line_2,ne):!1,qt=Xn&&!Mt&&We?Fu(ne,(mn.current??"").trim()):null,Xr=Mt?rn.current:qt;return{accountData:{userId:r.resolvedAccount.userId??"",email:$,...Ce?{firstName:Ce}:{},...q?{lastName:q}:{},...We&&mn.current?{zip:mn.current}:{},...lt&&bt.current?{city:bt.current}:{},...Xr?{state:Xr}:{},...Xn&&ln.current?{addressLine1:ln.current}:{},...ht&&Kt.current?{addressLine2:Kt.current}:{},...ne?{country:ne}:{}},...r.avsCheckProp===void 0?{}:{avsCheck:r.avsCheckProp},...r.avsConfig?{avsConfig:{country:Wt(r.avsConfig.country,ne),postal_code:We,address_line_1:Xn,address_line_2:ht,city:lt,state:Mt}}:{}}},[]),Ms=V(ie);Ms.current=ie,yt(()=>{ie||tt!==dc||sr.current.updateError(null)},[ie,tt]),yt(()=>{!re||!Et||Et.setSubmitGate?.(fr||ie||io||u)},[re,Et,fr,ie,io,u]),yt(()=>{if(!re||!Et)return;fi.current=!1;let r=null,m=()=>{r&&clearTimeout(r),r=setTimeout(()=>{r=null,H.current="idle",W(null)},400)},$=Et.on("submitting",()=>{rr(!0),_.current&&clearTimeout(_.current),H.current="validation-window",_.current=setTimeout(()=>{_.current=null,H.current==="validation-window"&&(H.current="processing")},yp),W("processing");let We=sr.current;if(!We.sessionId||!We.nonce)return;let lt=Ts();if(!lt){We.updateError("Enter a valid email address."),H.current="idle",W(null);return}new Fo(We.baseUrl).patchAccountSnapshot(We.sessionId,We.nonce,lt,{telemetryMode:"best_effort"}).catch(ht=>{if(!fp(ht))return;let qt=ht instanceof Error?ht.message:"Please check your billing address and try again.";We.updateError(qt),H.current="idle",W(null),We.onError?.(ht instanceof Dr?ht:new Dr(qt,"api_error"))})}),Ce=Et.on("complete",We=>{To(We.sessionId??sr.current.sessionId),H.current="terminal",l(!1),W("success"),setTimeout(()=>{if(fi.current)return;fi.current=!0;let lt=sr.current,ht=Ji(lt)||We.outcome==="authorized",qt=lt.serverSideCardGateway?{}:{paymentIntentId:We.intentId};sr.current.onComplete?.(ht?{status:"authorized",...qt,paymentId:We.paymentId??lt.paymentId,sessionId:We.sessionId??lt.sessionId,authorizationExpiresAt:We.authorizationExpiresAt??lt.authorizationExpiresAt,checkoutMethod:"card"}:{status:"succeeded",...qt,checkoutMethod:"card"})},600)}),q=Et.on("decline",We=>{let lt=sr.current,ht=We.message??"Your payment was declined. Please try another card or contact your bank.";H.current="terminal",l(!1),lt.updateError(ht),W("error");let qt=We.failureOutcome??qu(We.declineReason)??"authorization_declined";lt.emitDecline("card",ht,{code:qt,declineCode:qt}),m()}),ne=Et.on("error",We=>{let lt=sr.current,ht=We.message??"There was a problem processing your payment. Please try again.";H.current="terminal",l(!1),lt.updateError(ht),W("error"),lt.onError?.(new Dr(ht,"api_error",{code:We.failureOutcome??"capture_failed"})),m()}),Mt=Et.on("challenge_dismissed",()=>{_.current&&(clearTimeout(_.current),_.current=null),H.current="processing",l(!0),W(null)}),Xn=Et.on("blocked",()=>{if(A.current){sr.current.updateError(mp);return}if(!Ms.current){rr(!0);return}mi(),sr.current.updateError(dc)});return()=>{r&&(clearTimeout(r),r=null),_.current&&(clearTimeout(_.current),_.current=null),H.current="idle",l(!1),W(null),$(),Ce(),q(),ne(),Mt(),Xn()}},[re,Et,mi,Ts]);let br=!!vt?.clientId,jo=Array.isArray(Z),Sa=jo&&Z.length>0,As=jo&&Z.includes("paypal"),wa=V(null);wa.current===null&&(wa.current=Ou());let uo=wa.current?"redirect":pl(p,Ke,b.current()),{expressMethods:ka,paymentElementMethods:gi}=St(()=>ju(Z,{excludePaypal:br}),[Z,br]),xs=br||!!Ft||As&&uo==="redirect",jc=St(()=>xs?ka.filter(r=>r!=="paypal"):ka,[ka,xs]),$c=St(()=>{let r=[];return Ze&&r.push("apple_pay"),Oe&&r.push("google_pay"),r},[Ze,Oe]),po=jo?jc:$c,Wc=I&&po.length>0,Bs=Bn?pt:z,Ia=St(()=>xu(gi,Bs,Fe),[gi,Bs,Fe]),hi=St(()=>({mode:"payment",amount:qo,currency:so,paymentMethodCreation:"manual",appearance:ks}),[qo,so,ks]),[Fs,Ds]=se("loading"),[Os,Ns]=se("loading"),[Ls,zs]=se("loading"),[Hc,Pi]=se(!1),[Us,vi]=se("loading"),[bi,Vc]=se();yt(()=>{Vc(ea())},[]);let Ra=bi?.inAppBrowser,Ea=bi?Da(bi,vt?.approvalPresentation,be??(ce?"subscription":"order")):"popup",qs=je&&(br||(jo?As:Ra===!1)),js=I&&Wc,$o=(!gt||!!Se.waitForDataAttachment)&&qs&&br,$s=Us==="retrying"||Us==="exhausted",Wo=null;I&&(Ft?Wo=ws:uo==="redirect"&&(Wo=Hn));let Ws=St(()=>({...G,presentationMode:uo}),[G,uo]),Ho=!gt&&qs&&!!Wo&&(!br||$s),yo=!gt&&js&&!!Hn,Vo=!gt&&I&&Sa&&Ia.length>0&&!!Hn,Kc=$o&&!$s?Hc:Ho&&Fi(Fs),Gc=yo&&Fi(Os),Yc=Vo&&Ls!=="load_error",Hs=r=>r==="loading"||r==="ready",Vs=$o||Ho&&Hs(Fs)||yo&&Hs(Os)||Vo&&Ls!=="load_error",_a=V(!1);yt(()=>{if(!_a.current){if(!I&&!je){_a.current=!0;let r=new Dr("FloPay: both `showStripe` and `showPayPal` are false \u2014 nothing to render.","validation_error");c?.(r),ge(r.message)}else if(!I&&je&&!br){_a.current=!0;let r=new Dr("FloPay: `showStripe` is false and no PayPal gateway is configured for this session \u2014 nothing to render.","validation_error");c?.(r),ge(r.message)}else if(Ra!==void 0&&!gt&&!kt&&!Vs){_a.current=!0;let r=new Dr("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"});c?.(r),ge(r.message)}}},[I,je,br,Ra,gt,kt,Vs,c,ge]);let Ks=V(!1);yt(()=>{if(Ks.current||!Sa)return;let r=[];Ze!==!0&&r.push("showApplePay"),Oe!==!0&&r.push("showGooglePay"),r.length!==0&&(Ks.current=!0,console.warn(`[FloPay] ${r.join(" / ")} ${r.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.`))},[Sa,Ze,Oe]);let Gs=Ve((r,m)=>Se.applyInlineSessionPatch?Se.applyInlineSessionPatch(r).then($=>({error:null,sessionId:$.sessionId||e,nonce:$.session?.clientSecret||t})).catch($=>{let Ce=ac(m,$);return ge(Ce.message),c?.(Ce),{error:Ce,sessionId:e,nonce:t}}):Promise.resolve({error:null,sessionId:e,nonce:t}),[Se.applyInlineSessionPatch,t,c,e,ge]),lr=Ve(async r=>{if(r!=="card"&>&&await Se.waitForDataAttachment?.(),!Pt)return{proceed:!0};try{let m=await Pt({method:r,sessionId:e||void 0,createSession:Se.inlineSessionDraft});if(m===!1)return{proceed:!1};if(m&&typeof m=="object"){m.account&&xn(Ce=>({...Ce??{},...m.account}));let $=await Gs(m,r);return $.error?{proceed:!1,accountPatch:m.account}:{proceed:!0,accountPatch:m.account,sessionId:$.sessionId,nonce:$.nonce}}return{proceed:!0}}catch(m){let $=ac(r,m);return ge($.message),c?.($),{proceed:!1}}},[Gs,Se.inlineSessionDraft,Se.waitForDataAttachment,gt,Pt,c,e,ge]),Ys=Ve(async(r,m)=>{if(k.current)return;k.current=!0,_n(!0),W("processing"),ge(null);let $=m?.sessionId??e,Ce=m?.nonce??t,q=Ni(J,m?.accountPatch),ne=m?.completionPaymentMethodId??oa(r),Mt=r.originalPaymentMethodId?{...r,originalPaymentMethodId:void 0}:r,Xn=vp(r),We=m?.presentationMode?Qa(un(Pe),{...G,presentationMode:m.presentationMode}):void 0,lt=()=>{wt?.({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:"process_payment",provider:Xn}),We?.error({errorCode:"PAYMENT_PROCESSING_FAILED",stage:"processing",...ur,requestCategory:"process_payment"})};try{let ht=new Fo(nn),qt=await ht.processPayment(q.userId??"",{sessionId:$,nonce:Ce,paymentMethodCategory:m?.paymentMethodCategory??Cp(r),tokenizedData:Mt,accountData:{...m?.accountPatch,userId:q.userId??"",email:q.email??"",firstName:q.firstName||void 0,lastName:q.lastName||void 0,...ku({avsConfig:ke,country:fn.current,zip:mn.current,city:bt.current,state:rn.current,addressLine1:ln.current,addressLine2:Kt.current})},...wu({chv:le,avsCheck:ft,checkoutType:he,checkoutLayout:Ue,avsConfig:ke,country:fn.current})}),Xr=async cn=>{let Qr=Ji(P)||cn?.status==="authorized";To($),We?.terminal({outcome:"payment_succeeded",...ur}),W("success"),Ie(null),await new Promise(Xo=>setTimeout(Xo,600));let Cr;typeof cn?.paymentId=="string"?Cr=cn.paymentId:P?.paymentId&&(Cr=P.paymentId);let eo;typeof cn?.authorizationExpiresAt=="string"?eo=cn.authorizationExpiresAt:P?.authorizationExpiresAt&&(eo=P.authorizationExpiresAt),s?.(Qr?{status:"authorized",...Cr===void 0?{}:{paymentId:Cr},sessionId:typeof cn?.sessionId=="string"?cn.sessionId:$,...eo===void 0?{}:{authorizationExpiresAt:eo},paymentIntentId:r.threeDSecureActionResultTokenId,paymentMethodId:ne,checkoutMethod:r.isPaypal?"paypal":"card"}:{status:"succeeded",paymentIntentId:r.threeDSecureActionResultTokenId,paymentMethodId:ne,checkoutMethod:r.isPaypal?"paypal":"card"})};if(qt.ok){await Xr(qt.status===204?null:await qt.json().catch(()=>null));return}let Vn=await qt.json().catch(()=>null);if(Vn?.type==="paypal_redirect_required"){let cn=Vn.threeDSecureToken,Qr=Vn.paymentMethodId||r.id||"";if(!Pe||!cn){W("error"),ge("PayPal authorization required but no token provided.");return}try{let Cr=Ft?.getRawProvider();if(!Cr){ge("PayPal is not available.");return}let eo={return_url:window.location.href};Qr&&(eo.payment_method=Qr);let{error:Xo}=await Cr.confirmPayment({clientSecret:cn,confirmParams:eo,redirect:"if_required"});if(Xo){W("error");let sl=Xo.message??"PayPal payment failed.";ge(sl),vr("paypal",sl,{code:Xo.code})}}catch(Cr){W("error"),ge(Cr instanceof Error?Cr.message:"PayPal authorization failed.")}return}if(Vn?.type==="paypal_direct_required"){let cn=Vn.orderId;if(!cn){W("error"),ge("PayPal retry required but no order id provided.");return}let Qr=qe.current?.attempts??0;if(Qr>=2){W("error"),ge("PayPal payment could not be completed after multiple attempts."),vr("paypal","paypal_direct_required retry limit exceeded");return}Pi(!1),vi("loading"),Ie({orderId:cn,attempts:Qr+1}),W(null);return}if(qt.headers.get(ip)===sp){let cn=await lp(ht,$,Ce);if(cn!==void 0){await Xr(cn);return}}Eu(qt.status,Vn)?We?.terminal({outcome:"payment_declined",...ur,terminalReason:"provider_declined"}):lt(),W("error");let il=Vn?.message??"Payment failed. Please try again.";ge(il),vr(r.isPaypal?"paypal":"card",il,{code:Vn?.code??Vn?.gatewayErrorCode,declineCode:Vn?.declineCode??Vn?.gatewayDeclineReason}),await new Promise(cn=>setTimeout(cn,400))}catch(ht){Ic(ht)||lt(),W("error"),ge(ht instanceof Error?ht.message:"An unexpected error occurred"),await new Promise(qt=>setTimeout(qt,400))}finally{_n(!1),W(null),k.current=!1}},[nn,e,t,J,ke,ft,he,Ue,le,Pe,Ft,P,s,ge,vr,wt,G]),On=Ve((r,m)=>{B?B(r):Ys(r,m)},[B,Ys]),Ko=`${wc}:${e}`;yt(()=>{if(typeof window>"u")return;let r=localStorage.getItem(Ko);if(!r)return;let m;try{m=JSON.parse(r)}catch{Zt(Ko);return}if(!m||typeof m.createdAt!="number"||Date.now()-m.createdAt<0||Date.now()-m.createdAt>kc||typeof m.paymentMethodId!="string"||typeof m.providerIntentId!="string"||typeof m.paymentMethodType!="string"||m.sessionId!==e||!t||m.nonce!==t||!po.includes(m.paymentMethodType)){Zt(Ko);return}Zt(Ko),On({id:m.paymentMethodId,type:"card",threeDSecureActionResultTokenId:m.providerIntentId,gateway:"stripe",paymentMethodType:m.paymentMethodType},{...m.accountPatch?{accountPatch:m.accountPatch}:{},paymentMethodCategory:"wallet",sessionId:e,nonce:t})},[On,t,e,Ko,po]);let Js=V(!1);yt(()=>{if(typeof window>"u"||Js.current)return;let[r,m,$]=Pc();if(!r||!m||wa.current||!Pe)return;let Ce=Pe.getRawProvider();if(!Ce)return;let q=lt=>{let ht=localStorage.getItem(lt);if(!ht)return null;try{return JSON.parse(ht)}catch{return Zt(lt),null}},ne=q(Ir)??q(sc),Mt;if(ne?.clientSecret){if(ne.clientSecret!==m)return;Mt={...ne.accountPatch?{accountPatch:ne.accountPatch}:{},...ne.sessionId?{sessionId:ne.sessionId}:{},...ne.nonce?{nonce:ne.nonce}:{}}}else if(ne?.sessionId&&ne.sessionId!==e)return;Js.current=!0,Zt(Ir),Zt(sc),window.history.replaceState({},"",bc());let Xn=ne?.paymentMethodType??ne?.tokenType??"card",We="card";(async()=>{if($==="failed"){let Ar="Payment was declined. Please try again.";ge(Ar),vr(We,Ar);return}let{paymentIntent:lt,error:ht}=await Ce.retrievePaymentIntent(m);if(ht){let Ar=ht.message??"Failed to retrieve payment status.";ge(Ar),vr(We,Ar,{code:ht.code});return}let qt=lt?.status,Xr=ra(qt);if(!lt||!Xr){let Ar=qt==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";ge(Ar),vr(We,Ar,{code:qt??"missing_payment_intent"});return}let Vn=typeof lt.payment_method=="string"?lt.payment_method:lt.payment_method?.id;On({id:Vn??ne?.paymentMethodId??ne?.tokenId??lt.id,type:"card",threeDSecureActionResultTokenId:lt.id,gateway:ne?.gateway??"stripe",paymentMethodType:Xn},Mt)})()},[e,On,Pe,ge,vr]);let Ci=Ve(r=>{r.preventDefault()},[]);if(!(re||Pe!==null))return d("div",{"data-testid":"flopay-loading","aria-busy":"true",children:"Loading payment form..."});let Go=Xe==="buttons",Nn=Y?.variables,Jc=new Set(["#FFFFFF","#ffffff","#fff","#FFF","white"]),Si=Nn?.colorBackground,Zc=Si&&!Jc.has(Si)?Si:void 0,Yo=h.cardInputBorder??(Go?"#e5e7eb":"#A4A4FF"),Zs=Nn?.colorDanger??"#dc2626",$t=r=>Yn[r]&&(Jn[r]||Gt),Ta=io&&(Rn||Gt),Zn=r=>r?Zs:Yo,Ma=(Un.malformed||Un.empty)&&(Er||Gt),Xc=Zn(Ma),wi=h.cardFormContainer?.backgroundColor??Zc??(Go?"white":"#EDEDFF"),mo=h.cardInputBackground??Nn?.colorBackground??"white",ki=Po(Qe),Xs=Po(we),fo=h.nameInput,Qs=h.cardInputFontSize??Ip(fo?.fontSize)??Nn?.fontSizeBase??"16px",el=typeof fo?.fontFamily=="string"?fo.fontFamily:Nn?.fontFamily??"Poppins, sans-serif",tl=Zu(fo?.fontWeight)??400,Qc=h.cardInputColor??(typeof fo?.color=="string"?fo.color:void 0)??Nn?.colorText??"#262833",ed=h.cardInputPlaceholderColor??"#9ca3af",Jt=Nn?.borderRadius??"8px",Jr=Nn?.borderRadius??h.cardButton?.borderRadius??Jt,Zr=Nn?.colorPrimary??"#4A49FF",td=Nn?.colorPrimaryHover??Mu(Zr,.12),Ii=Nn?.colorText??"#262833",Ri={fontSize:Qs,fontFamily:el,fontWeight:tl,color:Qc,WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},Jo={marginTop:"0.375rem",...Ri,fontSize:"0.75rem",lineHeight:1.4,color:Zs},nd={"--flopay-input-placeholder-color":ed,"--flopay-input-font-size":Qs,"--flopay-input-font-family":el,"--flopay-input-font-weight":String(tl)},Zo=h.cardFormContainer??{},Ei=Zo.padding??(Go?"0":"1rem"),_i=Zo.borderRadius??Jt,rd=Et&&Fn?d(Ti,{capture:Et,html:Fn.html,messageToken:Fn.messageToken,expectedOrigin:Fn.expectedOrigin,verificationRequired:Fn.verificationRequired,theme:Ee,submitLabel:Ae,onReady:()=>{if(!zr&&!ke||typeof document>"u")return;let r=()=>{let $=(document.querySelector('[data-testid="flopay-vault-identity-fields"]')??document.querySelector('[data-testid="flopay-avs-fields"]'))?.querySelector("input:not([disabled]), select:not([disabled])");if($){qn.current=!0;try{$.focus()}finally{qn.current=!1}}};hr.current||r()},onError:r=>{r&&Fn.verificationRequired&&H.current==="idle"&&(Pr.current=!0),ge(r)},onValidation:r=>{let m=H.current;(m==="idle"||m==="validation-window")&&(ge(r),r&&H.current==="validation-window"&&(_.current&&(clearTimeout(_.current),_.current=null),H.current="idle",W(null)))}},Cn):d("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"}),nl=He("div",{onFocusCapture:r=>{["INPUT","SELECT","TEXTAREA","IFRAME"].includes(r.target.tagName)&&Tr()},style:{backgroundColor:wi,borderRadius:_i,...Zo,padding:Ei,...nd,display:"flex",flexDirection:"column"},children:[d("style",{children:`
|
|
5
5
|
.flopay-shared-input::placeholder {
|
|
6
6
|
color: var(--flopay-input-placeholder-color);
|
|
7
7
|
opacity: 1;
|
|
@@ -9,13 +9,13 @@ ${wt.join(`
|
|
|
9
9
|
font-family: var(--flopay-input-font-family);
|
|
10
10
|
font-weight: var(--flopay-input-font-weight);
|
|
11
11
|
}
|
|
12
|
-
`}),
|
|
13
|
-
`)}):null,
|
|
14
|
-
`)}):null,ol=nt==="apm-expanding"||nt==="apm-form"||nt==="apm-collapsing",fo;nt==="apm-expanding"?fo=dc:nt==="apm-collapsing"&&(fo=uc);let Aa=un?Rc(gi,un,_):null;if(Be==="buttons"){let r=nt==="buttons"||nt==="expanding"||nt==="apm-expanding",g=nt==="expanding"||nt==="card"||nt==="collapsing",q=bt===void 0?{boxSizing:"border-box",height:ea,padding:"0 1rem"}:{padding:"0.9rem 1rem"},ge;nt==="expanding"||nt==="apm-expanding"?ge=gp:(nt==="collapsing"||nt==="apm-collapsing")&&(ge=fp);let D;return nt==="expanding"?D=dc:nt==="collapsing"&&(D=uc),Ke("form",{onSubmit:bi,className:ie,noValidate:!0,style:{position:"relative"},children:[d(Da,{}),ye&&d(Sr,{status:ye,errorMessage:at,authorized:Mn}),Ke("div",{style:{display:"grid"},children:[Ke("div",{"data-testid":"flopay-buttons-panel","aria-hidden":!r&&!ge?!0:void 0,style:{gridArea:"1 / 1",display:"flex",flexDirection:"column",gap:"0.5rem",...!r&&!ge?Pp:{},...ge?{animation:ge,pointerEvents:"none"}:{}},children:[nl("flopay-direct-paypal-gate-debug"),rl("flopay-stripe-gate-debug"),jo&&ot&&Ke(Fo,{children:[pe&&d("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."}),d(ia.Provider,{value:m,children:d($a,{sessionId:e,nonce:t,billingApiUrl:ct,email:Qe.email,billingName:oo||void 0,onBuyerIdentityReady:Oe,clientId:ot.clientId,environment:ot.environment,currency:Ct.toUpperCase(),isSubscription:Lt,providerObjectType:F,approvalPresentation:Ra==="popup"?void 0:Ra,onTokenizedBody:Fn,onComplete:s,onErrorChange:me,onDecline:f,onTechnicalFailure:lo,onButtonClick:ee,runBeforeButtonClick:ir,isProcessing:xe,onLoadStateChange:hi,onInitializationStateChange:Pi,session:re,existingOrderId:pe?.orderId,debug:M},pe?.orderId??"fresh")})]}),Wo&&d(no,{stripe:$o,options:Is,children:d(yc,{sessionId:e,nonce:t,email:Qe.email,billingName:oo||void 0,onBuyerIdentityReady:Oe,billingApiUrl:ct,onTokenizedBody:Fn,onErrorChange:me,isProcessing:xe,onButtonClick:ee,onDecline:f,onTechnicalFailure:lo,runBeforeButtonClick:ir,onLoadStateChange:Fs,placeholderBorderRadius:Gr,popupCapabilityOwner:m,externalTelemetryContext:$s,presentationMode:co})}),po?d(no,{stripe:Un,options:ks,children:d(fc,{sessionId:e,nonce:t,email:Qe.email,billingName:oo||void 0,onBuyerIdentityReady:Oe,billingApiUrl:ct,intentKind:be>0?"payment":"setup",expressMethods:uo,onTokenizedBody:Fn,onErrorChange:me,onButtonClick:ee,onDecline:f,onTechnicalFailure:lo,runBeforeButtonClick:ir,onLoadStateChange:Os,placeholderBorderRadius:Gr,popupCapabilityOwner:m,externalTelemetryContext:y})}):null,!po&&qs?d("div",{style:{height:ea,borderRadius:Gr,background:"#e5e7eb",animation:"flopay-pulse 1.5s ease-in-out infinite"}}):null,Ho&&d(gc,{sessionId:e,nonce:t,email:Qe.email,billingName:[Qe.firstName,Qe.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:Oe,billingApiUrl:ct,paymentElementMethods:ka,stripeInstance:Un,paymentElementBaseOptions:gi,futureUseSession:_,onTokenizedBody:Fn,onErrorChange:me,onButtonClick:ee,onDecline:f,runBeforeButtonClick:ir,onLoadStateChange:Ls,isProcessing:xe,submitButtonColor:Yr,submitButtonBorderRadius:Qt,submitButtonStyle:S.submitButton,onExpandApm:ut,expandedApmMethod:un,themeId:mt,buttonAppearance:{backgroundColor:S.cardButton?.backgroundColor,borderColor:S.cardInputBorder,textColor:S.cardButton?.color,borderRadius:Gr}}),p&&d("button",{type:"button",onClick:async()=>{xe||!(await ir("card")).proceed||(ee?.("card"),H())},disabled:xe,style:{width:"100%",...q,...S.cardButton,...cs({themeBundle:Z,resolvedPrimaryColor:Yr,resolvedBorderRadius:Qt,submitButtonStyle:S.submitButton,explicitPrimaryColor:Dn?.colorPrimary}),fontSize:S.cardButtonFontSize??"0.95rem",fontWeight:600,cursor:xe?"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:xe?.6:1},onMouseEnter:Q=>{!xe&&(Z||Dn?.colorPrimary)&&(Q.currentTarget.style.backgroundColor=ed)},onMouseLeave:Q=>{(Z||Dn?.colorPrimary)&&(Q.currentTarget.style.backgroundColor=Yr)},onMouseDown:Q=>{Q.currentTarget.style.transform="scale(0.985)"},onMouseUp:Q=>{Q.currentTarget.style.transform="scale(1)"},children:d(Po,{content:bt})}),at&&nt==="buttons"&&d(Eo,{margin:"0.25rem 0",styleOverride:S.errorBanner,children:at})]}),p&&g&&d("div",{style:{gridArea:"1 / 1",...D?{animation:D}:{},...nt==="collapsing"?{pointerEvents:"none"}:{}},children:tl}),ve&&ol&&un&&Aa&&Un&&d("div",{style:{gridArea:"1 / 1",...fo?{animation:fo}:{},...nt==="apm-collapsing"?{pointerEvents:"none"}:{}},children:Ke("div",{style:{backgroundColor:Si,borderRadius:Ei,...Jo,padding:Ri},children:[Ke("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[Ke("button",{type:"button","data-testid":"flopay-apm-back-button",onClick:Vt,style:{display:"inline-flex",alignItems:"center",gap:wi?0:"0.5rem",background:"none",border:"none",cursor:"pointer",color:"#4b5563",fontSize:S.backButtonFontSize??"0.85rem",fontWeight:500,padding:0,transition:"color 0.15s",flexShrink:0,...S.backButton},"aria-label":"Back to payment methods",children:[d("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",transition:"background-color 0.15s",...S.backButtonIcon},children:d("svg",{"aria-hidden":"true",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:d("path",{d:"M15 18l-6-6 6-6"})})}),d(vo,{content:Te})]}),d("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:S.titleFontSize??"1.05rem",color:ki,paddingRight:80,...S.title},children:`Pay with ${fa(un)}`})]}),d(no,{stripe:Un,options:Aa,children:d(os,{method:un,sessionId:e,nonce:t,email:Qe.email,billingName:[Qe.firstName,Qe.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:Oe,billingApiUrl:ct,onTokenizedBody:Fn,onErrorChange:me,onDecline:f,onCancel:Vt,runBeforeButtonClick:ir,onButtonClick:ee,isProcessing:xe,submitButtonColor:Yr,submitButtonBorderRadius:Qt,submitButtonStyle:S.submitButton,errorText:at})},un)]})})]})]})}return ol&&un&&Aa&&Un&&ve?Ke("form",{onSubmit:bi,className:ie,noValidate:!0,style:{position:"relative"},children:[d(Da,{}),ye&&d(Sr,{status:ye,errorMessage:at,authorized:Mn}),d("div",{style:{...fo?{animation:fo}:{},...nt==="apm-collapsing"?{pointerEvents:"none"}:{}},children:Ke("div",{style:{backgroundColor:Si,borderRadius:Ei,...Jo,padding:Ri},children:[Ke("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[Ke("button",{type:"button","data-testid":"flopay-apm-back-button-default",onClick:Vt,style:{display:"inline-flex",alignItems:"center",gap:wi?0:"0.5rem",background:"none",border:"none",cursor:"pointer",color:"#4b5563",fontSize:S.backButtonFontSize??"0.85rem",fontWeight:500,padding:0,transition:"color 0.15s",flexShrink:0,...S.backButton},"aria-label":"Back to payment methods",children:[d("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",transition:"background-color 0.15s",...S.backButtonIcon},children:d("svg",{"aria-hidden":"true",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:d("path",{d:"M15 18l-6-6 6-6"})})}),d(vo,{content:Te})]}),d("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:S.titleFontSize??"1.05rem",color:ki,paddingRight:80,...S.title},children:`Pay with ${fa(un)}`})]}),d(no,{stripe:Un,options:Aa,children:d(os,{method:un,sessionId:e,nonce:t,email:Qe.email,billingName:[Qe.firstName,Qe.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:Oe,billingApiUrl:ct,onTokenizedBody:Fn,onErrorChange:me,onDecline:f,onCancel:Vt,runBeforeButtonClick:ir,onButtonClick:ee,isProcessing:xe,submitButtonColor:Yr,submitButtonBorderRadius:Qt,submitButtonStyle:S.submitButton,errorText:at})},un)]})})]}):Ke("form",{onSubmit:bi,className:ie,noValidate:!0,style:{position:"relative"},children:[d(Da,{}),ye&&d(Sr,{status:ye,errorMessage:at,authorized:Mn}),Ke("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[nl("flopay-direct-paypal-gate-debug-default"),rl("flopay-stripe-gate-debug-default"),jo&&ot&&Ke(Fo,{children:[pe&&d("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."}),d(ia.Provider,{value:m,children:d($a,{sessionId:e,nonce:t,billingApiUrl:ct,email:Qe.email,billingName:oo||void 0,onBuyerIdentityReady:Oe,clientId:ot.clientId,environment:ot.environment,currency:Ct.toUpperCase(),isSubscription:Lt,providerObjectType:F,approvalPresentation:Ra==="popup"?void 0:Ra,onTokenizedBody:Fn,onComplete:s,onErrorChange:me,onDecline:f,onTechnicalFailure:lo,onButtonClick:ee,runBeforeButtonClick:ir,isProcessing:xe,onLoadStateChange:hi,onInitializationStateChange:Pi,session:re,existingOrderId:pe?.orderId,debug:M},pe?.orderId??"fresh")})]}),Wo&&d(no,{stripe:$o,options:Is,children:d(yc,{sessionId:e,nonce:t,email:Qe.email,billingName:oo||void 0,onBuyerIdentityReady:Oe,billingApiUrl:ct,onTokenizedBody:Fn,onErrorChange:me,isProcessing:xe,onButtonClick:ee,onDecline:f,onTechnicalFailure:lo,runBeforeButtonClick:ir,onLoadStateChange:Fs,placeholderBorderRadius:Gr,popupCapabilityOwner:m,externalTelemetryContext:$s,presentationMode:co})}),po&&d(no,{stripe:Un,options:ks,children:d(fc,{sessionId:e,nonce:t,email:Qe.email,billingName:oo||void 0,onBuyerIdentityReady:Oe,billingApiUrl:ct,intentKind:be>0?"payment":"setup",expressMethods:uo,onTokenizedBody:Fn,onErrorChange:me,onButtonClick:ee,onDecline:f,onTechnicalFailure:lo,runBeforeButtonClick:ir,onLoadStateChange:Os,placeholderBorderRadius:Gr,popupCapabilityOwner:m,externalTelemetryContext:y})}),Ho&&d(gc,{sessionId:e,nonce:t,email:Qe.email,billingName:[Qe.firstName,Qe.lastName].filter(Boolean).join(" ").trim()||void 0,billingApiUrl:ct,paymentElementMethods:ka,stripeInstance:Un,paymentElementBaseOptions:gi,futureUseSession:_,onTokenizedBody:Fn,onErrorChange:me,onButtonClick:ee,onDecline:f,runBeforeButtonClick:ir,onLoadStateChange:Ls,isProcessing:xe,submitButtonColor:Yr,submitButtonBorderRadius:Qt,submitButtonStyle:S.submitButton,themeId:mt,onExpandApm:ut,expandedApmMethod:un,buttonAppearance:{backgroundColor:S.cardButton?.backgroundColor,borderColor:S.cardInputBorder,textColor:S.cardButton?.color,borderRadius:Gr}})]}),p&&(Kc||Vc||Gc)&&d(sl,{label:"or pay with card"}),p&&tl]})}import{Fragment as Rr,jsx as le,jsxs as sn}from"react/jsx-runtime";var Oo=44,hs="flopay_checkout_saved_payment_resume",si=new Map,ai=new Map;function Tc(e,t){t.settled&&t.consumers===0&&si.get(e)===t&&si.delete(e)}function Op(e,t,n){let o=ai.get(e);if(o&&(!o.sdkGeneratedIdempotencyKey||!t||o.sdkGeneratedIdempotencyKey===t))return o.attempt;let a=n(),i={attempt:a,sdkGeneratedIdempotencyKey:t};ai.set(e,i);let s=()=>{ai.get(e)===i&&ai.delete(e)};return a.then(s,s),a}function ha(e){return new Promise(t=>setTimeout(t,e))}function ii(e,t,n){let o=qa({billingApiUrl:e,sdkPackage:"@flopay/react",sdkVersion:Lc,enabled:t!==!1});return o.beginCheckout(n),o}function Pa(e){e.flush().catch(()=>{}).finally(()=>e.destroy())}function ps(e,t,n,o,a,i){let s=ii(e,t,n);s.error({errorCode:o,stage:a,paymentMethodCategory:"unknown",...i,...a==="session_read"?{requestCategory:"session_read"}:{}}),Pa(s)}function Mc(e,t,n,o){e.log({name:t==="session_claim"?"session.claim.completed":"session.request.completed",stage:t,requestCategory:t,statusClass:"2xx"}),e.performance({stage:t,durationMs:Math.max(0,e.now()-n),durationMode:"machine",requestCategory:t,...o===void 0?{}:{attempt:o},statusClass:"2xx"})}function Ac(e,t,n,o,a){let i=Dc(t,"CHECKOUT_SESSION_CREATE_FAILED","unknown");return e.performance({stage:n,durationMs:Math.max(0,e.now()-o),durationMode:"machine",requestCategory:n,attempt:a,statusClass:i.statusClass}),t instanceof Sn&&t.code==="session_auto_completed"?!1:t instanceof Sn&&t.type==="validation_error"?(e.terminal({outcome:"validation_rejected",stage:n,paymentMethodCategory:"unknown"}),!1):i.statusClass==="4xx"?(e.terminal({outcome:"validation_rejected",stage:n,paymentMethodCategory:"unknown",requestCategory:n,statusClass:"4xx"}),!1):(e.error({...i,stage:n,paymentMethodCategory:"unknown",requestCategory:n}),!0)}function ys(e){return!e||e.data.stripe?.publishableKey?!1:!!Oc(e.data.paypal)?.clientId}var Np={name:"provider_unavailable",initialize:()=>Promise.resolve(),getRawProvider:()=>null,destroy:()=>{}};function Lp(e){return new Ep(Np,{publishableKey:"provider_unavailable",...e})}async function ms(e,t){let{publishableKey:n,paypalPublishableKey:o}=Vi(e);return{...await Ki({publishableKey:n,paypalPublishableKey:o,...t}),publishableKey:n,paypalPublishableKey:o}}function Ps(){return typeof window<"u"&&typeof window.sessionStorage<"u"}function zp(){if(!Ps())return null;try{let e=window.sessionStorage.getItem(hs);return e?JSON.parse(e):null}catch{return null}}function xc(e){if(Ps())try{window.sessionStorage.setItem(hs,JSON.stringify(e))}catch(t){console.warn("[FloPayCheckout] Failed to persist PayPal resume state.",t)}}function fs(){if(Ps())try{window.sessionStorage.removeItem(hs)}catch(e){console.warn("[FloPayCheckout] Failed to clear PayPal resume state.",e)}}function Up(){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 o of t)e.searchParams.has(o)&&(e.searchParams.delete(o),n=!0);n&&window.history.replaceState(window.history.state,"",e.toString())}function Bc(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 gs(e,t){return Fp(!!e,t)}function qp(e,t){return e?"unknown":t==="buttons"?"buttons":"embedded"}function Fc(e){return e?.gateways?.stripe?"stripe":e?.gateways?.paypal?"paypal":void 0}function jp(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 vs({sessionId:e,nonce:t,createSession:n,billingApiUrl:o,telemetry:a,appearance:i,locale:s,loading:c,error:f,onComplete:C,onError:T,onInstrument:I,onDecline:z,onCountryChange:ie,onZipChange:O,showPayPal:Se=!0,showStripe:G=!0,walletPresentation:v="auto",enabledPaymentMethods:P,showApplePay:ve=!0,showGooglePay:N=!0,debug:_e=!1,layout:Y,theme:Ne,buttonsTheme:yt,buttonsStyles:Be,cardButtonContent:mt,cardBackButtonContent:Nt,cardTitleContent:fe,showSecurityFooter:Fe,onButtonClick:bt,onBeforeButtonClick:Te,enableAVS:qe,cardFieldOrder:Re,cardPreFormSlot:ee,avsLayout:je,submitLabel:lt,className:It,initialErrorMessage:rt=null,initialPayPalOrderId:ce,children:X,checkoutMode:L,confirmLabel:he,renderConfirmButton:$e,onSessionCompleted:Me}){let A=xp(o),Ye=Zn(()=>Nc(Ne),[Ne]),Je=i??Ye?.appearance,Ze=n?"embedded_checkout":"standard_checkout",We=gs(X,Y),[ze,De]=Jt(null),[be,Ct]=Jt(null),Zt=At(null),ot=At(null),Lt=At(0),[E,ne]=Jt(null),Ue=At(null),[M,se]=Jt(null),Xe=Zn(()=>n?ca(n):"",[n]),we=n?`create:${Xe}`:`session:${e??""}`,ht=Fc(M),Xt=At(new Set),m=At(we),w=At(we);Xo(()=>{w.current=we,m.current!==we&&(m.current=we,Xt.current.clear())},[we]);let Ee=Cn(k=>{if(w.current===we){if(Nl.has(k.name)){if(Xt.current.has(k.name))return;Xt.current.add(k.name)}Dt(()=>I?.(k))}},[we,I]),de=Ro(Ee,we),y=At(!1),re=Cn(k=>{if(y.current)return;let b=k.gateway||!ht?k:{...k,gateway:ht};Ee(b)},[Ee,ht]);dr(()=>{de({class:"lifecycle",name:"checkout.mount"})},[de]);let[_,F]=Jt(e??""),j=e??_,et=n?"":j,[St,wt]=Jt(!0),[ct,$]=Jt(null),[wn,On]=Jt(0),[fn,zt]=Jt("full"),[Ut,Tn]=Jt(!1),[vn,xt]=Jt(rt),[jn,qt]=Jt(null),[ur,jt]=Jt(null),[$n,Ae]=Jt(!1),[Le,Bt]=Jt(void 0),[kn,In]=Jt(""),[Rn,gn]=Jt(!1),[bn,ln]=Jt(!1),[on,$t]=Jt(!1),Rt=At(null),cn=At(0),dn=At(void 0),[ue,Xn]=Jt("loading"),[Mn,pr]=Jt(0),tn=At(!1),hn=At(!1),yr=At(!1),Wn=At(null),Wt=At(null),p=Zn(()=>({checkoutMode:L??fn,layout:qp(X,Y)}),[L,X,fn,Y]),dt=At(C);dt.current=C;let W=At(T);W.current=T;let oe=At(z);oe.current=z;let Pt=Cn(k=>Ga(Wn,async b=>{try{return await k(b)}catch(H){throw b.aborted?To(H):H}}),[]);dr(()=>()=>{Wn.current?.abort(),Wn.current=null},[]);let tt=Cn((k,b)=>{Zt.current=k,Ct(k),Ue.current=b,ne(b)},[]),kt=Cn(()=>{let k=ot.current;k&&(ot.current=null,k.destroy())},[]);dr(()=>{mn(be)?.setCheckoutContext(p),E&&E!==be&&mn(E)?.setCheckoutContext(p)},[be,E,p]);let ke=At(Me);ke.current=Me;let An=Cn(k=>{Xn(k),!(k!=="exhausted"||yr.current)&&(yr.current=!0,W.current?.(new Sn("PayPal is temporarily unavailable. Please try again.","api_error",{code:"paypal_init_timeout"})))},[]),Dr=Cn(()=>{Xn("retrying"),pr(k=>k+1)},[]);dr(()=>{Xn("loading"),pr(0),yr.current=!1},[j]),dr(()=>{console.info("[FloPay] Checkout initialized",{sdk_version:Lc,checkout_type:Ze,checkout_layout:We,billing_api_url:A})},[We,Ze,A]);let _t=Zn(()=>n?ca(n,!0):"",[n]),Nn=Zn(()=>kn===_t?Le:void 0,[Le,kn,_t]),Qn=Zn(()=>n?Di(n,Nn):void 0,[n,Nn]),er=L??Qn?.checkoutMode??"full",Ht=Zn(()=>Qn?{...Qn,checkoutMode:er}:void 0,[Qn,er]);dr(()=>{Bt(void 0),In(_t),dn.current=void 0,Rt.current=null,$t(!1)},[_t]),dr(()=>{xt(rt)},[rt]);let mr=Cn((k,b,H)=>{Dt(()=>{oe.current?.(yn(k,b,H))})},[]),fr=Cn(async(k,b)=>{xt(null),jt(null),Ae(!1),qt("processing");let H=b?.sessionId??k.id,J=k.clientSecret||t,ut=Fc(k),Vt=Zt.current??Ue.current,ye=mn(Vt),x=Vt?null:ii(A,a,p),B={log:te=>{ye?ye.log(te):x?.log(te)},error:te=>{ye?ye.error(te):x?.error(te)},terminal:te=>{ye?ye.terminal(te):x?.terminal(te)},performance:te=>{ye?ye.performance(te):x?.performance(te)},now:()=>ye?.now()??x?.now()??0,elapsed:te=>ye?.elapsed(te)??Math.max(0,(x?.now()??te)-te)},R=B.now(),l=!!(b?.initialAutoProcessingError||b?.initialAutoProcessingPending),u=!1,h,V=()=>{u||(u=!0,l=!0,h=B.now(),B.log({name:"checkout.recovery.started",stage:"recovery",paymentMethodCategory:"saved"}),B.log({name:"operation.recovery.started",stage:"recovery",paymentMethodCategory:"saved"}))},pe=!1,Ce=()=>{pe||(pe=!0,B.log({name:"payment.processing.completed",stage:"processing",paymentMethodCategory:"saved"}),B.performance({stage:"processing",durationMs:B.elapsed(R),durationMode:"machine",paymentMethodCategory:"saved",requestCategory:"process_payment"}),h!==void 0&&B.performance({stage:"recovery",durationMs:B.elapsed(h),durationMode:"machine",paymentMethodCategory:"saved"}))};B.log({name:"payment.method.selected",stage:"processing",paymentMethodCategory:"saved"}),y.current=!0;try{B.log({name:"payment.processing.started",stage:"processing",paymentMethodCategory:"saved"})}finally{y.current=!1}de({class:"lifecycle",name:"payment.processing.started",provider:ut}),l&&V();let Kt;try{let te=ec(b?.initialAutoProcessingError),Ie=b?.initialAutoProcessingError?.type==="3ds_required"&&!b.initialAutoProcessingError.threeDSecureToken&&b.initialAutoProcessingError.nextActionRedirectUrl?{type:"next_action_required",nextActionRedirectUrl:b.initialAutoProcessingError.nextActionRedirectUrl}:null,Oe,at=Z=>(V(),Pt(S=>Mo(Z,{billingApiUrl:A,sessionId:H,nonce:J,session:k,signal:S})));if(Ie)Oe=await at(Ie);else if(te)V(),te.type==="paypal_redirect_required"&&Wt.current?.publishableKey&&xc({sessionId:H,publishableKey:Wt.current.publishableKey,paypalPublishableKey:Wt.current.paypalPublishableKey}),Oe=await Pt(Z=>Za(te,{flopay:Zt.current,paypalFlopay:Ue.current,attempt3DS:b?.attempt3DS,billingApiUrl:A,sessionId:H,session:k,telemetry:!1,signal:Z})),te.type==="paypal_redirect_required"&&fs();else if(b?.initialAutoProcessingPending){let Z=b.initialAutoProcessingPending,S=new oi(A,{telemetry:!1}),U=await Pt(xe=>S.waitForCheckoutSessionCompletion(Z.sessionId,{initialDelayMs:Z.retryAfterMs,nonce:J,statusUrl:Z.statusUrl,signal:xe})),He=qr(U,k),Pe=U.autoProcessingError?.type==="3ds_required"&&U.autoProcessingError.nextActionRedirectUrl?{type:"next_action_required",nextActionRedirectUrl:U.autoProcessingError.nextActionRedirectUrl}:null;if(Pe)Oe=await at(Pe);else{if(!Ar(He))throw So(He);Oe=Mr(He,H)}}else{if(b?.initialAutoProcessingError)throw kr(b.initialAutoProcessingError,"Automatic payment failed. Please try again.",{checkoutMethod:b.initialAutoProcessingError.checkoutMethod});if(b?.fromCreateSession)return b?.fallbackToFull&&(zt("full"),Bc("full")),!1;{let Z=await Ao({billingApiUrl:A,sessionId:H,session:k,nonce:J,telemetry:!1});Z.type==="success"?Oe=Z.result:Z.type==="next_action_required"?Oe=await at(Z):(V(),Z.type==="paypal_redirect_required"&&Wt.current?.publishableKey&&xc({sessionId:H,publishableKey:Wt.current.publishableKey,paypalPublishableKey:Wt.current.paypalPublishableKey}),Oe=await Pt(S=>Za(Z,{flopay:Zt.current,paypalFlopay:Ue.current,attempt3DS:b?.attempt3DS,billingApiUrl:A,sessionId:H,session:k,telemetry:!1,signal:S})),Z.type==="paypal_redirect_required"&&fs())}}H&&_o(H),Ce(),l&&(B.log({name:"checkout.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"}),B.log({name:"operation.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"})),B.terminal({outcome:Oe.status==="authorized"?"payment_authorized":"payment_succeeded",paymentMethodCategory:"saved"}),Ae(Oe.status==="authorized"),qt("success"),await ha(600),Kt=()=>dt.current?.(Oe)}catch(te){let Ie=Ur(pa(te),H);if(Ie.code==="three_ds_aborted")return!1;let Oe=Ie.checkoutMethod??ua;xt(Ie.message),jt(Ie.message),Ae(!1),b?.fallbackToFull&&(B.log({name:"operation.fallback",stage:"recovery",paymentMethodCategory:"saved"}),zt("full"),Bc("full")),Ce();let at=Ie.statusCode===void 0?void 0:Dp(Ie.statusCode,"unknown"),Z=at==="4xx"?{requestCategory:"process_payment",statusClass:at}:{},S=at===void 0||at==="4xx";if(S&&(Ie.telemetryOutcome==="payment_declined"||!!(Ie.declineCode||Ie.code?.toLowerCase().includes("declin"))))B.terminal({outcome:"payment_declined",paymentMethodCategory:"saved",...Z});else if(S&&(Ie.telemetryOutcome==="validation_rejected"||Ie.type==="validation_error"))B.terminal({outcome:"validation_rejected",paymentMethodCategory:"saved",...Z});else{let Pe=Dc(te,l?"RECOVERY_FAILED":"PAYMENT_PROCESSING_FAILED","unknown"),xe=Ie.telemetryRequestCategory??"process_payment";y.current=!0;try{B.error({...Pe,...Ie.telemetryFailureCategory?{failureCategory:Ie.telemetryFailureCategory}:{},stage:l?"recovery":"processing",paymentMethodCategory:"saved",requestCategory:xe})}finally{y.current=!1}de({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:xe,provider:ut})}return Dt(()=>W.current?.(Ie)),mr(Oe,Ie,{code:Ie.code,declineCode:Ie.declineCode}),qt("error"),await Promise.allSettled([ha(400),b?.ensureProvidersReady?b.ensureProvidersReady():Promise.resolve()]),l&&(B.log({name:"checkout.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"}),B.log({name:"operation.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"})),!1}finally{Ce(),x&&Pa(x),qt(null),jt(null)}return Dt(Kt),!0},[mr,de,t,A,Pt,a,p]);dr(()=>{if(typeof window>"u"||hn.current)return;let k=new URLSearchParams(window.location.search),b=k.get("payment_intent_client_secret");if(!b)return;let H=zp();H&&(hn.current=!0,(async()=>{let J,ut=0;xt(null),jt(null),qt("processing"),Tn(!0);try{if(k.get("redirect_status")==="failed")throw Object.assign(new Sn("PayPal payment was declined. Please try again.","api_error",{declineCode:"paypal_redirect_failed"}),{checkoutMethod:"paypal"});let{flopay:Vt,paypalFlopay:ye}=await Ki({publishableKey:H.publishableKey,paypalPublishableKey:H.paypalPublishableKey,billingApiUrl:A,locale:s,telemetry:a});J=mn(ye??Vt),J?.setCheckoutContext(p),ut=J?.now()??0,J?.log({name:"provider.redirect.resumed",stage:"redirect_resume",provider:"paypal",paymentMethodCategory:"paypal"}),J?.log({name:"operation.recovery.started",stage:"recovery",provider:"paypal",paymentMethodCategory:"paypal"});let x=(ye??Vt)?.getRawProvider();if(!x)throw Object.assign(new Sn("PayPal is not available.","api_error"),{checkoutMethod:"paypal"});let{paymentIntent:B,error:R}=await x.retrievePaymentIntent(b);if(R)throw Object.assign(new Sn(R.message??"Failed to retrieve PayPal payment status.","api_error",{code:R.code}),{checkoutMethod:"paypal"});let l=El(B?.status);if(!B||l==="failed")throw Object.assign(new Sn("PayPal payment was not completed. Please try again.","api_error"),{checkoutMethod:"paypal"});let u=typeof B.payment_method=="string"?B.payment_method:B.payment_method?.id,h=l;if(H.sessionId){let Ce=(await new oi(A,{telemetry:!1}).getUnifiedCheckoutSession(H.sessionId)).data.session;if(Ce&&Ce.status!=="complete"){let Kt=await Ao({billingApiUrl:A,sessionId:H.sessionId,session:Ce,telemetry:!1,tokenizedData:{id:u??B.id,type:"card",threeDSecureActionResultTokenId:B.id,isPaypal:!0}});if(Kt.type!=="success")throw Object.assign(new Sn("Failed to finalize PayPal payment.","api_error"),{checkoutMethod:"paypal"});h=Kt.result.status}}H.sessionId&&_o(H.sessionId),J?.log({name:"operation.recovery.completed",stage:"recovery",provider:"paypal",paymentMethodCategory:"paypal"}),J?.performance({stage:"redirect_resume",durationMs:J.elapsed(ut),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"}),J?.terminal({outcome:"payment_succeeded",provider:"paypal",paymentMethodCategory:"paypal"}),qt("success"),await ha(600),Dt(()=>dt.current?.({status:h,paymentIntentId:B.id,paymentMethodId:u,checkoutMethod:"paypal"}))}catch(Vt){let ye=Ur(pa(Vt),H.sessionId),x=ye.checkoutMethod??"paypal",B=!!(ye.declineCode||ye.code?.toLowerCase().includes("declin"));if(J)J.performance({stage:"redirect_resume",durationMs:J.elapsed(ut),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"}),B?J.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal"}):J.error({errorCode:"REDIRECT_RESUME_FAILED",stage:"redirect_resume",provider:"paypal",paymentMethodCategory:"paypal"});else if(B){let R=ii(A,a,p);R.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal"}),Pa(R)}else ps(A,a,p,"REDIRECT_RESUME_FAILED","redirect_resume");xt(ye.message),jt(ye.message),Dt(()=>W.current?.(ye)),mr(x,ye,{code:ye.code,declineCode:ye.declineCode}),qt("error"),await ha(400)}finally{fs(),Up(),qt(null),jt(null),Tn(!1)}})())},[mr,s,A,a,p]);let xn=At(null),gr=Zn(()=>Ht?ca(Ht):"",[Ht]),Hn=At(Ht);Hn.current=Ht,dr(()=>{F(e??"")},[e]),dr(()=>{tn.current=!1,xt(rt),jt(null),Ae(!1),qt(null)},[gr,rt,e]);async function hr(k,b,H){let J=ii(A,a,p),ut=new oi(A,{telemetry:!1}),Vt=!1;try{let ye=k.idempotencyKey===void 0?void 0:_c(k.idempotencyKey),x=Gl(b,H),B=Kl(b,H);x?.canonicalIdentity===H&&B&&B.canonicalIdentity===void 0&&(Ha(b,H,B.idempotencyKey),B={...B,canonicalIdentity:H});let R=ye??(B?.canonicalIdentity===H?B.idempotencyKey:void 0),l,u=!1;J.log({name:x?"operation.cache.hit":"operation.cache.miss",stage:"session_create",requestCategory:"session_create"});let h=x?.sid??null,V=null,pe,Ce,Kt=!1;if(h)try{V=await ut.getUnifiedCheckoutSession(h,x?.nonce),x&&x.canonicalIdentity===void 0&&(Vl(V.data.session,k)?(Va(b,H,h,x.nonce??V.data.session?.clientSecret),B&&B.canonicalIdentity===void 0&&(Ha(b,H,B.idempotencyKey),R??(R=B.idempotencyKey))):(Wa(b,H),B=null,R=ye,h=null,V=null));let Ie=V?.data.session?.status,Oe=V?.data.session,at=Oe?.clientSecret||x?.nonce;if(h&&Oe?.buyerIdentified===!1&&at&&(Ce=Co(ut,h,at,k.account)),h&&V&&Ie==="complete"){if($i(h))return{sid:h,result:V};Wa(b,H),h=null,V=null,u=!0}}catch{J.log({name:"operation.fallback",stage:"session_read",requestCategory:"session_read"}),x?.canonicalIdentity===void 0?(Wa(b,H),R=ye):ji(b,H),h=null}if(!h){!ye&&(u||!R)&&(R=_c(),l=R),R&&Ha(b,H,R);let Ie=J.now(),Oe=0;J.log({name:"session.create.started",stage:"session_create",requestCategory:"session_create"});let at={...k,idempotencyKey:R,avsCheck:!!qe,avsConfig:typeof qe=="object"?qe:void 0,checkoutType:"embedded_checkout",checkoutLayout:gs(X,Y)};Object.defineProperty(at,_p,{configurable:!1,enumerable:!1,value:{onAttempt:U=>{Oe=Math.max(Oe,U)}}});let Z=()=>{Mc(J,"session_create",Ie,Oe)},S=U=>{Ac(J,U,"session_create",Ie,Oe)&&de({class:"technical_error",errorCode:"CHECKOUT_SESSION_CREATE_FAILED",requestCategory:"session_create"})};try{if(Mp(at)){let U=await ut.createDetachedSession(at);U.claimed.catch(()=>{}),V=U.shell,h=U.sessionId,Ce=U.claim;let He=J.now();J.log({name:"session.claim.started",stage:"session_claim",requestCategory:"session_claim"}),pe=U.claimed.then(Pe=>{let xe=Pe.data.session?.id??U.sessionId;return xe&&Va(b,H,xe,Pe.data.session?.clientSecret??U.nonce),Mc(J,"session_claim",He),Z(),Pe},Pe=>{throw ji(b,H),Ac(J,Pe,"session_claim",He,0)&&de({class:"technical_error",errorCode:"CHECKOUT_SESSION_CREATE_FAILED",requestCategory:"session_claim"}),Pe}).finally(()=>Pa(J)),pe.catch(()=>{}),Vt=!0,J.log({name:"session.shell.ready",stage:"session_shell",requestCategory:"session_create",paymentMethodCategory:"card",statusClass:"2xx"}),J.performance({stage:"session_shell",durationMs:J.now()-Ie,durationMode:"machine",requestCategory:"session_create",attempt:Oe,statusClass:"2xx",paymentMethodCategory:"card"})}else V=await ut.createAndFetchSession(at),Z()}catch(U){throw S(U),U}h=V.data.session?.id??h??"",h&&!pe&&Va(b,H,h,V.data.session?.clientSecret)}let te=V?.data.session;return!Ce&&h&&te?.buyerIdentified===!1&&te.clientSecret&&(Ce=Co(ut,h,te.clientSecret,k.account)),{sid:h??"",result:V,sdkGeneratedIdempotencyKey:l,...pe?{claimed:pe}:{},...Ce?{claim:Ce}:{},...Kt?{claimRequiresIdentity:!0}:{}}}finally{Vt||Pa(J)}}let Er=At(hr);Xo(()=>{Er.current=hr},[hr]);let Ln=Cn(async(k,b)=>{let H=Hn.current;if(!H)throw new Sn("createSession is required to bootstrap checkout.","validation_error");let J=Di(H,k),ut=ca(J),Vt=Hl(J),ye=si.get(ut);if(!ye){let R={canonicalIdentity:ut,promise:Er.current(J,Vt,ut),consumers:0,settled:!1};ye=R,si.set(ut,R);let l=()=>{R.settled=!0,Tc(ut,R)};R.promise.then(l,l)}ye.consumers+=1;let x=!1,B=()=>{x||(x=!0,ye.consumers-=1,Tc(ut,ye))};b?.(B);try{let R=await ye.promise;xn.current=ut,k&&(In(_t),Bt(te=>kl(te,k)));let{sid:l,result:u,claimed:h,claim:V,claimRequiresIdentity:pe}=R;if(dn.current=V,$t(pe===!0),De(u),u.data.session&&se(u.data.session),l&&F(l),h){cn.current+=1;let te=cn.current;Rt.current=h,ln(!0),h.then(Ie=>{cn.current===te&&(Rt.current===h&&(Rt.current=null),De(Ie),Ie.data.session&&se(Ie.data.session),ln(!1),$t(!1))},Ie=>{cn.current===te&&(Rt.current===h&&(Rt.current=null),ln(!1),$t(!1),$(Ie instanceof Sn?Ie:new Sn(Ie instanceof Error?Ie.message:"Failed to create session","api_error")))})}else cn.current+=1,Rt.current=null,ln(!1),$t(!1);let{flopay:Ce,paypalFlopay:Kt}=await ms(u,{billingApiUrl:A,locale:s,telemetry:a});return tt(Ce,Kt),wt(!1),R}catch(R){throw xn.current===ut&&(xn.current=null),R}finally{b||B()}},[_t,tt,s,A,a]),tr=At(fr);tr.current=fr;let nr=At(Ln);nr.current=Ln;let Mt=Cn(async k=>{if(!jp(k)||Rn)return{sessionId:_,session:M};gn(!0);try{let b=await Ln(k);return{sessionId:b.sid,session:b.result.data.session??null}}finally{gn(!1)}},[Ln,Rn,_,M]),zn=Cn(async k=>{let b=dn.current;if(!b)return;let H=cn.current,J=await b(k);cn.current===H&&(De(J),J.data.session&&se(J.data.session))},[]),En=Cn(async()=>{await Rt.current},[]),rr=Cn(async()=>(await En(),{proceed:!0}),[En]);dr(()=>{let k=!1,b,H=++Lt.current;kt(),$(null),On(0);let J=()=>{k=!0,Lt.current===H&&(Lt.current+=1,kt())},ut=Hn.current;if(gr&&ut)return zt(er),wt(!1),xn.current===gr?J:(se(Il(ut,L)),(async()=>{let x=typeof window<"u"&&new URLSearchParams(window.location.search).has("payment_intent"),B=er==="auto"&&!tn.current&&!x;B&&(xt(null),jt(null),qt("processing"));try{let R=await nr.current(void 0,V=>{b=V}),l=R.result.data.session??null;Wt.current=Vi(R.result);let u=ys(R.result),h=$i(R.sid||l?.id);if(!k&&B&&l&&!u&&!h){tn.current=!0,await Op(gr,R.sdkGeneratedIdempotencyKey,()=>tr.current(l,{attempt3DS:!0,fallbackToFull:!0,fromCreateSession:!0,initialAutoProcessingError:R.result.autoProcessingError,initialAutoProcessingPending:R.result.autoProcessingPending,autoProcessingAttempted:R.result.autoProcessingAttempted,sessionId:R.sid||l.id}));return}!k&&B&&((u||h)&&(tn.current=!0),qt(null),jt(null))}catch(R){if(k)return;let l=Na(R);if(B&&l==="session_auto_completed"){tn.current=!0,qt("success"),await ha(600),k||(Dt(()=>{dt.current?.({status:"succeeded"})}),qt(null),jt(null));return}B&&(qt(null),jt(null));let u=R instanceof Sn?R:new Sn(R instanceof Error?R.message:"Failed to create session","api_error");$(u)}finally{b?.(),b=void 0}})(),()=>{J(),b?.()});wt(!0);async function Vt(){let x=!1,B=null;try{let R=new oi(A,{telemetry:!1}),l=await R.getUnifiedCheckoutSession(j,t);if(B=l,k)return;De(l);let u=l.data.session??null;if(se(u),!u)throw new Sn("No session data returned","api_error");let h=u.checkoutMode;if(h==="setup")throw new Sn("This is a card setup session. Use FloPayCardSetup instead of FloPayCheckout.","validation_error",{code:"InvalidCardSetupSurface",param:"sessionId"});if(u.status==="authorized"){wt(!1),Dt(()=>{dt.current?.(Mr(u,j)),ke.current?.(u.successUrl??"")});return}if(u.status==="complete"){wt(!1),Dt(()=>{ke.current?.(u.successUrl??"")});return}if(u.status==="expired")throw Oa(u);x=!0;let V=L??h??"full";zt(V),cn.current+=1;let pe=u.clientSecret||t;dn.current=u.buyerIdentified===!1&&pe?Co(R,j,pe,{...u.customer?.id?{userId:u.customer.id}:{}}):void 0,ln(!1),$t(!1);let Ce=typeof window<"u"&&new URLSearchParams(window.location.search).has("payment_intent"),Kt=ys(l);if(V==="auto"&&!tn.current&&!Ce&&!Kt){tn.current=!0;let te=ye(l);try{if(await tr.current(u,{attempt3DS:!0,fallbackToFull:!0,ensureProvidersReady:()=>te,sessionId:j||u.id}),k)return;await te,k||wt(!1);return}catch{if(k)return;await te,k||wt(!1);return}}await ye(l),k||wt(!1)}catch(R){if(k)return;let l=wl(R,x);if(x&&de({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED"}),l){let{errorCode:h,stage:V,...pe}=l;ps(A,a,p,h,V,pe)}if(l?.stage==="provider_load"&&(L??B?.data.session?.checkoutMode??"full")==="full"&&Sl(B,Se,G)){let h=Lp({billingApiUrl:A,locale:s,telemetry:a});ot.current=h,tt(h,null),On(1),wt(!1);return}let u=R instanceof Sn&&l?.stage!=="provider_load"?R:Cl();u!==R&&Dt(()=>W.current?.(u)),$(u),wt(!1)}}async function ye(x){let{flopay:B,paypalFlopay:R,...l}=await ms(x,{billingApiUrl:A,locale:s,telemetry:a});Wt.current={publishableKey:l.publishableKey,paypalPublishableKey:l.paypalPublishableKey},tt(B,R),On(0)}return Vt(),J},[L,gr,er,et,t,Se,G]);let or=Cn(async()=>{if(!ze||wn!==1)return;let k=Lt.current;On(2);try{let{flopay:b,paypalFlopay:H}=await ms(ze,{billingApiUrl:A,locale:s,telemetry:a});if(Lt.current!==k)return;kt(),tt(b,H),On(0)}catch(b){if(Lt.current!==k)return;let{errorCode:H,stage:J,...ut}=Fi(b);ps(A,a,p,H,J,ut)}},[kt,tt,s,wn,A,a,p,ze]),nt=!!(j&&(M?.clientSecret||t)),nn=Ut||!nt,un=Cn(async()=>{if(!(Ut||!nt||!M)){Tn(!0),xt(null);try{await fr(M,{attempt3DS:!0,fallbackToFull:!0,sessionId:j||M.id})}finally{Tn(!1)}}},[j,Ut,nt,fr,M]),Bn=Oc(ze?.data.paypal,ce),Or=ys(ze),Pr=Zn(()=>{if(!(!ze||!M||!ze.data.stripe?.publishableKey))return{billingApiUrl:A}},[ze,M,A]),_r=!!(n&&!X&&Y==="buttons"&&Te&&er==="full"),Vn=!!(j&&(Ap(M?.vault)||Qr(M))),rn=Zn(()=>({session:M,loading:St,error:ct,checkoutMode:fn,inlineSessionDraft:Ht,applyInlineSessionPatch:_r?Mt:void 0,inlineSessionPatchProcessing:Rn,claimPending:bn,claimRequiresIdentity:on,claimBuyerIdentity:zn,waitForDataAttachment:En}),[M,St,ct,fn,Ht,_r,Mt,Rn,bn,on,zn,En]),Nr=!!n&&Y==="buttons"&&!Or&&!Vn&&(!be||!Pr),an=jn?le(Sr,{status:jn,errorMessage:ur,authorized:$n}):null;if(St&&!Vn){if(c)return sn(Rr,{children:[c,an]});if(Y==="buttons"){let k=Ye?.buttonsLayout?.cardButton?.borderRadius??Ye?.appearance.variables?.borderRadius??8,b=H=>le("div",{style:{height:H,borderRadius:k,background:"#e5e7eb",animation:"flopay-loading-pulse 1.5s ease-in-out infinite"}});return sn(Rr,{children:[sn("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[Se&&b(Oo),G&&(ve||N)&&b(Oo),G&&b(Oo),le("style",{children:"@keyframes flopay-loading-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }"})]}),an]})}return sn(Rr,{children:[sn("div",{style:{display:"flex",justifyContent:"center",padding:32},children:[le("div",{style:{width:24,height:24,border:"2px solid #e5e7eb",borderTopColor:"#6b7280",borderRadius:"50%",animation:"spin 0.6s linear infinite"}}),le("style",{children:"@keyframes spin { to { transform: rotate(360deg); } }"})]}),an]})}return ct?f?le(sr.Provider,{value:rn,children:f(ct)}):le(sr.Provider,{value:rn,children:le("div",{role:"alert","data-testid":"flopay-load-error",style:{padding:24,textAlign:"center",color:"#dc2626",fontSize:14},children:ct.message})}):Nr?sn(Rr,{children:[le(sr.Provider,{value:rn,children:le(Wp,{onButtonClick:bt,showPayPal:Se,showStripe:G,showApplePay:ve,showGooglePay:N,theme:Ne,buttonsTheme:yt,buttonsStyles:Be,cardButtonContent:mt,cardBackButtonContent:Nt,cardTitleContent:fe})}),an]}):Or&&M&&Bn?sn(Rr,{children:[le(sr.Provider,{value:rn,children:sn("div",{className:It,style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[vn&&le(Eo,{icon:!1,children:vn}),ue==="retrying"&&le("div",{role:"status","aria-live":"polite",children:"PayPal is temporarily unavailable. Retrying\u2026"}),ue==="exhausted"&&sn("div",{role:"alert",children:[le("div",{children:"PayPal is temporarily unavailable. Please try again."}),le("button",{type:"button",onClick:Dr,children:"Retry PayPal"})]}),ue!=="exhausted"&&le("div",{"aria-hidden":ue==="retrying"?!0:void 0,style:ue==="retrying"?{position:"relative",height:0,opacity:0,pointerEvents:"none"}:void 0,children:le($l,{sessionId:j,nonce:M.clientSecret||void 0,billingApiUrl:A,email:M.customer?.email||Ht?.account?.email,billingName:[M.customer?.firstName,M.customer?.lastName].filter(Boolean).join(" ")||[Ht?.account?.firstName,Ht?.account?.lastName].filter(Boolean).join(" ")||void 0,onBuyerIdentityReady:zn,clientId:Bn.clientId,environment:Bn.environment,currency:(M.currency??"usd").toUpperCase(),isSubscription:M.mode==="subscription",providerObjectType:Bn.providerObjectType,approvalPresentation:Bn.approvalPresentation,existingOrderId:Bn.existingOrderId,onComplete:C,onErrorChange:xt,onDecline:z,onButtonClick:bt,runBeforeButtonClick:rr,onInitializationStateChange:An,allowAutomaticRetry:Mn===0,session:M,telemetry:a,telemetryContext:p,onInstrument:re,debug:_e},`${we}:paypal-init-${Mn}`)})]})}),an]}):fn==="confirm"?sn(Rr,{children:[le(sr.Provider,{value:rn,children:le(Ka,{flopay:be,paypalFlopay:E,options:Pr??{billingApiUrl:A},onInstrument:re,children:sn("div",{className:It,children:[vn&&le("div",{style:{color:"#dc2626",fontSize:"0.875rem",marginBottom:"0.75rem",textAlign:"center"},children:vn}),$e?$e({onConfirm:un,isProcessing:nn}):le("button",{type:"button",onClick:un,disabled:nn,style:{width:"100%",padding:"0.875rem",backgroundColor:"#4A49FF",color:"white",border:"none",borderRadius:"8px",fontSize:"1rem",fontWeight:600,cursor:nn?"not-allowed":"pointer",opacity:nn?.6:1},children:Ut?"Processing...":he??"Confirm Purchase"})]})},we)}),an]}):(!be||!Pr)&&!(Vn&&fn==="full")?le(Rr,{children:an}):sn(Rr,{children:[le(sr.Provider,{value:rn,children:sn(Ka,{flopay:be,paypalFlopay:E,options:Pr??{billingApiUrl:A},onInstrument:re,children:[wn===1&&le("button",{type:"button",onClick:or,children:"Retry payment methods"}),X?sn(Rr,{children:[vn&&le("div",{style:{padding:"0.75rem 1rem",marginBottom:"0.75rem",backgroundColor:"#FEF3C7",border:"1px solid #F59E0B",borderRadius:"8px",color:"#92400E",fontSize:"0.875rem"},children:vn}),le($p,{sessionId:j,nonce:M?.clientSecret||void 0,billingApiUrl:A,session:M,submitLabel:lt,walletPresentation:v,children:X})]}):le(ds,{sessionId:j,nonce:M?.clientSecret||void 0,telemetry:a,email:M?.customer?.email||Ht?.account?.email,userId:M?.customer?.id||Ht?.account?.userId,firstName:M?.customer?.firstName||Ht?.account?.firstName,lastName:M?.customer?.lastName||Ht?.account?.lastName,totalAmount:M?Math.round(Tp(M).total*100):0,currency:M?.currency?.toLowerCase()??"usd",onComplete:C,onError:T,onDecline:z,error:vn,onErrorChange:xt,showPayPal:Se,showStripe:G,walletPresentation:v,enabledPaymentMethods:wn?[]:P??ze?.data.stripe?.enabledPaymentMethods??M?.gateways?.stripe?.enabledPaymentMethods,enabledPaymentMethodCountries:ze?.data.stripe?.enabledPaymentMethodCountries,showApplePay:ve,showGooglePay:N,layout:Y,theme:Ne,buttonsTheme:yt,buttonsStyles:Be,appearance:Je,cardButtonContent:mt,cardBackButtonContent:Nt,cardTitleContent:fe,onButtonClick:bt,onBeforeButtonClick:Te,onBuyerIdentityReady:zn,enableAVS:qe,...Re?{cardFieldOrder:Re}:{},...ee?{cardPreFormSlot:ee}:{},avsLayout:je,country:M?.customer?.country,city:M?.customer?.city,state:M?.customer?.state,onCountryChange:ie,onZipChange:O,avsCheck:!!qe,checkoutType:n?"embedded_checkout":"standard_checkout",checkoutLayout:gs(X,Y),className:It,submitLabel:lt,directPaypal:Bn,isSubscription:M?.mode==="subscription",session:M,dataAttachmentPending:bn,dataAttachmentRequiresIdentity:on,debug:_e})]},we)}),an]})}function $p({sessionId:e,nonce:t,billingApiUrl:n,session:o,submitLabel:a,walletPresentation:i,children:s}){return le(Rr,{children:us.Children.map(s,c=>{if(!us.isValidElement(c))return c;let f=c.props,C={};return f.sessionId||(C.sessionId=e),!f.nonce&&t&&(C.nonce=t),f.billingApiUrl||(C.billingApiUrl=n),f.submitLabel===void 0&&a!==void 0&&(C.submitLabel=a),f.walletPresentation===void 0&&(C.walletPresentation=i),o?.customer&&(f.email||(C.email=o.customer.email),f.userId||(C.userId=o.customer.id),f.firstName||(C.firstName=o.customer.firstName),f.lastName||(C.lastName=o.customer.lastName)),Object.keys(C).length===0?c:us.cloneElement(c,C)})})}function Wp({onButtonClick:e,showPayPal:t,showStripe:n=!0,showApplePay:o,showGooglePay:a,theme:i,buttonsTheme:s,buttonsStyles:c,cardButtonContent:f,cardBackButtonContent:C,cardTitleContent:T}){let[I,z]=Jt(!1),ie=Zn(()=>Nc(i),[i]),O=Zn(()=>{let P=ie?.buttonsLayout??Bp(s);return c?{...P,...c,cardButton:{...P.cardButton,...c.cardButton},cardFormContainer:{...P.cardFormContainer,...c.cardFormContainer},backButton:{...P.backButton,...c.backButton},backButtonIcon:{...P.backButtonIcon,...c.backButtonIcon},submitButton:{...P.submitButton,...c.submitButton},title:{...P.title,...c.title}}:P},[ie,s,c]),Se=ie?.buttonsLayout?.cardButton?.borderRadius??ie?.appearance.variables?.borderRadius??8,G=P=>le("div",{style:{height:P,borderRadius:Se,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}}),v=f===void 0?{boxSizing:"border-box",height:Oo,padding:"0 1rem"}:{padding:"0.9rem 1rem"};if(I){let P=O.cardInputBorder??"#e5e7eb",ve=O.cardInputBackground??"white",N=ho(C),_e=ho(T);return sn("div",{style:{backgroundColor:O.cardFormContainer?.backgroundColor??"white",borderRadius:"8px",animation:"flopay-interim-expand 0.35s cubic-bezier(0.4, 0, 0.2, 1) both",overflow:"hidden",...O.cardFormContainer},children:[sn("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[sn("button",{type:"button",onClick:()=>z(!1),"aria-label":"Back to payment methods",style:{display:"inline-flex",alignItems:"center",gap:N?0:"0.5rem",background:"none",border:"none",color:"#4b5563",fontSize:"0.85rem",fontWeight:500,padding:0,flexShrink:0,opacity:1,cursor:"pointer",...O.backButton},children:[le("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",...O.backButtonIcon},children:le("svg",{"aria-hidden":"true",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:le("path",{d:"M15 18l-6-6 6-6"})})}),le(vo,{content:C})]}),_e?le("div",{style:{flex:1}}):le("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:"1.05rem",color:"#262833",paddingRight:80,...O.title},children:le(ta,{content:T})})]}),le("div",{style:{backgroundColor:ve,border:`1px solid ${P}`,borderTopLeftRadius:8,borderTopRightRadius:8,padding:12,height:45},children:le("div",{style:{width:"60%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),sn("div",{style:{display:"flex"},children:[le("div",{style:{flex:1,backgroundColor:ve,borderTop:"none",borderRight:"none",borderBottom:`1px solid ${P}`,borderLeft:`1px solid ${P}`,borderBottomLeftRadius:8,padding:12,height:45},children:le("div",{style:{width:"50%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),le("div",{style:{flex:1,backgroundColor:ve,borderTop:"none",borderRight:`1px solid ${P}`,borderBottom:`1px solid ${P}`,borderLeft:`1px solid ${P}`,borderBottomRightRadius:8,padding:12,height:45},children:le("div",{style:{width:"40%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})})]}),le("div",{style:{backgroundColor:ve,border:`1px solid ${P}`,borderRadius:8,marginTop:8,padding:12,height:45},children:le("div",{style:{width:"45%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),le("div",{style:{height:50,borderRadius:8,marginTop:16,background:"#c8c8ff",animation:"flopay-interim-pulse 1.5s ease-in-out infinite",...O.submitButton,opacity:.5}}),le("style",{children:`
|
|
12
|
+
`}),Go&&Yr&&He("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem",order:re?-2:0},children:[He("button",{type:"button",onClick:ee,style:{display:"inline-flex",alignItems:"center",gap:ki?0:"0.5rem",background:"none",border:"none",cursor:"pointer",color:"#4b5563",fontSize:h.backButtonFontSize??"0.85rem",fontWeight:500,padding:0,transition:"color 0.15s",flexShrink:0,...h.backButton},"aria-label":"Back to payment methods",children:[d("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",transition:"background-color 0.15s",...h.backButtonIcon},children:d("svg",{"aria-hidden":"true",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:d("path",{d:"M15 18l-6-6 6-6"})})}),d(bo,{content:Qe})]}),Xs?d("div",{style:{flex:1}}):d("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:h.titleFontSize??"1.05rem",color:"#262833",paddingRight:80,...h.title},children:d(na,{content:we})})]}),!Go&&!Xs&&d("div",{style:{textAlign:"center",fontWeight:600,fontSize:"1.1rem",padding:"0.5rem 0",color:Ii,order:re?-3:0,...h.title},children:d(na,{content:we})}),re&&xe&&d("div",{style:{order:-2,width:"100%"},children:xe}),re&&zr&&He("div",{"data-testid":"flopay-vault-identity-fields",style:{order:-1,marginTop:"0.5rem"},children:[d("div",{style:{backgroundColor:mo,border:`1px solid ${Zn(Ta)}`,borderRadius:Jt,padding:"10px"},children:d("input",{className:"flopay-shared-input",id:"flopay-buyer-email",name:"email",type:"email",autoComplete:"email","aria-label":"Email address",placeholder:"Email address",value:Dt,onChange:r=>{_t("email"),gn.current=r.target.value,Vt(r.target.value)},onPointerDown:()=>_t("email"),onKeyDown:()=>_t("email"),onBlur:()=>{jn("email")&&Lr(!0),io||mi()},disabled:j,required:!0,"aria-invalid":Ta||void 0,"aria-describedby":Ta?"flopay-buyer-email-error":void 0,"data-testid":"flopay-email",style:{width:"100%",border:"none",outline:"none",background:"transparent",...Ri}})}),Ta&&d("div",{id:"flopay-buyer-email-error",role:"alert","data-testid":"flopay-email-error",style:Jo,children:di.empty?"Email address is required":"Enter a valid email address"})]}),ke&&d("div",{style:{order:re?-1:0},"data-testid":"flopay-avs-fields",children:(()=>{let r=pt,m=(q=!1)=>({backgroundColor:mo,border:`1px solid ${Zn(q)}`,borderRadius:Jt,marginTop:"0.5rem",padding:"10px"}),$=()=>({width:"100%",border:"none",outline:"none",background:"transparent",...Ri}),Ce=Du(r);return He(Do,{children:[Wt(ke.address_line_1,r)&&He(Do,{children:[d("div",{style:m($t("line1")),children:d("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:Qt,onChange:q=>{_t("line1"),Lt.current.addressLine1=!0,ln.current=q.target.value,An(q.target.value)},onPointerDown:()=>_t("line1"),onKeyDown:()=>_t("line1"),onBlur:()=>$n("line1"),disabled:j,required:!0,"aria-invalid":$t("line1")||void 0,"aria-describedby":$t("line1")?"flopay-billing-address-line1-error":void 0,"data-testid":"flopay-address-line1",style:$()})}),$t("line1")&&d("div",{id:"flopay-billing-address-line1-error",role:"alert","data-testid":"flopay-address-line1-error",style:Jo,children:"Street address is required"})]}),Wt(ke.address_line_2,r)&&d("div",{style:m(),children:d("input",{className:"flopay-shared-input",id:"flopay-billing-address-line2",name:"billing-address-line2",placeholder:"Apt, Suite, Unit (optional)",autoComplete:"billing address-line2",value:jt,onChange:q=>{Lt.current.addressLine2=!0,Kt.current=q.target.value,yr(q.target.value)},disabled:j,"data-testid":"flopay-address-line2",style:$()})}),(Wt(ke.city,r)||Wt(ke.state,r))&&He("div",{style:{display:"flex",gap:"0",marginTop:"0.5rem"},children:[Wt(ke.city,r)&&d("div",{style:{flex:1,backgroundColor:mo,borderTop:`1px solid ${Zn($t("city"))}`,borderRight:`1px solid ${Zn($t("city"))}`,borderBottom:`1px solid ${Zn($t("city"))}`,borderLeft:`1px solid ${Zn($t("city"))}`,padding:"10px",borderTopLeftRadius:Jt,borderBottomLeftRadius:Jt,...Wt(ke.state,r)?{borderRight:"none",borderTopRightRadius:0,borderBottomRightRadius:0}:{borderRadius:Jt}},children:d("input",{className:"flopay-shared-input",id:"flopay-billing-city",name:"billing-city",placeholder:"City",autoComplete:"billing address-level2",value:Nt,onChange:q=>{_t("city"),Lt.current.city=!0,bt.current=q.target.value,Ye(q.target.value)},onPointerDown:()=>_t("city"),onKeyDown:()=>_t("city"),onBlur:()=>$n("city"),disabled:j,required:!0,"aria-invalid":$t("city")||void 0,"aria-describedby":$t("city")?"flopay-billing-city-error":void 0,"data-testid":"flopay-city",style:$()})}),Wt(ke.state,r)&&d("div",{style:{flex:1,backgroundColor:mo,borderTop:`1px solid ${Zn($t("state"))}`,borderRight:`1px solid ${Zn($t("state"))}`,borderBottom:`1px solid ${Zn($t("state"))}`,borderLeft:`1px solid ${Zn($t("state"))}`,padding:"10px",borderTopRightRadius:Jt,borderBottomRightRadius:Jt,...Wt(ke.city,r)?{borderTopLeftRadius:0,borderBottomLeftRadius:0,borderLeft:`1px solid ${Zn($t("state")||$t("city"))}`}:{borderRadius:Jt}},children:Ce?He("select",{id:"flopay-billing-state",name:"billing-state",value:dt,onChange:q=>{_t("state"),Lt.current.state=!0,rn.current=q.target.value,sn(q.target.value)},onPointerDown:()=>_t("state"),onKeyDown:()=>_t("state"),onBlur:()=>$n("state"),disabled:j,autoComplete:"billing address-level1",required:!0,"aria-invalid":$t("state")||void 0,"aria-describedby":$t("state")?"flopay-billing-state-error":void 0,"data-testid":"flopay-state",style:{...$(),cursor:"pointer"},children:[d("option",{value:"",children:Yi(r)}),Ce.map(q=>d("option",{value:q.code,children:q.name},q.code))]}):d("input",{className:"flopay-shared-input",id:"flopay-billing-state",name:"billing-state",placeholder:Yi(r),autoComplete:"billing address-level1",value:dt,onChange:q=>{_t("state"),Lt.current.state=!0,rn.current=q.target.value,sn(q.target.value)},onPointerDown:()=>_t("state"),onKeyDown:()=>_t("state"),onBlur:()=>$n("state"),disabled:j,required:!0,"aria-invalid":$t("state")||void 0,"aria-describedby":$t("state")?"flopay-billing-state-error":void 0,"data-testid":"flopay-state",style:$()})})]}),$t("city")&&d("div",{id:"flopay-billing-city-error",role:"alert","data-testid":"flopay-city-error",style:Jo,children:"City is required"}),$t("state")&&He("div",{id:"flopay-billing-state-error",role:"alert","data-testid":"flopay-state-error",style:Jo,children:[Yi(r)," is required"]}),(Wt(ke.country,r)||Wt(ke.postal_code,r))&&He("div",{style:{display:"flex",flexDirection:ae==="column"?"column":"row",gap:ae==="column"?"0.5rem":"0",marginTop:"0.5rem"},children:[Wt(ke.country,r)&&d("div",{style:{flex:ae==="row"?1:void 0,backgroundColor:mo,borderTop:`1px solid ${Yo}`,borderRight:`1px solid ${Yo}`,borderBottom:`1px solid ${Yo}`,borderLeft:`1px solid ${Yo}`,padding:"10px",...ae==="row"&&Wt(ke.postal_code,r)?{borderRadius:"0",borderTopLeftRadius:Jt,borderBottomLeftRadius:Jt,borderRight:"none"}:{borderRadius:Jt}},children:He("select",{id:"flopay-billing-country",name:"billing-country",value:pt,onChange:q=>{Lt.current.country=!0,fn.current=q.target.value,Ln(q.target.value),mt?.(q.target.value),rn.current="",sn("")},disabled:j,autoComplete:"billing country","data-testid":"flopay-country",style:{...$(),cursor:"pointer"},children:[pt===""?d("option",{value:"",children:"Select country"}):null,Ru.map(q=>He("option",{value:q.code,children:[q.flag," ",q.name]},q.code))]})}),Wt(ke.postal_code,r)&&d("div",{style:{flex:ae==="row"?1:void 0,backgroundColor:mo,border:`1px solid ${Xc}`,padding:"10px",...ae==="row"&&Wt(ke.country,r)?{borderRadius:"0",borderTopRightRadius:Jt,borderBottomRightRadius:Jt}:{borderRadius:Jt}},children:d("input",{className:"flopay-shared-input",id:"flopay-billing-postal-code",name:"billing-postal-code",placeholder:ns(pt),autoComplete:"billing postal-code",value:Mn,onChange:q=>{_t("zip"),Lt.current.zip=!0,mn.current=q.target.value,yn(q.target.value),_e?.(q.target.value)},onPointerDown:()=>_t("zip"),onKeyDown:()=>_t("zip"),onBlur:()=>{jn("zip")&&gr(!0)},disabled:j,required:Un.required,"aria-invalid":Ma||void 0,"aria-describedby":Ma?"flopay-billing-postal-code-error":void 0,"data-testid":"flopay-zip",style:$()})})]}),Ma&&d("div",{id:"flopay-billing-postal-code-error",role:"alert","data-testid":"flopay-zip-error",style:Jo,children:Un.empty?`${ns(r)} is required`:Sp(r)})]})})()}),re&&rd,tt&&d(_o,{margin:"0.75rem 0",styleOverride:h.errorBanner,children:tt})]}),Aa={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"},rl=r=>T?!je||!br?d("pre",{"data-testid":r,style:Aa,children:"FloPay/DirectPayPal-debug - not enabled"}):d("pre",{"data-testid":r,style:Aa,children:["FloPay/DirectPayPal-debug (parent gate)",` showPayPal=${je}`,` directPaypalConfigured=${br}`,` inAppBrowserDetected=${String(Ra)}`,` shouldRenderDirectPayPal=${$o}`,` shouldRenderStripePayPal=${Ho}`,` hasPaypalStripeInstance=${!!ws}`].join(`
|
|
13
|
+
`)}):null,ol=r=>T?!I||!Hn?d("pre",{"data-testid":r,style:Aa,children:"FloPay/Stripe-debug - not enabled"}):d("pre",{"data-testid":r,style:Aa,children:["FloPay/Stripe-debug (parent gate)",` showStripe=${I}`,` currency=${pn}`,` amountInCents=${qo}`,` enabledPaymentMethods: ${JSON.stringify(Z??[])}`,` enabledPaymentMethodsProvided=${jo}`,` hasEnabledMethods=${Sa}`,` expressMethods: ${JSON.stringify(ka)}`,` walletExpressMethods: ${JSON.stringify(po)}`,` paymentElementMethods: ${JSON.stringify(gi)}`,` paymentElementMethodsForCurrency: ${JSON.stringify(Ia)}`,` hasStripeInstance=${!!Hn}`,` shouldRenderWallets=${yo}`,` shouldRenderPaymentElement=${Vo}`].join(`
|
|
14
|
+
`)}):null,al=Je==="apm-expanding"||Je==="apm-form"||Je==="apm-collapsing",go;Je==="apm-expanding"?go=uc:Je==="apm-collapsing"&&(go=pc);let xa=tn?Ec(hi,tn,M):null;if(Xe==="buttons"){let r=Je==="buttons"||Je==="expanding"||Je==="apm-expanding",m=Je==="expanding"||Je==="card"||Je==="collapsing",$=ct===void 0?{boxSizing:"border-box",height:ta,padding:"0 1rem"}:{padding:"0.9rem 1rem"},Ce;Je==="expanding"||Je==="apm-expanding"?Ce=Pp:(Je==="collapsing"||Je==="apm-collapsing")&&(Ce=hp);let q;return Je==="expanding"?q=uc:Je==="collapsing"&&(q=pc),He("form",{onSubmit:Ci,className:L,noValidate:!0,style:{position:"relative"},children:[d(Oa,{}),me&&d(Sr,{status:me,errorMessage:tt,authorized:zn}),He("div",{style:{display:"grid"},children:[He("div",{"data-testid":"flopay-buttons-panel","aria-hidden":!r&&!Ce?!0:void 0,style:{gridArea:"1 / 1",display:"flex",flexDirection:"column",gap:"0.5rem",...!r&&!Ce?bp:{},...Ce?{animation:Ce,pointerEvents:"none"}:{}},children:[rl("flopay-direct-paypal-gate-debug"),ol("flopay-stripe-gate-debug"),$o&&vt&&He(Do,{children:[te&&d("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."}),d(sa.Provider,{value:b,children:d(Wa,{sessionId:e,nonce:t,billingApiUrl:de,email:J.email,billingName:Mr||void 0,onBuyerIdentityReady:Be,clientId:vt.clientId,environment:vt.environment,currency:pn.toUpperCase(),isSubscription:ce,providerObjectType:be,approvalPresentation:Ea==="popup"?void 0:Ea,onTokenizedBody:On,onComplete:s,onErrorChange:ge,onDecline:y,onCancel:v,onTechnicalFailure:co,onButtonClick:ye,runBeforeButtonClick:lr,isProcessing:j,onLoadStateChange:Pi,onInitializationStateChange:vi,session:E,existingOrderId:te?.orderId,debug:T},te?.orderId??"fresh")})]}),Ho&&d(oo,{stripe:Wo,options:Rs,children:d(mc,{sessionId:e,nonce:t,email:J.email,billingName:Mr||void 0,onBuyerIdentityReady:Be,billingApiUrl:de,onTokenizedBody:On,onErrorChange:ge,isProcessing:j,onButtonClick:ye,onDecline:y,onTechnicalFailure:co,runBeforeButtonClick:lr,onLoadStateChange:Ds,placeholderBorderRadius:Jr,popupCapabilityOwner:b,externalTelemetryContext:Ws,presentationMode:uo})}),yo?d(oo,{stripe:Hn,options:Is,children:d(gc,{sessionId:e,nonce:t,email:J.email,billingName:Mr||void 0,onBuyerIdentityReady:Be,billingApiUrl:de,intentKind:$e>0?"payment":"setup",expressMethods:po,onTokenizedBody:On,onErrorChange:ge,onButtonClick:ye,onDecline:y,onTechnicalFailure:co,runBeforeButtonClick:lr,onLoadStateChange:Ns,placeholderBorderRadius:Jr,popupCapabilityOwner:b,externalTelemetryContext:G})}):null,!yo&&js?d("div",{style:{height:ta,borderRadius:Jr,background:"#e5e7eb",animation:"flopay-pulse 1.5s ease-in-out infinite"}}):null,Vo&&d(hc,{sessionId:e,nonce:t,email:J.email,billingName:[J.firstName,J.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:Be,billingApiUrl:de,paymentElementMethods:Ia,stripeInstance:Hn,paymentElementBaseOptions:hi,futureUseSession:M,onTokenizedBody:On,onErrorChange:ge,onButtonClick:ye,onDecline:y,runBeforeButtonClick:lr,onLoadStateChange:zs,isProcessing:j,submitButtonColor:Zr,submitButtonBorderRadius:Jt,submitButtonStyle:h.submitButton,onExpandApm:it,expandedApmMethod:tn,themeId:Rt,buttonAppearance:{backgroundColor:h.cardButton?.backgroundColor,borderColor:h.cardInputBorder,textColor:h.cardButton?.color,borderRadius:Jr}}),re&&d("button",{type:"button",onClick:async()=>{j||!(await lr("card")).proceed||(ye?.("card"),O())},disabled:j,style:{width:"100%",...$,...h.cardButton,...ds({themeBundle:st,resolvedPrimaryColor:Zr,resolvedBorderRadius:Jt,submitButtonStyle:h.submitButton,explicitPrimaryColor:Nn?.colorPrimary}),fontSize:h.cardButtonFontSize??"0.95rem",fontWeight:600,cursor:j?"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:j?.6:1},onMouseEnter:ne=>{!j&&(st||Nn?.colorPrimary)&&(ne.currentTarget.style.backgroundColor=td)},onMouseLeave:ne=>{(st||Nn?.colorPrimary)&&(ne.currentTarget.style.backgroundColor=Zr)},onMouseDown:ne=>{ne.currentTarget.style.transform="scale(0.985)"},onMouseUp:ne=>{ne.currentTarget.style.transform="scale(1)"},children:d(vo,{content:ct})}),tt&&Je==="buttons"&&d(_o,{margin:"0.25rem 0",styleOverride:h.errorBanner,children:tt})]}),re&&m&&d("div",{style:{gridArea:"1 / 1",...q?{animation:q}:{},...Je==="collapsing"?{pointerEvents:"none"}:{}},children:nl}),I&&al&&tn&&xa&&Hn&&d("div",{style:{gridArea:"1 / 1",...go?{animation:go}:{},...Je==="apm-collapsing"?{pointerEvents:"none"}:{}},children:He("div",{style:{backgroundColor:wi,borderRadius:_i,...Zo,padding:Ei},children:[He("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[He("button",{type:"button","data-testid":"flopay-apm-back-button",onClick:Yt,style:{display:"inline-flex",alignItems:"center",gap:ki?0:"0.5rem",background:"none",border:"none",cursor:"pointer",color:"#4b5563",fontSize:h.backButtonFontSize??"0.85rem",fontWeight:500,padding:0,transition:"color 0.15s",flexShrink:0,...h.backButton},"aria-label":"Back to payment methods",children:[d("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",transition:"background-color 0.15s",...h.backButtonIcon},children:d("svg",{"aria-hidden":"true",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:d("path",{d:"M15 18l-6-6 6-6"})})}),d(bo,{content:Qe})]}),d("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:h.titleFontSize??"1.05rem",color:Ii,paddingRight:80,...h.title},children:`Pay with ${ga(tn)}`})]}),d(oo,{stripe:Hn,options:xa,children:d(as,{method:tn,sessionId:e,nonce:t,email:J.email,billingName:[J.firstName,J.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:Be,billingApiUrl:de,onTokenizedBody:On,onErrorChange:ge,onDecline:y,onCancel:Yt,runBeforeButtonClick:lr,onButtonClick:ye,isProcessing:j,submitButtonColor:Zr,submitButtonBorderRadius:Jt,submitButtonStyle:h.submitButton,errorText:tt})},tn)]})})]})]})}return al&&tn&&xa&&Hn&&I?He("form",{onSubmit:Ci,className:L,noValidate:!0,style:{position:"relative"},children:[d(Oa,{}),me&&d(Sr,{status:me,errorMessage:tt,authorized:zn}),d("div",{style:{...go?{animation:go}:{},...Je==="apm-collapsing"?{pointerEvents:"none"}:{}},children:He("div",{style:{backgroundColor:wi,borderRadius:_i,...Zo,padding:Ei},children:[He("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[He("button",{type:"button","data-testid":"flopay-apm-back-button-default",onClick:Yt,style:{display:"inline-flex",alignItems:"center",gap:ki?0:"0.5rem",background:"none",border:"none",cursor:"pointer",color:"#4b5563",fontSize:h.backButtonFontSize??"0.85rem",fontWeight:500,padding:0,transition:"color 0.15s",flexShrink:0,...h.backButton},"aria-label":"Back to payment methods",children:[d("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",transition:"background-color 0.15s",...h.backButtonIcon},children:d("svg",{"aria-hidden":"true",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:d("path",{d:"M15 18l-6-6 6-6"})})}),d(bo,{content:Qe})]}),d("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:h.titleFontSize??"1.05rem",color:Ii,paddingRight:80,...h.title},children:`Pay with ${ga(tn)}`})]}),d(oo,{stripe:Hn,options:xa,children:d(as,{method:tn,sessionId:e,nonce:t,email:J.email,billingName:[J.firstName,J.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:Be,billingApiUrl:de,onTokenizedBody:On,onErrorChange:ge,onDecline:y,onCancel:Yt,runBeforeButtonClick:lr,onButtonClick:ye,isProcessing:j,submitButtonColor:Zr,submitButtonBorderRadius:Jt,submitButtonStyle:h.submitButton,errorText:tt})},tn)]})})]}):He("form",{onSubmit:Ci,className:L,noValidate:!0,style:{position:"relative"},children:[d(Oa,{}),me&&d(Sr,{status:me,errorMessage:tt,authorized:zn}),He("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[rl("flopay-direct-paypal-gate-debug-default"),ol("flopay-stripe-gate-debug-default"),$o&&vt&&He(Do,{children:[te&&d("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."}),d(sa.Provider,{value:b,children:d(Wa,{sessionId:e,nonce:t,billingApiUrl:de,email:J.email,billingName:Mr||void 0,onBuyerIdentityReady:Be,clientId:vt.clientId,environment:vt.environment,currency:pn.toUpperCase(),isSubscription:ce,providerObjectType:be,approvalPresentation:Ea==="popup"?void 0:Ea,onTokenizedBody:On,onComplete:s,onErrorChange:ge,onDecline:y,onCancel:v,onTechnicalFailure:co,onButtonClick:ye,runBeforeButtonClick:lr,isProcessing:j,onLoadStateChange:Pi,onInitializationStateChange:vi,session:E,existingOrderId:te?.orderId,debug:T},te?.orderId??"fresh")})]}),Ho&&d(oo,{stripe:Wo,options:Rs,children:d(mc,{sessionId:e,nonce:t,email:J.email,billingName:Mr||void 0,onBuyerIdentityReady:Be,billingApiUrl:de,onTokenizedBody:On,onErrorChange:ge,isProcessing:j,onButtonClick:ye,onDecline:y,onTechnicalFailure:co,runBeforeButtonClick:lr,onLoadStateChange:Ds,placeholderBorderRadius:Jr,popupCapabilityOwner:b,externalTelemetryContext:Ws,presentationMode:uo})}),yo&&d(oo,{stripe:Hn,options:Is,children:d(gc,{sessionId:e,nonce:t,email:J.email,billingName:Mr||void 0,onBuyerIdentityReady:Be,billingApiUrl:de,intentKind:$e>0?"payment":"setup",expressMethods:po,onTokenizedBody:On,onErrorChange:ge,onButtonClick:ye,onDecline:y,onTechnicalFailure:co,runBeforeButtonClick:lr,onLoadStateChange:Ns,placeholderBorderRadius:Jr,popupCapabilityOwner:b,externalTelemetryContext:G})}),Vo&&d(hc,{sessionId:e,nonce:t,email:J.email,billingName:[J.firstName,J.lastName].filter(Boolean).join(" ").trim()||void 0,billingApiUrl:de,paymentElementMethods:Ia,stripeInstance:Hn,paymentElementBaseOptions:hi,futureUseSession:M,onTokenizedBody:On,onErrorChange:ge,onButtonClick:ye,onDecline:y,runBeforeButtonClick:lr,onLoadStateChange:zs,isProcessing:j,submitButtonColor:Zr,submitButtonBorderRadius:Jt,submitButtonStyle:h.submitButton,themeId:Rt,onExpandApm:it,expandedApmMethod:tn,buttonAppearance:{backgroundColor:h.cardButton?.backgroundColor,borderColor:h.cardInputBorder,textColor:h.cardButton?.color,borderRadius:Jr}})]}),re&&(Gc||Kc||Yc)&&d(ll,{label:"or pay with card"}),re&&nl]})}import{Fragment as Rr,jsx as pe,jsxs as on}from"react/jsx-runtime";var No=44,Ps="flopay_checkout_saved_payment_resume",li=new Map,ii=new Map;function Mc(e,t){t.settled&&t.consumers===0&&li.get(e)===t&&li.delete(e)}function Lp(e,t,n){let o=ii.get(e);if(o&&(!o.sdkGeneratedIdempotencyKey||!t||o.sdkGeneratedIdempotencyKey===t))return o.attempt;let a=n(),i={attempt:a,sdkGeneratedIdempotencyKey:t};ii.set(e,i);let s=()=>{ii.get(e)===i&&ii.delete(e)};return a.then(s,s),a}function Pa(e){return new Promise(t=>setTimeout(t,e))}function si(e,t,n){let o=ja({billingApiUrl:e,sdkPackage:"@flopay/react",sdkVersion:zc,enabled:t!==!1});return o.beginCheckout(n),o}function va(e){e.flush().catch(()=>{}).finally(()=>e.destroy())}function ys(e,t,n,o,a,i){let s=si(e,t,n);s.error({errorCode:o,stage:a,paymentMethodCategory:"unknown",...i,...a==="session_read"?{requestCategory:"session_read"}:{}}),va(s)}function Ac(e,t,n,o){e.log({name:t==="session_claim"?"session.claim.completed":"session.request.completed",stage:t,requestCategory:t,statusClass:"2xx"}),e.performance({stage:t,durationMs:Math.max(0,e.now()-n),durationMode:"machine",requestCategory:t,...o===void 0?{}:{attempt:o},statusClass:"2xx"})}function xc(e,t,n,o,a){let i=Oc(t,"CHECKOUT_SESSION_CREATE_FAILED","unknown");return e.performance({stage:n,durationMs:Math.max(0,e.now()-o),durationMode:"machine",requestCategory:n,attempt:a,statusClass:i.statusClass}),t instanceof wn&&t.code==="session_auto_completed"?!1:t instanceof wn&&t.type==="validation_error"?(e.terminal({outcome:"validation_rejected",stage:n,paymentMethodCategory:"unknown"}),!1):i.statusClass==="4xx"?(e.terminal({outcome:"validation_rejected",stage:n,paymentMethodCategory:"unknown",requestCategory:n,statusClass:"4xx"}),!1):(e.error({...i,stage:n,paymentMethodCategory:"unknown",requestCategory:n}),!0)}function ms(e){return!e||e.data.stripe?.publishableKey?!1:!!Nc(e.data.paypal)?.clientId}var zp={name:"provider_unavailable",initialize:()=>Promise.resolve(),getRawProvider:()=>null,destroy:()=>{}};function Up(e){return new Tp(zp,{publishableKey:"provider_unavailable",...e})}async function fs(e,t){let{publishableKey:n,paypalPublishableKey:o}=Ki(e);return{...await Gi({publishableKey:n,paypalPublishableKey:o,...t}),publishableKey:n,paypalPublishableKey:o}}function vs(){return typeof window<"u"&&typeof window.sessionStorage<"u"}function qp(){if(!vs())return null;try{let e=window.sessionStorage.getItem(Ps);return e?JSON.parse(e):null}catch{return null}}function Bc(e){if(vs())try{window.sessionStorage.setItem(Ps,JSON.stringify(e))}catch(t){console.warn("[FloPayCheckout] Failed to persist PayPal resume state.",t)}}function gs(){if(vs())try{window.sessionStorage.removeItem(Ps)}catch(e){console.warn("[FloPayCheckout] Failed to clear PayPal resume state.",e)}}function jp(){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 o of t)e.searchParams.has(o)&&(e.searchParams.delete(o),n=!0);n&&window.history.replaceState(window.history.state,"",e.toString())}function Fc(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 hs(e,t){return Op(!!e,t)}function $p(e,t){return e?"unknown":t==="buttons"?"buttons":"embedded"}function Dc(e){return e?.gateways?.stripe?"stripe":e?.gateways?.paypal?"paypal":void 0}function Wp(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 bs({sessionId:e,nonce:t,createSession:n,billingApiUrl:o,telemetry:a,appearance:i,locale:s,loading:c,error:y,onComplete:v,onError:B,onInstrument:R,onDecline:N,onCancel:le,onCountryChange:L,onZipChange:Ae,showPayPal:K=!0,showStripe:g=!0,walletPresentation:w="auto",enabledPaymentMethods:je,showApplePay:I=!0,showGooglePay:Ke=!0,debug:Z=!1,layout:Fe,theme:Ze,buttonsTheme:Oe,buttonsStyles:Xe,cardButtonContent:Rt,cardBackButtonContent:rt,cardTitleContent:X,showSecurityFooter:At,onButtonClick:ct,onBeforeButtonClick:Qe,enableAVS:we,cardFieldOrder:oe,cardPreFormSlot:ye,avsLayout:Pt,submitLabel:xt,className:Ge,initialErrorMessage:Q=null,initialPayPalOrderId:xe,children:ae,checkoutMode:z,confirmLabel:Ne,renderConfirmButton:Le,onSessionCompleted:De}){let F=Fp(o),ze=tr(()=>Lc(Ze),[Ze]),mt=i??ze?.appearance,_e=n?"embedded_checkout":"standard_checkout",ft=hs(ae,Fe),[he,Ue]=Ht(null),[$e,pn]=Ht(null),Bt=Ot(null),vt=Ot(null),ce=Ot(0),[P,ot]=Ht(null),et=Ot(null),[T,Pe]=Ht(null),Ft=tr(()=>n?da(n):"",[n]),Se=n?`create:${Ft}`:`session:${e??""}`,wt=Dc(T),f=Ot(new Set),b=Ot(Se),Re=Ot(Se);Qo(()=>{Re.current=Se,b.current!==Se&&(b.current=Se,f.current.clear())},[Se]);let ve=Sn(C=>{if(Re.current===Se){if(Ll.has(C.name)){if(f.current.has(C.name))return;f.current.add(C.name)}zt(()=>R?.(C))}},[Se,R]),p=Eo(ve,Se),G=Ot(!1),E=Sn(C=>{if(G.current)return;let S=C.gateway||!wt?C:{...C,gateway:wt};ve(S)},[ve,wt]);pr(()=>{p({class:"lifecycle",name:"checkout.mount"})},[p]);let[M,be]=Ht(e??""),ie=e??M,an=n?"":ie,[gt,Xt]=Ht(!0),[de,Te]=Ht(null),[_n,Tn]=Ht(0),[bn,pt]=Ht("full"),[Ln,Mn]=Ht(!1),[yn,Qt]=Ht(Q),[An,jt]=Ht(null),[yr,Nt]=Ht(null),[Ye,dt]=Ht(!1),[sn,Dt]=Ht(void 0),[Vt,Kn]=Ht(""),[xn,mn]=Ht(!1),[fn,ln]=Ht(!1),[Kt,bt]=Ht(!1),rn=Ot(null),gn=Ot(0),Lt=Ot(void 0),[ke,Bn]=Ht("loading"),[zn,kn]=Ht(0),en=Ot(!1),nr=Ot(!1),mr=Ot(!1),Gn=Ot(null),kt=Ot(null),re=tr(()=>({checkoutMode:z??bn,layout:$p(ae,Fe)}),[z,ae,bn,Fe]),x=Ot(v);x.current=v;let D=Ot(B);D.current=B;let U=Ot(N);U.current=N;let It=Sn(C=>Ya(Gn,async S=>{try{return await C(S)}catch(O){throw S.aborted?Mo(O):O}}),[]);pr(()=>()=>{Gn.current?.abort(),Gn.current=null},[]);let ut=Sn((C,S)=>{Bt.current=C,pn(C),et.current=S,ot(S)},[]),Ct=Sn(()=>{let C=vt.current;C&&(vt.current=null,C.destroy())},[]);pr(()=>{un($e)?.setCheckoutContext(re),P&&P!==$e&&un(P)?.setCheckoutContext(re)},[$e,P,re]);let In=Ot(De);In.current=De;let at=Sn(C=>{Bn(C),!(C!=="exhausted"||mr.current)&&(mr.current=!0,D.current?.(new wn("PayPal is temporarily unavailable. Please try again.","api_error",{code:"paypal_init_timeout"})))},[]),Nr=Sn(()=>{Bn("retrying"),kn(C=>C+1)},[]);pr(()=>{Bn("loading"),kn(0),mr.current=!1},[ie]),pr(()=>{console.info("[FloPay] Checkout initialized",{sdk_version:zc,checkout_type:_e,checkout_layout:ft,billing_api_url:F})},[ft,_e,F]);let Et=tr(()=>n?da(n,!0):"",[n]),Un=tr(()=>Vt===Et?sn:void 0,[sn,Vt,Et]),fr=tr(()=>n?Oi(n,Un):void 0,[n,Un]),Yn=z??fr?.checkoutMode??"full",Gt=tr(()=>fr?{...fr,checkoutMode:Yn}:void 0,[fr,Yn]);pr(()=>{Dt(void 0),Kn(Et),Lt.current=void 0,rn.current=null,bt(!1)},[Et]),pr(()=>{Qt(Q)},[Q]);let rr=Sn((C,S,O)=>{zt(()=>{U.current?.(dn(C,S,O))})},[]),Er=Sn(async(C,S)=>{Qt(null),Nt(null),dt(!1),jt("processing");let O=S?.sessionId??C.id,ee=C.clientSecret||t,it=Dc(C),Yt=Bt.current??et.current,me=un(Yt),W=Yt?null:si(F,a,re),k={log:fe=>{me?me.log(fe):W?.log(fe)},error:fe=>{me?me.error(fe):W?.error(fe)},terminal:fe=>{me?me.terminal(fe):W?.terminal(fe)},performance:fe=>{me?me.performance(fe):W?.performance(fe)},now:()=>me?.now()??W?.now()??0,elapsed:fe=>me?.elapsed(fe)??Math.max(0,(W?.now()??fe)-fe)},_=k.now(),H=!!(S?.initialAutoProcessingError||S?.initialAutoProcessingPending),u=!1,l,A=()=>{u||(u=!0,H=!0,l=k.now(),k.log({name:"checkout.recovery.started",stage:"recovery",paymentMethodCategory:"saved"}),k.log({name:"operation.recovery.started",stage:"recovery",paymentMethodCategory:"saved"}))},te=!1,Ie=()=>{te||(te=!0,k.log({name:"payment.processing.completed",stage:"processing",paymentMethodCategory:"saved"}),k.performance({stage:"processing",durationMs:k.elapsed(_),durationMode:"machine",paymentMethodCategory:"saved",requestCategory:"process_payment"}),l!==void 0&&k.performance({stage:"recovery",durationMs:k.elapsed(l),durationMode:"machine",paymentMethodCategory:"saved"}))};k.log({name:"payment.method.selected",stage:"processing",paymentMethodCategory:"saved"}),G.current=!0;try{k.log({name:"payment.processing.started",stage:"processing",paymentMethodCategory:"saved"})}finally{G.current=!1}p({class:"lifecycle",name:"payment.processing.started",provider:it}),H&&A();let qe;try{let fe=tc(S?.initialAutoProcessingError),ue=S?.initialAutoProcessingError?.type==="3ds_required"&&!S.initialAutoProcessingError.threeDSecureToken&&S.initialAutoProcessingError.nextActionRedirectUrl?{type:"next_action_required",nextActionRedirectUrl:S.initialAutoProcessingError.nextActionRedirectUrl}:null,Be,tt=st=>(A(),It(h=>Ao(st,{billingApiUrl:F,sessionId:O,nonce:ee,session:C,signal:h})));if(ue)Be=await tt(ue);else if(fe)A(),fe.type==="paypal_redirect_required"&&kt.current?.publishableKey&&Bc({sessionId:O,publishableKey:kt.current.publishableKey,paypalPublishableKey:kt.current.paypalPublishableKey}),Be=await It(st=>Xa(fe,{flopay:Bt.current,paypalFlopay:et.current,attempt3DS:S?.attempt3DS,billingApiUrl:F,sessionId:O,session:C,telemetry:!1,signal:st})),fe.type==="paypal_redirect_required"&&gs();else if(S?.initialAutoProcessingPending){let st=S.initialAutoProcessingPending,h=new ai(F,{telemetry:!1}),Y=await It(j=>h.waitForCheckoutSessionCompletion(st.sessionId,{initialDelayMs:st.retryAfterMs,nonce:ee,statusUrl:st.statusUrl,signal:j})),Ee=jr(Y,C),Me=Y.autoProcessingError?.type==="3ds_required"&&Y.autoProcessingError.nextActionRedirectUrl?{type:"next_action_required",nextActionRedirectUrl:Y.autoProcessingError.nextActionRedirectUrl}:null;if(Me)Be=await tt(Me);else{if(!Br(Ee))throw wo(Ee);Be=xr(Ee,O)}}else{if(S?.initialAutoProcessingError)throw kr(S.initialAutoProcessingError,"Automatic payment failed. Please try again.",{checkoutMethod:S.initialAutoProcessingError.checkoutMethod});if(S?.fromCreateSession)return S?.fallbackToFull&&(pt("full"),Fc("full")),!1;{let st=await xo({billingApiUrl:F,sessionId:O,session:C,nonce:ee,telemetry:!1});st.type==="success"?Be=st.result:st.type==="next_action_required"?Be=await tt(st):(A(),st.type==="paypal_redirect_required"&&kt.current?.publishableKey&&Bc({sessionId:O,publishableKey:kt.current.publishableKey,paypalPublishableKey:kt.current.paypalPublishableKey}),Be=await It(h=>Xa(st,{flopay:Bt.current,paypalFlopay:et.current,attempt3DS:S?.attempt3DS,billingApiUrl:F,sessionId:O,session:C,telemetry:!1,signal:h})),st.type==="paypal_redirect_required"&&gs())}}O&&To(O),Ie(),H&&(k.log({name:"checkout.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"}),k.log({name:"operation.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"})),k.terminal({outcome:Be.status==="authorized"?"payment_authorized":"payment_succeeded",paymentMethodCategory:"saved"}),dt(Be.status==="authorized"),jt("success"),await Pa(600),qe=()=>x.current?.(Be)}catch(fe){let ue=qr(ya(fe),O);if(ue.code==="three_ds_aborted")return!1;let Be=ue.checkoutMethod??pa;Qt(ue.message),Nt(ue.message),dt(!1),S?.fallbackToFull&&(k.log({name:"operation.fallback",stage:"recovery",paymentMethodCategory:"saved"}),pt("full"),Fc("full")),Ie();let tt=ue.statusCode===void 0?void 0:Np(ue.statusCode,"unknown"),st=tt==="4xx"?{requestCategory:"process_payment",statusClass:tt}:{},h=tt===void 0||tt==="4xx";if(h&&(ue.telemetryOutcome==="payment_declined"||!!(ue.declineCode||ue.code?.toLowerCase().includes("declin"))))k.terminal({outcome:"payment_declined",paymentMethodCategory:"saved",...st});else if(h&&(ue.telemetryOutcome==="validation_rejected"||ue.type==="validation_error"))k.terminal({outcome:"validation_rejected",paymentMethodCategory:"saved",...st});else{let Me=Oc(fe,H?"RECOVERY_FAILED":"PAYMENT_PROCESSING_FAILED","unknown"),j=ue.telemetryRequestCategory??"process_payment";G.current=!0;try{k.error({...Me,...ue.telemetryFailureCategory?{failureCategory:ue.telemetryFailureCategory}:{},stage:H?"recovery":"processing",paymentMethodCategory:"saved",requestCategory:j})}finally{G.current=!1}p({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:j,provider:it})}return zt(()=>D.current?.(ue)),rr(Be,ue,{code:ue.code,declineCode:ue.declineCode}),jt("error"),await Promise.allSettled([Pa(400),S?.ensureProvidersReady?S.ensureProvidersReady():Promise.resolve()]),H&&(k.log({name:"checkout.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"}),k.log({name:"operation.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"})),!1}finally{Ie(),W&&va(W),jt(null),Nt(null)}return zt(qe),!0},[rr,p,t,F,It,a,re]);pr(()=>{if(typeof window>"u"||nr.current)return;let C=new URLSearchParams(window.location.search),S=C.get("payment_intent_client_secret");if(!S)return;let O=qp();O&&(nr.current=!0,(async()=>{let ee,it=0;Qt(null),Nt(null),jt("processing"),Mn(!0);try{if(C.get("redirect_status")==="failed")throw Object.assign(new wn("PayPal payment was declined. Please try again.","api_error",{declineCode:"paypal_redirect_failed"}),{checkoutMethod:"paypal"});let{flopay:Yt,paypalFlopay:me}=await Gi({publishableKey:O.publishableKey,paypalPublishableKey:O.paypalPublishableKey,billingApiUrl:F,locale:s,telemetry:a});ee=un(me??Yt),ee?.setCheckoutContext(re),it=ee?.now()??0,ee?.log({name:"provider.redirect.resumed",stage:"redirect_resume",provider:"paypal",paymentMethodCategory:"paypal"}),ee?.log({name:"operation.recovery.started",stage:"recovery",provider:"paypal",paymentMethodCategory:"paypal"});let W=(me??Yt)?.getRawProvider();if(!W)throw Object.assign(new wn("PayPal is not available.","api_error"),{checkoutMethod:"paypal"});let{paymentIntent:k,error:_}=await W.retrievePaymentIntent(S);if(_)throw Object.assign(new wn(_.message??"Failed to retrieve PayPal payment status.","api_error",{code:_.code}),{checkoutMethod:"paypal"});let H=_l(k?.status);if(!k||H==="failed")throw Object.assign(new wn("PayPal payment was not completed. Please try again.","api_error"),{checkoutMethod:"paypal"});let u=typeof k.payment_method=="string"?k.payment_method:k.payment_method?.id,l=H;if(O.sessionId){let Ie=(await new ai(F,{telemetry:!1}).getUnifiedCheckoutSession(O.sessionId)).data.session;if(Ie&&Ie.status!=="complete"){let qe=await xo({billingApiUrl:F,sessionId:O.sessionId,session:Ie,telemetry:!1,tokenizedData:{id:u??k.id,type:"card",threeDSecureActionResultTokenId:k.id,isPaypal:!0}});if(qe.type!=="success")throw Object.assign(new wn("Failed to finalize PayPal payment.","api_error"),{checkoutMethod:"paypal"});l=qe.result.status}}O.sessionId&&To(O.sessionId),ee?.log({name:"operation.recovery.completed",stage:"recovery",provider:"paypal",paymentMethodCategory:"paypal"}),ee?.performance({stage:"redirect_resume",durationMs:ee.elapsed(it),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"}),ee?.terminal({outcome:"payment_succeeded",provider:"paypal",paymentMethodCategory:"paypal"}),jt("success"),await Pa(600),zt(()=>x.current?.({status:l,paymentIntentId:k.id,paymentMethodId:u,checkoutMethod:"paypal"}))}catch(Yt){let me=qr(ya(Yt),O.sessionId),W=me.checkoutMethod??"paypal",k=!!(me.declineCode||me.code?.toLowerCase().includes("declin"));if(ee)ee.performance({stage:"redirect_resume",durationMs:ee.elapsed(it),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"}),k?ee.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal"}):ee.error({errorCode:"REDIRECT_RESUME_FAILED",stage:"redirect_resume",provider:"paypal",paymentMethodCategory:"paypal"});else if(k){let _=si(F,a,re);_.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal"}),va(_)}else ys(F,a,re,"REDIRECT_RESUME_FAILED","redirect_resume");Qt(me.message),Nt(me.message),zt(()=>D.current?.(me)),rr(W,me,{code:me.code,declineCode:me.declineCode}),jt("error"),await Pa(400)}finally{gs(),jp(),jt(null),Nt(null),Mn(!1)}})())},[rr,s,F,a,re]);let gr=Ot(null),Rn=tr(()=>Gt?da(Gt):"",[Gt]),Lr=Ot(Gt);Lr.current=Gt,pr(()=>{be(e??"")},[e]),pr(()=>{en.current=!1,Qt(Q),Nt(null),dt(!1),jt(null)},[Rn,Q,e]);async function Jn(C,S,O){let ee=si(F,a,re),it=new ai(F,{telemetry:!1}),Yt=!1;try{let me=C.idempotencyKey===void 0?void 0:Tc(C.idempotencyKey),W=Yl(S,O),k=Gl(S,O);W?.canonicalIdentity===O&&k&&k.canonicalIdentity===void 0&&(Va(S,O,k.idempotencyKey),k={...k,canonicalIdentity:O});let _=me??(k?.canonicalIdentity===O?k.idempotencyKey:void 0),H,u=!1;ee.log({name:W?"operation.cache.hit":"operation.cache.miss",stage:"session_create",requestCategory:"session_create"});let l=W?.sid??null,A=null,te,Ie,qe=!1;if(l)try{A=await it.getUnifiedCheckoutSession(l,W?.nonce),W&&W.canonicalIdentity===void 0&&(Kl(A.data.session,C)?(Ka(S,O,l,W.nonce??A.data.session?.clientSecret),k&&k.canonicalIdentity===void 0&&(Va(S,O,k.idempotencyKey),_??(_=k.idempotencyKey))):(Ha(S,O),k=null,_=me,l=null,A=null));let ue=A?.data.session?.status,Be=A?.data.session,tt=Be?.clientSecret||W?.nonce;if(l&&Be?.buyerIdentified===!1&&tt&&(Ie=So(it,l,tt,C.account)),l&&A&&ue==="complete"){if(Wi(l))return{sid:l,result:A};Ha(S,O),l=null,A=null,u=!0}}catch{ee.log({name:"operation.fallback",stage:"session_read",requestCategory:"session_read"}),W?.canonicalIdentity===void 0?(Ha(S,O),_=me):$i(S,O),l=null}if(!l){!me&&(u||!_)&&(_=Tc(),H=_),_&&Va(S,O,_);let ue=ee.now(),Be=0;ee.log({name:"session.create.started",stage:"session_create",requestCategory:"session_create"});let tt={...C,idempotencyKey:_,avsCheck:!!we,avsConfig:typeof we=="object"?we:void 0,checkoutType:"embedded_checkout",checkoutLayout:hs(ae,Fe)};Object.defineProperty(tt,Mp,{configurable:!1,enumerable:!1,value:{onAttempt:Y=>{Be=Math.max(Be,Y)}}});let st=()=>{Ac(ee,"session_create",ue,Be)},h=Y=>{xc(ee,Y,"session_create",ue,Be)&&p({class:"technical_error",errorCode:"CHECKOUT_SESSION_CREATE_FAILED",requestCategory:"session_create"})};try{if(xp(tt)){let Y=await it.createDetachedSession(tt);Y.claimed.catch(()=>{}),A=Y.shell,l=Y.sessionId,Ie=Y.claim;let Ee=ee.now();ee.log({name:"session.claim.started",stage:"session_claim",requestCategory:"session_claim"}),te=Y.claimed.then(Me=>{let j=Me.data.session?.id??Y.sessionId;return j&&Ka(S,O,j,Me.data.session?.clientSecret??Y.nonce),Ac(ee,"session_claim",Ee),st(),Me},Me=>{throw $i(S,O),xc(ee,Me,"session_claim",Ee,0)&&p({class:"technical_error",errorCode:"CHECKOUT_SESSION_CREATE_FAILED",requestCategory:"session_claim"}),Me}).finally(()=>va(ee)),te.catch(()=>{}),Yt=!0,ee.log({name:"session.shell.ready",stage:"session_shell",requestCategory:"session_create",paymentMethodCategory:"card",statusClass:"2xx"}),ee.performance({stage:"session_shell",durationMs:ee.now()-ue,durationMode:"machine",requestCategory:"session_create",attempt:Be,statusClass:"2xx",paymentMethodCategory:"card"})}else A=await it.createAndFetchSession(tt),st()}catch(Y){throw h(Y),Y}l=A.data.session?.id??l??"",l&&!te&&Ka(S,O,l,A.data.session?.clientSecret)}let fe=A?.data.session;return!Ie&&l&&fe?.buyerIdentified===!1&&fe.clientSecret&&(Ie=So(it,l,fe.clientSecret,C.account)),{sid:l??"",result:A,sdkGeneratedIdempotencyKey:H,...te?{claimed:te}:{},...Ie?{claim:Ie}:{},...qe?{claimRequiresIdentity:!0}:{}}}finally{Yt||va(ee)}}let _r=Ot(Jn);Qo(()=>{_r.current=Jn},[Jn]);let qn=Sn(async(C,S)=>{let O=Lr.current;if(!O)throw new wn("createSession is required to bootstrap checkout.","validation_error");let ee=Oi(O,C),it=da(ee),Yt=Vl(ee),me=li.get(it);if(!me){let _={canonicalIdentity:it,promise:_r.current(ee,Yt,it),consumers:0,settled:!1};me=_,li.set(it,_);let H=()=>{_.settled=!0,Mc(it,_)};_.promise.then(H,H)}me.consumers+=1;let W=!1,k=()=>{W||(W=!0,me.consumers-=1,Mc(it,me))};S?.(k);try{let _=await me.promise;gr.current=it,C&&(Kn(Et),Dt(fe=>Il(fe,C)));let{sid:H,result:u,claimed:l,claim:A,claimRequiresIdentity:te}=_;if(Lt.current=A,bt(te===!0),Ue(u),u.data.session&&Pe(u.data.session),H&&be(H),l){gn.current+=1;let fe=gn.current;rn.current=l,ln(!0),l.then(ue=>{gn.current===fe&&(rn.current===l&&(rn.current=null),Ue(ue),ue.data.session&&Pe(ue.data.session),ln(!1),bt(!1))},ue=>{gn.current===fe&&(rn.current===l&&(rn.current=null),ln(!1),bt(!1),Te(ue instanceof wn?ue:new wn(ue instanceof Error?ue.message:"Failed to create session","api_error")))})}else gn.current+=1,rn.current=null,ln(!1),bt(!1);let{flopay:Ie,paypalFlopay:qe}=await fs(u,{billingApiUrl:F,locale:s,telemetry:a});return ut(Ie,qe),Xt(!1),_}catch(_){throw gr.current===it&&(gr.current=null),_}finally{S||k()}},[Et,ut,s,F,a]),or=Ot(Er);or.current=Er;let hr=Ot(qn);hr.current=qn;let _t=Sn(async C=>{if(!Wp(C)||xn)return{sessionId:M,session:T};mn(!0);try{let S=await qn(C);return{sessionId:S.sid,session:S.result.data.session??null}}finally{mn(!1)}},[qn,xn,M,T]),jn=Sn(async C=>{let S=Lt.current;if(!S)return;let O=gn.current,ee=await S(C);gn.current===O&&(Ue(ee),ee.data.session&&Pe(ee.data.session))},[]),$n=Sn(async()=>{await rn.current},[]),Fn=Sn(async()=>(await $n(),{proceed:!0}),[$n]);pr(()=>{let C=!1,S,O=++ce.current;Ct(),Te(null),Tn(0);let ee=()=>{C=!0,ce.current===O&&(ce.current+=1,Ct())},it=Lr.current;if(Rn&&it)return pt(Yn),Xt(!1),gr.current===Rn?ee:(Pe(Rl(it,z)),(async()=>{let W=typeof window<"u"&&new URLSearchParams(window.location.search).has("payment_intent"),k=Yn==="auto"&&!en.current&&!W;k&&(Qt(null),Nt(null),jt("processing"));try{let _=await hr.current(void 0,A=>{S=A}),H=_.result.data.session??null;kt.current=Ki(_.result);let u=ms(_.result),l=Wi(_.sid||H?.id);if(!C&&k&&H&&!u&&!l){en.current=!0,await Lp(Rn,_.sdkGeneratedIdempotencyKey,()=>or.current(H,{attempt3DS:!0,fallbackToFull:!0,fromCreateSession:!0,initialAutoProcessingError:_.result.autoProcessingError,initialAutoProcessingPending:_.result.autoProcessingPending,autoProcessingAttempted:_.result.autoProcessingAttempted,sessionId:_.sid||H.id}));return}!C&&k&&((u||l)&&(en.current=!0),jt(null),Nt(null))}catch(_){if(C)return;let H=La(_);if(k&&H==="session_auto_completed"){en.current=!0,jt("success"),await Pa(600),C||(zt(()=>{x.current?.({status:"succeeded"})}),jt(null),Nt(null));return}k&&(jt(null),Nt(null));let u=_ instanceof wn?_:new wn(_ instanceof Error?_.message:"Failed to create session","api_error");Te(u)}finally{S?.(),S=void 0}})(),()=>{ee(),S?.()});Xt(!0);async function Yt(){let W=!1,k=null;try{let _=new ai(F,{telemetry:!1}),H=await _.getUnifiedCheckoutSession(ie,t);if(k=H,C)return;Ue(H);let u=H.data.session??null;if(Pe(u),!u)throw new wn("No session data returned","api_error");let l=u.checkoutMode;if(l==="setup")throw new wn("This is a card setup session. Use FloPayCardSetup instead of FloPayCheckout.","validation_error",{code:"InvalidCardSetupSurface",param:"sessionId"});if(u.status==="authorized"){Xt(!1),zt(()=>{x.current?.(xr(u,ie)),In.current?.(u.successUrl??"")});return}if(u.status==="complete"){Xt(!1),zt(()=>{In.current?.(u.successUrl??"")});return}if(u.status==="expired")throw Na(u);W=!0;let A=z??l??"full";pt(A),gn.current+=1;let te=u.clientSecret||t;Lt.current=u.buyerIdentified===!1&&te?So(_,ie,te,{...u.customer?.id?{userId:u.customer.id}:{}}):void 0,ln(!1),bt(!1);let Ie=typeof window<"u"&&new URLSearchParams(window.location.search).has("payment_intent"),qe=ms(H);if(A==="auto"&&!en.current&&!Ie&&!qe){en.current=!0;let fe=me(H);try{if(await or.current(u,{attempt3DS:!0,fallbackToFull:!0,ensureProvidersReady:()=>fe,sessionId:ie||u.id}),C)return;await fe,C||Xt(!1);return}catch{if(C)return;await fe,C||Xt(!1);return}}await me(H),C||Xt(!1)}catch(_){if(C)return;let H=kl(_,W);if(W&&p({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED"}),H){let{errorCode:l,stage:A,...te}=H;ys(F,a,re,l,A,te)}if(H?.stage==="provider_load"&&(z??k?.data.session?.checkoutMode??"full")==="full"&&wl(k,K,g)){let l=Up({billingApiUrl:F,locale:s,telemetry:a});vt.current=l,ut(l,null),Tn(1),Xt(!1);return}let u=_ instanceof wn&&H?.stage!=="provider_load"?_:Sl();u!==_&&zt(()=>D.current?.(u)),Te(u),Xt(!1)}}async function me(W){let{flopay:k,paypalFlopay:_,...H}=await fs(W,{billingApiUrl:F,locale:s,telemetry:a});kt.current={publishableKey:H.publishableKey,paypalPublishableKey:H.paypalPublishableKey},ut(k,_),Tn(0)}return Yt(),ee},[z,Rn,Yn,an,t,K,g]);let ar=Sn(async()=>{if(!he||_n!==1)return;let C=ce.current;Tn(2);try{let{flopay:S,paypalFlopay:O}=await fs(he,{billingApiUrl:F,locale:s,telemetry:a});if(ce.current!==C)return;Ct(),ut(S,O),Tn(0)}catch(S){if(ce.current!==C)return;let{errorCode:O,stage:ee,...it}=Di(S);ys(F,a,re,O,ee,it)}},[Ct,ut,s,_n,F,a,re,he]),Je=!!(ie&&(T?.clientSecret||t)),hn=Ln||!Je,tn=Sn(async()=>{if(!(Ln||!Je||!T)){Mn(!0),Qt(null);try{await Er(T,{attempt3DS:!0,fallbackToFull:!0,sessionId:ie||T.id})}finally{Mn(!1)}}},[ie,Ln,Je,Er,T]),Dn=Nc(he?.data.paypal,xe),Yr=ms(he),ir=tr(()=>{if(!(!he||!T||!he.data.stripe?.publishableKey))return{billingApiUrl:F}},[he,T,F]),Tr=!!(n&&!ae&&Fe==="buttons"&&Qe&&Yn==="full"),Wn=!!(ie&&(Bp(T?.vault)||to(T))),Pn=tr(()=>({session:T,loading:gt,error:de,checkoutMode:bn,inlineSessionDraft:Gt,applyInlineSessionPatch:Tr?_t:void 0,inlineSessionPatchProcessing:xn,claimPending:fn,claimRequiresIdentity:Kt,claimBuyerIdentity:jn,waitForDataAttachment:$n}),[T,gt,de,bn,Gt,Tr,_t,xn,fn,Kt,jn,$n]),Pr=!!n&&Fe==="buttons"&&!Yr&&!Wn&&(!$e||!ir),Cn=An?pe(Sr,{status:An,errorMessage:yr,authorized:Ye}):null;if(gt&&!Wn){if(c)return on(Rr,{children:[c,Cn]});if(Fe==="buttons"){let C=ze?.buttonsLayout?.cardButton?.borderRadius??ze?.appearance.variables?.borderRadius??8,S=O=>pe("div",{style:{height:O,borderRadius:C,background:"#e5e7eb",animation:"flopay-loading-pulse 1.5s ease-in-out infinite"}});return on(Rr,{children:[on("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[K&&S(No),g&&(I||Ke)&&S(No),g&&S(No),pe("style",{children:"@keyframes flopay-loading-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }"})]}),Cn]})}return on(Rr,{children:[on("div",{style:{display:"flex",justifyContent:"center",padding:32},children:[pe("div",{style:{width:24,height:24,border:"2px solid #e5e7eb",borderTopColor:"#6b7280",borderRadius:"50%",animation:"spin 0.6s linear infinite"}}),pe("style",{children:"@keyframes spin { to { transform: rotate(360deg); } }"})]}),Cn]})}return de?y?pe(cr.Provider,{value:Pn,children:y(de)}):pe(cr.Provider,{value:Pn,children:pe("div",{role:"alert","data-testid":"flopay-load-error",style:{padding:24,textAlign:"center",color:"#dc2626",fontSize:14},children:de.message})}):Pr?on(Rr,{children:[pe(cr.Provider,{value:Pn,children:pe(Vp,{onButtonClick:ct,showPayPal:K,showStripe:g,showApplePay:I,showGooglePay:Ke,theme:Ze,buttonsTheme:Oe,buttonsStyles:Xe,cardButtonContent:Rt,cardBackButtonContent:rt,cardTitleContent:X})}),Cn]}):Yr&&T&&Dn?on(Rr,{children:[pe(cr.Provider,{value:Pn,children:on("div",{className:Ge,style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[yn&&pe(_o,{icon:!1,children:yn}),ke==="retrying"&&pe("div",{role:"status","aria-live":"polite",children:"PayPal is temporarily unavailable. Retrying\u2026"}),ke==="exhausted"&&on("div",{role:"alert",children:[pe("div",{children:"PayPal is temporarily unavailable. Please try again."}),pe("button",{type:"button",onClick:Nr,children:"Retry PayPal"})]}),ke!=="exhausted"&&pe("div",{"aria-hidden":ke==="retrying"?!0:void 0,style:ke==="retrying"?{position:"relative",height:0,opacity:0,pointerEvents:"none"}:void 0,children:pe(Wl,{sessionId:ie,nonce:T.clientSecret||void 0,billingApiUrl:F,email:T.customer?.email||Gt?.account?.email,billingName:[T.customer?.firstName,T.customer?.lastName].filter(Boolean).join(" ")||[Gt?.account?.firstName,Gt?.account?.lastName].filter(Boolean).join(" ")||void 0,onBuyerIdentityReady:jn,clientId:Dn.clientId,environment:Dn.environment,currency:(T.currency??"usd").toUpperCase(),isSubscription:T.mode==="subscription",providerObjectType:Dn.providerObjectType,approvalPresentation:Dn.approvalPresentation,existingOrderId:Dn.existingOrderId,onComplete:v,onErrorChange:Qt,onDecline:N,onCancel:le,onButtonClick:ct,runBeforeButtonClick:Fn,onInitializationStateChange:at,allowAutomaticRetry:zn===0,session:T,telemetry:a,telemetryContext:re,onInstrument:E,debug:Z},`${Se}:paypal-init-${zn}`)})]})}),Cn]}):bn==="confirm"?on(Rr,{children:[pe(cr.Provider,{value:Pn,children:pe(Ga,{flopay:$e,paypalFlopay:P,options:ir??{billingApiUrl:F},onInstrument:E,children:on("div",{className:Ge,children:[yn&&pe("div",{style:{color:"#dc2626",fontSize:"0.875rem",marginBottom:"0.75rem",textAlign:"center"},children:yn}),Le?Le({onConfirm:tn,isProcessing:hn}):pe("button",{type:"button",onClick:tn,disabled:hn,style:{width:"100%",padding:"0.875rem",backgroundColor:"#4A49FF",color:"white",border:"none",borderRadius:"8px",fontSize:"1rem",fontWeight:600,cursor:hn?"not-allowed":"pointer",opacity:hn?.6:1},children:Ln?"Processing...":Ne??"Confirm Purchase"})]})},Se)}),Cn]}):(!$e||!ir)&&!(Wn&&bn==="full")?pe(Rr,{children:Cn}):on(Rr,{children:[pe(cr.Provider,{value:Pn,children:on(Ga,{flopay:$e,paypalFlopay:P,options:ir??{billingApiUrl:F},onInstrument:E,children:[_n===1&&pe("button",{type:"button",onClick:ar,children:"Retry payment methods"}),ae?on(Rr,{children:[yn&&pe("div",{style:{padding:"0.75rem 1rem",marginBottom:"0.75rem",backgroundColor:"#FEF3C7",border:"1px solid #F59E0B",borderRadius:"8px",color:"#92400E",fontSize:"0.875rem"},children:yn}),pe(Hp,{sessionId:ie,nonce:T?.clientSecret||void 0,billingApiUrl:F,session:T,submitLabel:xt,walletPresentation:w,children:ae})]}):pe(us,{sessionId:ie,nonce:T?.clientSecret||void 0,telemetry:a,email:T?.customer?.email||Gt?.account?.email,userId:T?.customer?.id||Gt?.account?.userId,firstName:T?.customer?.firstName||Gt?.account?.firstName,lastName:T?.customer?.lastName||Gt?.account?.lastName,totalAmount:T?Math.round(Ap(T).total*100):0,currency:T?.currency?.toLowerCase()??"usd",onComplete:v,onError:B,onDecline:N,onCancel:le,error:yn,onErrorChange:Qt,showPayPal:K,showStripe:g,walletPresentation:w,enabledPaymentMethods:_n?[]:je??he?.data.stripe?.enabledPaymentMethods??T?.gateways?.stripe?.enabledPaymentMethods,enabledPaymentMethodCountries:he?.data.stripe?.enabledPaymentMethodCountries,showApplePay:I,showGooglePay:Ke,layout:Fe,theme:Ze,buttonsTheme:Oe,buttonsStyles:Xe,appearance:mt,cardButtonContent:Rt,cardBackButtonContent:rt,cardTitleContent:X,onButtonClick:ct,onBeforeButtonClick:Qe,onBuyerIdentityReady:jn,enableAVS:we,...oe?{cardFieldOrder:oe}:{},...ye?{cardPreFormSlot:ye}:{},avsLayout:Pt,country:T?.customer?.country,city:T?.customer?.city,state:T?.customer?.state,onCountryChange:L,onZipChange:Ae,avsCheck:!!we,checkoutType:n?"embedded_checkout":"standard_checkout",checkoutLayout:hs(ae,Fe),className:Ge,submitLabel:xt,directPaypal:Dn,isSubscription:T?.mode==="subscription",session:T,dataAttachmentPending:fn,dataAttachmentRequiresIdentity:Kt,debug:Z})]},Se)}),Cn]})}function Hp({sessionId:e,nonce:t,billingApiUrl:n,session:o,submitLabel:a,walletPresentation:i,children:s}){return pe(Rr,{children:ps.Children.map(s,c=>{if(!ps.isValidElement(c))return c;let y=c.props,v={};return y.sessionId||(v.sessionId=e),!y.nonce&&t&&(v.nonce=t),y.billingApiUrl||(v.billingApiUrl=n),y.submitLabel===void 0&&a!==void 0&&(v.submitLabel=a),y.walletPresentation===void 0&&(v.walletPresentation=i),o?.customer&&(y.email||(v.email=o.customer.email),y.userId||(v.userId=o.customer.id),y.firstName||(v.firstName=o.customer.firstName),y.lastName||(v.lastName=o.customer.lastName)),Object.keys(v).length===0?c:ps.cloneElement(c,v)})})}function Vp({onButtonClick:e,showPayPal:t,showStripe:n=!0,showApplePay:o,showGooglePay:a,theme:i,buttonsTheme:s,buttonsStyles:c,cardButtonContent:y,cardBackButtonContent:v,cardTitleContent:B}){let[R,N]=Ht(!1),le=tr(()=>Lc(i),[i]),L=tr(()=>{let w=le?.buttonsLayout??Dp(s);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},[le,s,c]),Ae=le?.buttonsLayout?.cardButton?.borderRadius??le?.appearance.variables?.borderRadius??8,K=w=>pe("div",{style:{height:w,borderRadius:Ae,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}}),g=y===void 0?{boxSizing:"border-box",height:No,padding:"0 1rem"}:{padding:"0.9rem 1rem"};if(R){let w=L.cardInputBorder??"#e5e7eb",je=L.cardInputBackground??"white",I=Po(v),Ke=Po(B);return on("div",{style:{backgroundColor:L.cardFormContainer?.backgroundColor??"white",borderRadius:"8px",animation:"flopay-interim-expand 0.35s cubic-bezier(0.4, 0, 0.2, 1) both",overflow:"hidden",...L.cardFormContainer},children:[on("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[on("button",{type:"button",onClick:()=>N(!1),"aria-label":"Back to payment methods",style:{display:"inline-flex",alignItems:"center",gap:I?0:"0.5rem",background:"none",border:"none",color:"#4b5563",fontSize:"0.85rem",fontWeight:500,padding:0,flexShrink:0,opacity:1,cursor:"pointer",...L.backButton},children:[pe("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",...L.backButtonIcon},children:pe("svg",{"aria-hidden":"true",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:pe("path",{d:"M15 18l-6-6 6-6"})})}),pe(bo,{content:v})]}),Ke?pe("div",{style:{flex:1}}):pe("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:"1.05rem",color:"#262833",paddingRight:80,...L.title},children:pe(na,{content:B})})]}),pe("div",{style:{backgroundColor:je,border:`1px solid ${w}`,borderTopLeftRadius:8,borderTopRightRadius:8,padding:12,height:45},children:pe("div",{style:{width:"60%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),on("div",{style:{display:"flex"},children:[pe("div",{style:{flex:1,backgroundColor:je,borderTop:"none",borderRight:"none",borderBottom:`1px solid ${w}`,borderLeft:`1px solid ${w}`,borderBottomLeftRadius:8,padding:12,height:45},children:pe("div",{style:{width:"50%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),pe("div",{style:{flex:1,backgroundColor:je,borderTop:"none",borderRight:`1px solid ${w}`,borderBottom:`1px solid ${w}`,borderLeft:`1px solid ${w}`,borderBottomRightRadius:8,padding:12,height:45},children:pe("div",{style:{width:"40%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})})]}),pe("div",{style:{backgroundColor:je,border:`1px solid ${w}`,borderRadius:8,marginTop:8,padding:12,height:45},children:pe("div",{style:{width:"45%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),pe("div",{style:{height:50,borderRadius:8,marginTop:16,background:"#c8c8ff",animation:"flopay-interim-pulse 1.5s ease-in-out infinite",...L.submitButton,opacity:.5}}),pe("style",{children:`
|
|
15
15
|
@keyframes flopay-interim-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }
|
|
16
16
|
@keyframes flopay-interim-expand {
|
|
17
17
|
0% { opacity: 0; max-height: 0; transform: translateY(-12px); }
|
|
18
18
|
40% { opacity: 1; }
|
|
19
19
|
100% { opacity: 1; max-height: 600px; transform: translateY(0); }
|
|
20
20
|
}
|
|
21
|
-
`})]})}return sn("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[t&&G(Oo),n&&(o||a)&&G(Oo),n&&le("button",{type:"button",onClick:()=>{e?.("card"),z(!0)},style:{width:"100%",...v,backgroundColor:"white",color:"#262833",border:"1px solid #d1d5db",borderRadius:"8px",fontSize:O.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,...O.cardButton},onMouseDown:P=>{P.currentTarget.style.transform="scale(0.985)"},onMouseUp:P=>{P.currentTarget.style.transform="scale(1)"},children:le(Po,{content:f})}),le("style",{children:"@keyframes flopay-interim-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }"})]})}import{Fragment as Qp,jsx as ro,jsxs as ey}from"react/jsx-runtime";var Gp=44;function zc(e){return new Promise(t=>setTimeout(t,e))}function Yp(e,t){return e instanceof ba?e:new ba(e instanceof Error?e.message:t,"api_error")}function Jp(e,t){return!(!t||e.type==="validation_error"||e.checkoutMethod&&e.checkoutMethod!=="card"&&e.checkoutMethod!=="paypal")}function Zp(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 Xp({sessionId:e,nonce:t,createSession:n,paymentMethodId:o,checkoutMethod:a,clientId:i,products:s,items:c,subscriptions:f,account:C,successUrl:T,cancelUrl:I,couponCodes:z,tagsData:ie,utmMetadata:O,billingApiUrl:Se,locale:G,theme:v,appearance:P,buttonsTheme:ve,buttonsStyles:N,onSuccess:_e,onError:Y,onDecline:Ne,children:yt,disabled:Be=!1,type:mt="button",style:Nt,...fe}){let Fe=va(()=>Hp(Se),[Se]),bt=va(()=>Zp({createSession:n,clientId:i,products:s,items:c,subscriptions:f,account:C,successUrl:T,cancelUrl:I,couponCodes:z,tagsData:ie,utmMetadata:O}),[C,I,i,z,n,s,c,f,T,ie,O]),[Te,qe]=zo(!1),[Re,ee]=zo(null),[je,lt]=zo(null),[It,rt]=zo(!1),[ce,X]=zo(null),[L,he]=zo(null),$e=Lo(!0),Me=Lo(null),A=Lo(L),Ye=Lo(_e),Je=Lo(Y),Ze=Lo(Ne),We=Fr(m=>Ga(Me,async w=>{try{return await m(w)}catch(Ee){throw w.aborted?To(Ee):Ee}}),[]);No(()=>{A.current=L},[L]),No(()=>{Ye.current=_e},[_e]),No(()=>{Je.current=Y},[Y]),No(()=>{Ze.current=Ne},[Ne]),No(()=>($e.current=!0,()=>{$e.current=!1,Me.current?.abort()}),[]),No(()=>{if(typeof window>"u")return;let m=w=>{w.key==="Escape"&&he(null)};return window.addEventListener("keydown",m),()=>{window.removeEventListener("keydown",m)}},[]);let ze=Fr((m,w=ua)=>{Ze.current?.(yn(w,m,{code:m.code,declineCode:m.declineCode}))},[]),De=Fr(async m=>{$e.current&&(lt(null),rt(m.result.status==="authorized"),ee("success"),await zc(600),$e.current&&Dt(()=>Ye.current?.(m)))},[]),be=Fr(async(m,w)=>{$e.current&&(Je.current?.(m),w?.emitDecline&&ze(m,w.method),lt(m.message),rt(!1),ee("error"),await zc(400))},[ze]),Ct=Fr(async(m,w,Ee)=>{let de=m.data.session??null;if(!de)throw Ur(new ba("No session data returned","api_error"),w);let y=de.clientSecret||t;if(Ar(de)){await De({result:Mr(de,w),session:de,sessionId:de.id||w,autoCompleted:!1});return}if(de.status==="expired")throw Ur(Oa(de),de.id||w);try{if(m.autoProcessingPending){let _=m.autoProcessingPending,F=new bs(Fe),j=await We(wt=>F.waitForCheckoutSessionCompletion(_.sessionId,{initialDelayMs:_.retryAfterMs,nonce:y,statusUrl:_.statusUrl,signal:wt})),et=qr(j,de),St=j.autoProcessingError?.type==="3ds_required"&&j.autoProcessingError.nextActionRedirectUrl?{type:"next_action_required",nextActionRedirectUrl:j.autoProcessingError.nextActionRedirectUrl}:null;if(St&&w&&y){let wt=await We(ct=>Mo(St,{billingApiUrl:Fe,sessionId:w,nonce:y,session:de,signal:ct,telemetry:!0}));await De({result:wt,session:de,sessionId:de.id||w,autoCompleted:!1});return}if(j.autoProcessingError)throw kr(j.autoProcessingError,"Automatic payment failed. Please try again.",{checkoutMethod:j.autoProcessingError.checkoutMethod});if(!Ar(et))throw So(et);await De({result:Mr(et,w),session:et,sessionId:et.id||w,autoCompleted:!1});return}if(m.autoProcessingError){let _=m.autoProcessingError.nextActionRedirectUrl;if(m.autoProcessingError.type==="3ds_required"&&_&&w&&y){let F=await We(wt=>tc({billingApiUrl:Fe,sessionId:w,nonce:y,nextActionRedirectUrl:_,signal:wt}));if(F.status==="declined")throw kr({type:F.declineReason??"decline",message:"Card was declined.",gatewayErrorCode:F.gatewayDeclineReason??void 0},"Card was declined.",{checkoutMethod:m.autoProcessingError.checkoutMethod});let et=await new bs(Fe).waitForCheckoutSessionCompletion(w,{initialDelayMs:0,nonce:y}),St=qr(et,de);if(!Ar(St))throw kr({type:"unknown",message:"Card authentication was not completed."},"Card authentication was not completed.",{checkoutMethod:m.autoProcessingError.checkoutMethod});await De({result:Mr(St,w),session:St,sessionId:St.id||w,autoCompleted:!1});return}throw kr(m.autoProcessingError,"Automatic payment failed. Please try again.",{checkoutMethod:m.autoProcessingError.checkoutMethod})}if(Ee?.fromCreateSession&&m.autoProcessingAttempted===!0)throw kr({type:"unknown",message:"Automatic payment failed. Please try again."},"Automatic payment failed. Please try again.");let re=await Ao({billingApiUrl:Fe,sessionId:w??de.id,session:de,nonce:y});if(re.type==="next_action_required"&&y){let _=w??de.id,F=await We(j=>Mo(re,{billingApiUrl:Fe,sessionId:_,nonce:y,session:de,signal:j,telemetry:!0}));await De({result:F,session:de,sessionId:de.id||_,autoCompleted:!1});return}if(re.type!=="success")throw kr({type:"unknown",message:"Automatic payment failed. Please try again."},"Automatic payment failed. Please try again.");await De({result:re.result,session:de,sessionId:de.id||w,autoCompleted:!1})}catch(re){let _=de.id||w,F=Ur(pa(re),_);if(F.code==="three_ds_aborted")return;if(F.code==="checkout_processing_timeout"){if(!$e.current)return;X(F.message),Dt(()=>Je.current?.(F));return}await be(F,{emitDecline:!0,method:F.checkoutMethod??ua}),Jp(F,_)&&_&&$e.current&&he({sessionId:_,errorMessage:F.message,nonce:y||void 0,payPalOrderId:F.orderId})}},[t,Fe,We,be,De]),Zt=Fr(async m=>{if(fe.onClick?.(m),!(m.defaultPrevented||Be||Te)){if(he(null),X(null),e&&bt){let w=new ba("Provide either sessionId or create-session props, not both.","validation_error");await be(w),$e.current&&(ee(null),lt(null));return}if(!e&&!bt){let w=new ba("Provide a sessionId or the props required to create an automatic payment session.","validation_error");await be(w),$e.current&&(ee(null),lt(null));return}qe(!0),lt(null),rt(!1),ee("processing");try{let w=new bs(Fe);if(e){let Ee=await w.getUnifiedCheckoutSession(e,t);await Ct(Ee,e);return}try{let Ee=await w.createAndFetchSession({...bt});await Ct(Ee,Ee.data.session?.id??null,{fromCreateSession:!0})}catch(Ee){if(Na(Ee)==="session_auto_completed"){await De({result:{status:"succeeded"},session:null,sessionId:null,autoCompleted:!0});return}throw Ee}}catch(w){await be(Ur(Yp(w,"Automatic payment failed. Please try again."),e))}finally{$e.current&&(ee(null),lt(null),qe(!1))}}},[fe.onClick,bt,Be,Te,t,Ct,Fe,e,be,De]),ot=Fr(m=>{let w=A.current;he(null),Ye.current?.({result:m,session:null,sessionId:w?.sessionId??null,autoCompleted:!1})},[]),Lt=Fr(m=>{Je.current?.(m)},[]),E=Fr(m=>{Ze.current?.(m)},[]),ne=va(()=>Kp(v),[v]),Ue=va(()=>{let m=ne?.buttonsLayout??Vp(ve);return N?{...m,...N,cardButton:{...m.cardButton,...N.cardButton}}:m},[ne,ve,N]),M=va(()=>{let m=ne?.appearance;return P?m?{...m,...P,variables:{...m.variables,...P.variables}}:P:m},[P,ne]),se=M?.variables,Xe=se?.colorPrimary??"#4A49FF",we=se?.colorPrimaryHover??Ec(Xe,.12),ht=se?.borderRadius??"8px";return ey(Qp,{children:[ro("button",{...fe,type:mt,onClick:Zt,disabled:Be||Te,"aria-busy":Te,style:{width:"100%",...yt===void 0?{boxSizing:"border-box",height:Gp,padding:"0 1rem"}:{padding:"0.9rem 1rem"},...Ue.cardButton,...cs({themeBundle:ne,resolvedPrimaryColor:Xe,resolvedBorderRadius:ht,submitButtonStyle:Ue.submitButton,explicitPrimaryColor:se?.colorPrimary}),fontSize:Ue.cardButtonFontSize??"0.95rem",fontWeight:600,cursor:Be||Te?"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:Be||Te?.6:1,...Nt},onMouseEnter:m=>{fe.onMouseEnter?.(m),!m.defaultPrevented&&!Be&&!Te&&(ne||se?.colorPrimary)&&(m.currentTarget.style.backgroundColor=we)},onMouseLeave:m=>{fe.onMouseLeave?.(m),!m.defaultPrevented&&(ne||se?.colorPrimary)&&(m.currentTarget.style.backgroundColor=Xe)},onMouseDown:m=>{fe.onMouseDown?.(m),m.defaultPrevented||(m.currentTarget.style.transform="scale(0.985)")},onMouseUp:m=>{fe.onMouseUp?.(m),m.defaultPrevented||(m.currentTarget.style.transform="scale(1)")},children:ro(Po,{content:yt})}),ce&&ro("p",{role:"status","data-testid":"flopay-automatic-payment-pending-notice",style:{margin:"0.5rem 0 0",fontSize:"0.875rem",textAlign:"center"},children:ce}),Re&&ro(Sr,{status:Re,errorMessage:je,authorized:It}),L&&ro("div",{"data-testid":"flopay-automatic-payment-fallback",role:"dialog","aria-modal":"true",onClick:m=>{m.target===m.currentTarget&&he(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:ro("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:ro(vs,{sessionId:L.sessionId,nonce:L.nonce,checkoutMode:"full",billingApiUrl:Fe,locale:G,theme:v,...M?{appearance:M}:{},buttonsTheme:ve,buttonsStyles:N,initialErrorMessage:L.errorMessage,initialPayPalOrderId:L.payPalOrderId,cardTitleContent:null,onComplete:ot,onError:Lt,onDecline:E})})})]})}import{jsx as ry}from"react/jsx-runtime";var ty={StripeSetupMethod:Pl,PayPalSetupMethod:hl};function ny(e){return ry(vl,{...e,branches:ty})}export{$a as DirectPayPalButton,Xp as FloPayAutomaticPaymentButton,od as FloPayCardSetup,rd as FloPayCardSetupError,vs as FloPayCheckout,ny as FloPayPaymentMethodSetup,Ka as FloPayProvider,ds as SplitCardForm,_i as VaultCardFields,Tf as dropThirdPartyOnlyError,Rd as useCheckout,jr as useFloPay,Li as usePayPalFloPay};
|
|
21
|
+
`})]})}return on("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[t&&K(No),n&&(o||a)&&K(No),n&&pe("button",{type:"button",onClick:()=>{e?.("card"),N(!0)},style:{width:"100%",...g,backgroundColor:"white",color:"#262833",border:"1px solid #d1d5db",borderRadius:"8px",fontSize:L.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,...L.cardButton},onMouseDown:w=>{w.currentTarget.style.transform="scale(0.985)"},onMouseUp:w=>{w.currentTarget.style.transform="scale(1)"},children:pe(vo,{content:y})}),pe("style",{children:"@keyframes flopay-interim-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }"})]})}import{Fragment as ty,jsx as ao,jsxs as ny}from"react/jsx-runtime";var Jp=44;function Uc(e){return new Promise(t=>setTimeout(t,e))}function Zp(e,t){return e instanceof Ca?e:new Ca(e instanceof Error?e.message:t,"api_error")}function Xp(e,t){return!(!t||e.type==="validation_error"||e.checkoutMethod&&e.checkoutMethod!=="card"&&e.checkoutMethod!=="paypal")}function Qp(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 ey({sessionId:e,nonce:t,createSession:n,paymentMethodId:o,checkoutMethod:a,clientId:i,products:s,items:c,subscriptions:y,account:v,successUrl:B,cancelUrl:R,couponCodes:N,tagsData:le,utmMetadata:L,billingApiUrl:Ae,locale:K,theme:g,appearance:w,buttonsTheme:je,buttonsStyles:I,onSuccess:Ke,onError:Z,onDecline:Fe,children:Ze,disabled:Oe=!1,type:Xe="button",style:Rt,...rt}){let X=ba(()=>Kp(Ae),[Ae]),At=ba(()=>Qp({createSession:n,clientId:i,products:s,items:c,subscriptions:y,account:v,successUrl:B,cancelUrl:R,couponCodes:N,tagsData:le,utmMetadata:L}),[v,R,i,N,n,s,c,y,B,le,L]),[ct,Qe]=Uo(!1),[we,oe]=Uo(null),[ye,Pt]=Uo(null),[xt,Ge]=Uo(!1),[Q,xe]=Uo(null),[ae,z]=Uo(null),Ne=zo(!0),Le=zo(null),De=zo(ae),F=zo(Ke),ze=zo(Z),mt=zo(Fe),_e=Or(f=>Ya(Le,async b=>{try{return await f(b)}catch(Re){throw b.aborted?Mo(Re):Re}}),[]);Lo(()=>{De.current=ae},[ae]),Lo(()=>{F.current=Ke},[Ke]),Lo(()=>{ze.current=Z},[Z]),Lo(()=>{mt.current=Fe},[Fe]),Lo(()=>(Ne.current=!0,()=>{Ne.current=!1,Le.current?.abort()}),[]),Lo(()=>{if(typeof window>"u")return;let f=b=>{b.key==="Escape"&&z(null)};return window.addEventListener("keydown",f),()=>{window.removeEventListener("keydown",f)}},[]);let ft=Or((f,b=pa)=>{mt.current?.(dn(b,f,{code:f.code,declineCode:f.declineCode}))},[]),he=Or(async f=>{Ne.current&&(Pt(null),Ge(f.result.status==="authorized"),oe("success"),await Uc(600),Ne.current&&zt(()=>F.current?.(f)))},[]),Ue=Or(async(f,b)=>{Ne.current&&(ze.current?.(f),b?.emitDecline&&ft(f,b.method),Pt(f.message),Ge(!1),oe("error"),await Uc(400))},[ft]),$e=Or(async(f,b,Re)=>{let ve=f.data.session??null;if(!ve)throw qr(new Ca("No session data returned","api_error"),b);let p=ve.clientSecret||t;if(Br(ve)){await he({result:xr(ve,b),session:ve,sessionId:ve.id||b,autoCompleted:!1});return}if(ve.status==="expired")throw qr(Na(ve),ve.id||b);try{if(f.autoProcessingPending){let E=f.autoProcessingPending,M=new Cs(X),be=await _e(gt=>M.waitForCheckoutSessionCompletion(E.sessionId,{initialDelayMs:E.retryAfterMs,nonce:p,statusUrl:E.statusUrl,signal:gt})),ie=jr(be,ve),an=be.autoProcessingError?.type==="3ds_required"&&be.autoProcessingError.nextActionRedirectUrl?{type:"next_action_required",nextActionRedirectUrl:be.autoProcessingError.nextActionRedirectUrl}:null;if(an&&b&&p){let gt=await _e(Xt=>Ao(an,{billingApiUrl:X,sessionId:b,nonce:p,session:ve,signal:Xt,telemetry:!0}));await he({result:gt,session:ve,sessionId:ve.id||b,autoCompleted:!1});return}if(be.autoProcessingError)throw kr(be.autoProcessingError,"Automatic payment failed. Please try again.",{checkoutMethod:be.autoProcessingError.checkoutMethod});if(!Br(ie))throw wo(ie);await he({result:xr(ie,b),session:ie,sessionId:ie.id||b,autoCompleted:!1});return}if(f.autoProcessingError){let E=f.autoProcessingError.nextActionRedirectUrl;if(f.autoProcessingError.type==="3ds_required"&&E&&b&&p){let M=await _e(gt=>nc({billingApiUrl:X,sessionId:b,nonce:p,nextActionRedirectUrl:E,signal:gt}));if(M.status==="declined")throw kr({type:M.declineReason??"decline",message:"Card was declined.",gatewayErrorCode:M.gatewayDeclineReason??void 0},"Card was declined.",{checkoutMethod:f.autoProcessingError.checkoutMethod});let ie=await new Cs(X).waitForCheckoutSessionCompletion(b,{initialDelayMs:0,nonce:p}),an=jr(ie,ve);if(!Br(an))throw kr({type:"unknown",message:"Card authentication was not completed."},"Card authentication was not completed.",{checkoutMethod:f.autoProcessingError.checkoutMethod});await he({result:xr(an,b),session:an,sessionId:an.id||b,autoCompleted:!1});return}throw kr(f.autoProcessingError,"Automatic payment failed. Please try again.",{checkoutMethod:f.autoProcessingError.checkoutMethod})}if(Re?.fromCreateSession&&f.autoProcessingAttempted===!0)throw kr({type:"unknown",message:"Automatic payment failed. Please try again."},"Automatic payment failed. Please try again.");let G=await xo({billingApiUrl:X,sessionId:b??ve.id,session:ve,nonce:p});if(G.type==="next_action_required"&&p){let E=b??ve.id,M=await _e(be=>Ao(G,{billingApiUrl:X,sessionId:E,nonce:p,session:ve,signal:be,telemetry:!0}));await he({result:M,session:ve,sessionId:ve.id||E,autoCompleted:!1});return}if(G.type!=="success")throw kr({type:"unknown",message:"Automatic payment failed. Please try again."},"Automatic payment failed. Please try again.");await he({result:G.result,session:ve,sessionId:ve.id||b,autoCompleted:!1})}catch(G){let E=ve.id||b,M=qr(ya(G),E);if(M.code==="three_ds_aborted")return;if(M.code==="checkout_processing_timeout"){if(!Ne.current)return;xe(M.message),zt(()=>ze.current?.(M));return}await Ue(M,{emitDecline:!0,method:M.checkoutMethod??pa}),Xp(M,E)&&E&&Ne.current&&z({sessionId:E,errorMessage:M.message,nonce:p||void 0,payPalOrderId:M.orderId})}},[t,X,_e,Ue,he]),pn=Or(async f=>{if(rt.onClick?.(f),!(f.defaultPrevented||Oe||ct)){if(z(null),xe(null),e&&At){let b=new Ca("Provide either sessionId or create-session props, not both.","validation_error");await Ue(b),Ne.current&&(oe(null),Pt(null));return}if(!e&&!At){let b=new Ca("Provide a sessionId or the props required to create an automatic payment session.","validation_error");await Ue(b),Ne.current&&(oe(null),Pt(null));return}Qe(!0),Pt(null),Ge(!1),oe("processing");try{let b=new Cs(X);if(e){let Re=await b.getUnifiedCheckoutSession(e,t);await $e(Re,e);return}try{let Re=await b.createAndFetchSession({...At});await $e(Re,Re.data.session?.id??null,{fromCreateSession:!0})}catch(Re){if(La(Re)==="session_auto_completed"){await he({result:{status:"succeeded"},session:null,sessionId:null,autoCompleted:!0});return}throw Re}}catch(b){await Ue(qr(Zp(b,"Automatic payment failed. Please try again."),e))}finally{Ne.current&&(oe(null),Pt(null),Qe(!1))}}},[rt.onClick,At,Oe,ct,t,$e,X,e,Ue,he]),Bt=Or(f=>{let b=De.current;z(null),F.current?.({result:f,session:null,sessionId:b?.sessionId??null,autoCompleted:!1})},[]),vt=Or(f=>{ze.current?.(f)},[]),ce=Or(f=>{mt.current?.(f)},[]),P=ba(()=>Yp(g),[g]),ot=ba(()=>{let f=P?.buttonsLayout??Gp(je);return I?{...f,...I,cardButton:{...f.cardButton,...I.cardButton}}:f},[P,je,I]),et=ba(()=>{let f=P?.appearance;return w?f?{...f,...w,variables:{...f.variables,...w.variables}}:w:f},[w,P]),T=et?.variables,Pe=T?.colorPrimary??"#4A49FF",Ft=T?.colorPrimaryHover??_c(Pe,.12),Se=T?.borderRadius??"8px";return ny(ty,{children:[ao("button",{...rt,type:Xe,onClick:pn,disabled:Oe||ct,"aria-busy":ct,style:{width:"100%",...Ze===void 0?{boxSizing:"border-box",height:Jp,padding:"0 1rem"}:{padding:"0.9rem 1rem"},...ot.cardButton,...ds({themeBundle:P,resolvedPrimaryColor:Pe,resolvedBorderRadius:Se,submitButtonStyle:ot.submitButton,explicitPrimaryColor:T?.colorPrimary}),fontSize:ot.cardButtonFontSize??"0.95rem",fontWeight:600,cursor:Oe||ct?"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:Oe||ct?.6:1,...Rt},onMouseEnter:f=>{rt.onMouseEnter?.(f),!f.defaultPrevented&&!Oe&&!ct&&(P||T?.colorPrimary)&&(f.currentTarget.style.backgroundColor=Ft)},onMouseLeave:f=>{rt.onMouseLeave?.(f),!f.defaultPrevented&&(P||T?.colorPrimary)&&(f.currentTarget.style.backgroundColor=Pe)},onMouseDown:f=>{rt.onMouseDown?.(f),f.defaultPrevented||(f.currentTarget.style.transform="scale(0.985)")},onMouseUp:f=>{rt.onMouseUp?.(f),f.defaultPrevented||(f.currentTarget.style.transform="scale(1)")},children:ao(vo,{content:Ze})}),Q&&ao("p",{role:"status","data-testid":"flopay-automatic-payment-pending-notice",style:{margin:"0.5rem 0 0",fontSize:"0.875rem",textAlign:"center"},children:Q}),we&&ao(Sr,{status:we,errorMessage:ye,authorized:xt}),ae&&ao("div",{"data-testid":"flopay-automatic-payment-fallback",role:"dialog","aria-modal":"true",onClick:f=>{f.target===f.currentTarget&&z(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:ao("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:ao(bs,{sessionId:ae.sessionId,nonce:ae.nonce,checkoutMode:"full",billingApiUrl:X,locale:K,theme:g,...et?{appearance:et}:{},buttonsTheme:je,buttonsStyles:I,initialErrorMessage:ae.errorMessage,initialPayPalOrderId:ae.payPalOrderId,cardTitleContent:null,onComplete:Bt,onError:vt,onDecline:ce})})})]})}import{jsx as ay}from"react/jsx-runtime";var ry={StripeSetupMethod:vl,PayPalSetupMethod:Pl};function oy(e){return ay(bl,{...e,branches:ry})}export{Wa as DirectPayPalButton,ey as FloPayAutomaticPaymentButton,ad as FloPayCardSetup,od as FloPayCardSetupError,bs as FloPayCheckout,oy as FloPayPaymentMethodSetup,Ga as FloPayProvider,us as SplitCardForm,Ti as VaultCardFields,Af as dropThirdPartyOnlyError,Ed as useCheckout,$r as useFloPay,zi as usePayPalFloPay};
|