@flopay/react 1.9.29 → 1.9.30
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 +3 -3
- package/dist/index.cjs +9 -9
- package/dist/index.mjs +8 -8
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
"use strict";var Dc=Object.create;var Ea=Object.defineProperty;var Oc=Object.getOwnPropertyDescriptor;var Lc=Object.getOwnPropertyNames;var Nc=Object.getPrototypeOf,zc=Object.prototype.hasOwnProperty;var Uc=(e,t)=>{for(var n in t)Ea(e,n,{get:t[n],enumerable:!0})},Xs=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Lc(t))!zc.call(e,o)&&o!==n&&Ea(e,o,{get:()=>t[o],enumerable:!(r=Oc(t,o))||r.enumerable});return e};var Js=(e,t,n)=>(n=e!=null?Dc(Nc(e)):{},Xs(t||!e||!e.__esModule?Ea(n,"default",{value:e,enumerable:!0}):n,e)),qc=e=>Xs(Ea({},"__esModule",{value:!0}),e);var wu={};Uc(wu,{DirectPayPalButton:()=>na,FloPayAutomaticPaymentButton:()=>pc,FloPayCardSetup:()=>gc,FloPayCardSetupError:()=>ga,FloPayCheckout:()=>si,FloPayProvider:()=>oa,SplitCardForm:()=>ri,VaultCardFields:()=>Mo,dropThirdPartyOnlyError:()=>hc.dropThirdPartyOnlyError,useCheckout:()=>dl,useFloPay:()=>Ur,usePayPalFloPay:()=>Ba});module.exports=qc(wu);var hc=require("@flopay/shared");var li=require("@flopay/js"),nr=require("@flopay/shared"),Qe=require("react");var Lt=require("react/jsx-runtime");function $c(){return(0,Lt.jsxs)(Lt.Fragment,{children:[(0,Lt.jsxs)("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,Lt.jsx)("rect",{width:"20",height:"14",x:"2",y:"5",rx:"2"}),(0,Lt.jsx)("line",{x1:"2",x2:"22",y1:"10",y2:"10"})]}),"Credit / Debit Card",(0,Lt.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"#9ca3af",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{position:"absolute",right:"1rem"},"aria-hidden":"true",children:(0,Lt.jsx)("path",{d:"M9 18l6-6-6-6"})})]})}function jc(){return(0,Lt.jsx)(Lt.Fragment,{children:"Go back"})}function Vc(){return(0,Lt.jsx)(Lt.Fragment,{children:"Secure card checkout"})}function go(e){return e!==void 0&&(e===""||e===null||e===!1)}function ho({content:e}){return(0,Lt.jsx)(Lt.Fragment,{children:e===void 0?(0,Lt.jsx)($c,{}):e})}function bo({content:e}){return(0,Lt.jsx)(Lt.Fragment,{children:e===void 0?(0,Lt.jsx)(jc,{}):e})}function Go({content:e}){return(0,Lt.jsx)(Lt.Fragment,{children:e===void 0?(0,Lt.jsx)(Vc,{}):e})}var Pt=require("@flopay/shared"),Wc="Checkout is temporarily unavailable. Please try again later.";function _i(e){return{errorCode:"PROVIDER_LOAD_FAILED",failureCategory:e instanceof Pt.FloPayError&&e.type==="authentication_error"?"invalid_response":"provider_runtime",stage:"provider_load",provider:"stripe",requestCategory:"provider_sdk"}}function Hc(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 Zs(){return new Pt.FloPayError(Wc,"api_error",{code:"CheckoutInitializationFailed"})}function Ei(e){return!!e?.gateways?.worldpayCorporateGateway}function Wr(e){return e?.status==="open"&&Ei(e)}function Qs(e,t,n){let r=e?.data.session,o=r?.gateways?.stripe?.enabledPaymentMethods??e?.data.stripe?.enabledPaymentMethods;return!!(n&&(r?.vault?.html||r?.gateways?.pcivault||o?.includes("card")||Wr(r))||t&&e?.data.paypal?.publishableKey)}function el(e,t){if(t&&(!(e instanceof Pt.FloPayError)||e.type==="authentication_error"))return _i(e);if(!(e instanceof Pt.FloPayError&&Hc(e))){if(!t&&!(e instanceof Pt.FloPayError)&&(e instanceof TypeError||e instanceof SyntaxError))return{...(0,Pt.classifyTelemetryFailure)(e,"NETWORK_REQUEST_FAILED"),stage:"session_read",requestCategory:"session_read"};if(!t&&e instanceof Pt.FloPayError)return{errorCode:"NETWORK_REQUEST_FAILED",stage:"session_read",requestCategory:"session_read"};if(!(e instanceof Pt.FloPayError))return{errorCode:"INTERNAL_SDK_ERROR",stage:"checkout_mount"}}}function Po(e,t,n,r={}){let o;return(a={})=>{if(o)return o;let l={...r,...a,email:a.email?.trim()||r.email?.trim()},d=(0,Pt.isCardHolderNamePlaceholder)(l.firstName,l.lastName);if(!(0,Pt.isValidEmail)(l.email))return Promise.reject(new Pt.FloPayError("A valid buyer email is required before claiming checkout.","validation_error",{code:"BuyerEmailCollectionRequired",param:"account.email"}));let u={};for(let[p,b]of Object.entries(l)){if(d&&p.endsWith("Name")||typeof b!="string")continue;let v=b.trim();v&&(u[p]=v)}return o=e.claimCheckoutSession(t,n,{accountData:u}),o.catch(()=>{}),o}}function tl(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 Ti(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 nl(e,t){let n=e.products??[...(e.subscriptions??[]).map(a=>({type:"subscription",code:a.code??a.providerPlanId,name:a.subscriptionName??a.providerPlanName??a.code??a.providerPlanId??null,quantity:a.quantity??1,totalAmount:a.totalAmount,overrideAmount:a.overrideAmount,currency:a.currency,metadata:a.metadata})),...(e.items??[]).map(a=>({type:"item",code:a.code??a.providerItemId,name:a.itemName??a.providerItemName??a.code??a.providerItemId??null,quantity:a.quantity??1,totalAmount:a.totalAmount,overrideAmount:a.overrideAmount,currency:a.currency,metadata:a.metadata}))],r=n.reduce((a,l)=>a+(l.overrideAmount??l.totalAmount??0),0),o=e.currency??n.find(a=>a.currency)?.currency??"USD";return{id:"",clientSecret:"",mode:n.some(a=>a.type==="subscription")?"subscription":"payment",amount:Math.round(r*100),currency:o,status:"open",captureMethod:e.captureMethod,customer:{id:e.account.userId,email:e.account.email??"",firstName:e.account.firstName,lastName:e.account.lastName,gender:e.account.gender??void 0,city:e.account.city??void 0,state:e.account.state??void 0,country:e.account.country??void 0,zip:e.account.zip??void 0},successUrl:e.successUrl,cancelUrl:e.cancelUrl,checkoutMode:t??e.checkoutMode??"full",products:n.map((a,l)=>({uuid:`synthetic-${a.type??"item"}-${l}`,checkoutSessionId:"",type:a.type??"item",code:a.code,name:a.name??null,quantity:a.quantity??1,totalAmount:a.totalAmount,overrideAmount:a.overrideAmount??null,currency:a.currency??o,metadata:a.metadata??null}))}}function eo(e){if((0,Pt.isCardHolderNamePlaceholder)(e))return{};let[t,...n]=e?.trim().split(/\s+/)??[];return t?{firstName:t,lastName:n.join(" ")||void 0}:{}}function Ai(e,t){return t?{...e,...t}:e}function cn(e,t,n){let r=typeof t=="string"?t:t.message,o=typeof t=="string"?n?.code:n?.code??t.code,a=typeof t=="string"?n?.declineCode:n?.declineCode??t.declineCode;return{method:e,message:r,...o?{code:o}:{},...a?{declineCode:a}:{}}}var Kc=[{match:/^paypal authorization required\.?$/i,replacement:"For your additional security, please re-authenticate this payment via PayPal."}];function Hr(e){if(typeof e!="string")return e??void 0;let t=e.trim();if(!t)return e;for(let{match:n,replacement:r}of Kc)if(n.test(t))return r;return e}function Lr(e,t){return e.status!=="authorized"?{status:"succeeded"}:{status:"authorized",paymentId:e.paymentId,sessionId:e.id||t||void 0,authorizationExpiresAt:e.authorizationExpiresAt}}function Nr(e){return e?.status==="authorized"||e?.status==="complete"}function Kr(e,t){if(e.data.session)return e.data.session;let n=e.raw,r=n?.latestTransactionAttempt?.result,o=n?.status==="authorized"||r==="AUTHORIZED";return o||n?.status==="completed"||r==="SUCCESS"?{...t,status:o?"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 Ta(e){let t=rl(e);return new Pt.FloPayError(t?"Authorization has expired.":"Checkout session has expired.","api_error",{code:t?"authorization_expired":"checkout_session_expired"})}function Aa(e){return e instanceof Pt.FloPayError||typeof e=="object"&&e!==null&&"code"in e?e.code:void 0}function vo(e){return rl(e)?new Pt.FloPayError("Authorization has expired.","api_error",{code:"authorization_expired"}):e?.status==="expired"?new Pt.FloPayError("Automatic payment failed. Please try again.","api_error",{code:"checkout_session_expired"}):new Pt.FloPayError(Pt.CHECKOUT_PROCESSING_TIMEOUT_MESSAGE,"api_error",{code:"checkout_processing_timeout"})}function Yo(e,t){return e==="processing"||(0,Pt.isMoneySettledOutcome)(e,t)}function ol(e){return e==="succeeded"?"succeeded":e==="processing"||e==="requires_capture"?"processing":"failed"}async function al(e,t){let n=e;if((0,Pt.isSetupIntentClientSecret)(t)){if(!n?.retrieveSetupIntent)return null;let{setupIntent:a,error:l}=await n.retrieveSetupIntent(t);if(l)throw new Pt.FloPayError(l.message??"Failed to retrieve setup intent.","api_error",{...l.code?{code:l.code}:{}});return a??null}if(!n?.retrievePaymentIntent)return null;let{paymentIntent:r,error:o}=await n.retrievePaymentIntent(t);if(o)throw new Pt.FloPayError(o.message??"Failed to retrieve payment intent.","api_error",{...o.code?{code:o.code}:{}});return r??null}function il(e,t="automatic"){return{...typeof e=="number"&&Number.isFinite(e)&&e>0?{mode:"payment",amount:e,captureMethod:t==="manual"?"manual":"automatic_async"}:{mode:"setup"},paymentMethodTypes:["card"],setupFutureUsage:"off_session"}}function xi(e){let t=e&&typeof e=="object"?e:null;return t?.name==="IntegrationError"||t?.code==="elements_intent_mismatch"||t?.type==="invalid_request_error"?{errorCode:"CONFIGURATION_INVALID",failureCategory:"invalid_response"}:{errorCode:"PROVIDER_RUNTIME_FAILED",failureCategory:"provider_runtime"}}function Xo(e){let t=[e?.id,e?.originalPaymentMethodId];for(let n of t)if(typeof n=="string"&&n.startsWith("pm_"))return n}var $r=require("@flopay/js"),Xe=require("@flopay/shared"),C=Js(require("react"),1);var Mi=require("react"),Zn=(0,Mi.createContext)({flopay:null,paypalFlopay:null,billingApiUrl:""}),pr=(0,Mi.createContext)({session:null,loading:!1,error:null});var Na=require("@flopay/js"),qt=require("@flopay/shared"),gl=require("@paypal/paypal-js"),k=require("react");var sl=require("@flopay/shared"),mr=require("react"),zr=require("react/jsx-runtime");function Bn(e,t=!1){let{firstName:n,lastName:r,...o}=e,a=n?.trim(),l=r?.trim();return{...o,...a||t?{firstName:a??""}:{},...l||t?{lastName:l??""}:{}}}function Co(){let[e,t]=(0,mr.useState)(null),n=(0,mr.useRef)(null),r=(0,mr.useRef)(0),o=(0,mr.useCallback)((l,d)=>(n.current?.(null),r.current+=1,t({id:r.current,methodLabel:l,identity:d}),new Promise(u=>{n.current=u})),[]),a=(0,mr.useCallback)(l=>{let d=n.current;n.current=null,t(null),d?.(l)},[]);return(0,mr.useEffect)(()=>()=>{n.current?.(null),n.current=null},[]),{request:e,collect:o,finish:a}}function So({identity:e,methodLabel:t,onComplete:n,onCancel:r,submitting:o=!1,testId:a="flopay-buyer-identity-pane"}){let[l,d]=(0,mr.useState)(e.email?.trim()??""),u=(0,sl.isValidEmail)(l.trim());return(0,zr.jsxs)("div",{"data-testid":a,style:{display:"flex",flexDirection:"column",gap:"0.75rem",padding:"0.875rem",border:"1px solid #d1d5db",borderRadius:8,background:"#fff",color:"#262833"},children:[(0,zr.jsxs)("div",{style:{fontWeight:700},children:["Continue with ",t]}),(0,zr.jsxs)("label",{style:{display:"flex",flexDirection:"column",gap:"0.375rem"},children:["Email address",(0,zr.jsx)("input",{type:"email",autoComplete:"email","data-testid":"flopay-email",required:!0,value:l,onChange:p=>d(p.target.value),style:{minHeight:42,padding:"0 0.75rem",border:"1px solid #d1d5db",borderRadius:6}})]}),(0,zr.jsxs)("div",{style:{display:"flex",gap:"0.5rem"},children:[r&&(0,zr.jsx)("button",{type:"button",onClick:r,style:{flex:1,minHeight:42},children:"Cancel"}),(0,zr.jsxs)("button",{type:"button",disabled:!u||o,onClick:()=>{n(Bn({...e,email:l.trim()}))},style:{flex:2,minHeight:42},children:["Continue with ",t]})]})]})}var Gc=new Set(["err_blocked_by_client","notallowederror","popup_blocked","popupblocked"]),Yc=["https://www.paypal.com","https://www.sandbox.paypal.com"];function xa(e,t,n){let r=`We couldn't open ${e}. Try again or choose another payment method.`;return t?n?`${r} Open this page in your system browser, then try again.`:`${r} Allow pop-ups for this site, then try again.`:r}function ll(e){if(e instanceof Error)return e.message;if(typeof e=="object"&&e!==null){let t=e.message;return typeof t=="string"?t:void 0}return typeof e=="string"?e:void 0}function to(e){if(typeof e!="string")return;let t=e.trim();return/^[a-z0-9_.-]{1,64}$/i.test(t)?t:void 0}function _r(e){if(typeof e!="object"||e===null)return;let t=e;return to(t.code)??to(t.type)??to(t.name)}function wo(e){if(!(typeof e!="object"||e===null))return to(e.decline_code)}function Jo(e){return typeof e!="object"||e===null?!1:to(e.type)?.toLowerCase()==="card_error"||wo(e)!==void 0}function Xc(e){let t=ll(e)?.toLowerCase()??"",n=_r(e)?.toLowerCase()??"";return Gc.has(n)?!0:/(?:popup|pop-up).{0,40}(?:block|denied|prevent)/i.test(t)||/(?:block|denied|prevent).{0,40}(?:popup|pop-up)/i.test(t)}function Bi(e){if(_r(e)?.toLowerCase()==="paypal_init_timeout")return!0;let n=ll(e)??"";return n.includes("No ack for postMessage init()")&&Yc.some(r=>n.includes(r))&&n.includes("10000ms")}function Ma(e,t){if(Jo(e))return{errorCode:"PROVIDER_RUNTIME_FAILED",popupBlocked:!1,providerDeclined:!0,terminalReason:"provider_declined"};let r=Xc(e)||t.inAppBrowser&&!t.handoffObserved&&Bi(e);return{errorCode:r?"POPUP_BLOCKED":"PROVIDER_RUNTIME_FAILED",popupBlocked:r,providerDeclined:!1,terminalReason:r?"popup_blocked":"provider_error"}}function Gr(e){return Ma(e,{inAppBrowser:!1,handoffObserved:!1}).popupBlocked}var cl=require("@flopay/shared"),Zo=require("react");function Ur(){return(0,Zo.useContext)(Zn).flopay}function Ba(){return(0,Zo.useContext)(Zn).paypalFlopay??null}function dl(){return(0,Zo.useContext)(pr)}function ul(){return(0,Zo.useContext)(Zn).billingApiUrl||(0,cl.resolveBillingApiUrl)()}function Qo(e){let t=e??(typeof navigator>"u"?"":navigator.userAgent),n=r=>({inAppBrowser:r!=="none",appFamily:r,popupCapability:"unknown"});return t?/FBAN|FBAV|FB_IAB|FBIOS/i.test(t)?n("facebook"):/Instagram/i.test(t)?n("instagram"):/musical_ly|BytedanceWebview|TikTok/i.test(t)?n("tiktok"):/Twitter|Snapchat|Pinterest|LinkedInApp|Line\/|MicroMessenger|GSA\//i.test(t)?n("other_in_app"):/Android.*;\s?wv\)/.test(t)||/(iPhone|iPad|iPod).*AppleWebKit(?!.*Safari)/.test(t)?n("generic_webview"):n("none"):n("none")}function pl(e,t,n=e.popupCapability){return e.inAppBrowser||n==="blocked"||t==="prefer_redirect"?"redirect":"popup"}function Fa(e,t,n){return!e.inAppBrowser||n!=="order"?"popup":t==="app_switch"||t==="redirect"?t:"popup"}var ml=require("@flopay/shared"),ro=require("react");function st(e){if(!e)return;let t=n=>{console.error("[FloPay] Merchant callback failed; checkout continued.",n)};try{Promise.resolve(e()).catch(t)}catch(n){t(n)}}var Da=require("react"),no=typeof window>"u"?Da.useEffect:Da.useLayoutEffect;var Jc={"checkout.mount":"checkout_mount","sdk.initialize.ready":"sdk_loaded","provider.ready":"sdk_loaded","checkout.rendered":"form_rendered","vault.widget.ready":"form_rendered","vault.submission.started":"tokenize","payment.tokenization.started":"tokenize","payment.processing.started":"process_attempt","payment.intent.started":"process_attempt","vault.action.required":"3ds_challenge","payment.three_ds.handoff":"3ds_challenge"};function Zc(e){return e==="stripe"||e==="paypal"?e:void 0}function Qc(e){let t=Zc(e.provider),n={schemaVersion:ml.FLO_INSTRUMENT_SCHEMA_VERSION,...t?{gateway:t}:{}};if(e.class==="lifecycle"){let r=Jc[e.name];return r?{...n,name:r}:null}return e.class==="card_surface"?{...n,name:"card_expanded"}:e.errorCode==="CHECKOUT_SESSION_CREATE_FAILED"?{...n,name:"checkout_error",phase:"session_create"}:e.errorCode==="SDK_INITIALIZATION_FAILED"||e.errorCode==="PROVIDER_LOAD_FAILED"?{...n,name:"checkout_error",phase:"sdk_load"}:e.errorCode==="PAYMENT_PROCESSING_FAILED"?{...n,name:"checkout_error",phase:e.requestCategory==="intent_create"?"wallets":"process"}:null}var Fi=new Set(["checkout_mount","sdk_loaded","form_rendered","card_expanded"]);function ko(e,t){let n=(0,ro.useRef)(e);n.current=e;let r=(0,ro.useRef)(new Set),o=(0,ro.useRef)(t),a=(0,ro.useRef)(t);return no(()=>{a.current=t,o.current!==t&&(o.current=t,r.current.clear())},[t]),(0,ro.useCallback)(l=>{if(a.current!==t)return;let d=Qc(l);if(d){if(Fi.has(d.name)){if(r.current.has(d.name))return;r.current.add(d.name)}st(()=>n.current?.(d))}},[t])}var yl=require("react"),ea=(0,yl.createContext)(null);function Oa(){let e="unknown";return{current:()=>e,markAvailable:()=>e!=="unknown"?!1:(e="available",!0),markBlocked:()=>e==="blocked"?!1:(e="blocked",!0)}}var ed=Symbol.for("@flopay/js.telemetry.bridge.v1"),td=Symbol.for("@flopay/js.telemetry.reporter-factory.v1");function nd(){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 rd(e){let t=nd(),n=(o,a)=>o?o.bind(e):a,r=n(e.now,t.now);return{error:n(e.error,t.error),log:n(e.log,t.log),performance:n(e.performance,t.performance),terminal:n(e.terminal,t.terminal),now:r,elapsed:e.elapsed?e.elapsed.bind(e):o=>Math.max(0,r()-o),setCheckoutContext:n(e.setCheckoutContext,t.setCheckoutContext),beginCheckout:n(e.beginCheckout,t.beginCheckout),disable:n(e.disable,t.disable),subscribe:n(e.subscribe,t.subscribe),flush:n(e.flush,t.flush),destroy:n(e.destroy,t.destroy)}}function La(e){let t=globalThis[td];return rd(t?.(e)??{})}function dn(e){if(e)return e[ed]}var un=require("react");function ta(e,t){let n=(0,un.useRef)(0),r=(0,un.useRef)(null),o=(0,un.useRef)(null),a=(0,un.useRef)(e),l=(0,un.useRef)(t?.onHandoffObserved);(0,un.useEffect)(()=>{a.current=e,l.current=t?.onHandoffObserved},[e,t?.onHandoffObserved]);let d=(0,un.useCallback)((h=o.current)=>{h?.timer&&(clearTimeout(h.timer),h.timer=null)},[]),u=(0,un.useCallback)(h=>{d();let O=n.current+1;return n.current=O,r.current=null,o.current={generation:O,method:h,timer:null,yieldedControl:!1},O},[d]),p=(0,un.useCallback)(h=>{let O=o.current;return h!==void 0&&O?.generation!==h?!1:(d(O),o.current=null,(h===void 0||r.current===h)&&(r.current=null),!0)},[d]),b=(0,un.useCallback)(h=>{let O=o.current,G=h??O?.generation??n.current;(h===void 0||O?.generation===h)&&(d(O),o.current=null),r.current=G},[d]),v=(0,un.useCallback)(h=>r.current===(h??n.current),[]),M=(0,un.useCallback)(h=>o.current?.generation===h&&r.current!==h,[]),I=(0,un.useCallback)(()=>{let h=o.current;h&&(d(h),!h.yieldedControl&&(h.yieldedControl=!0,l.current?.(h.method)))},[d]),w=(0,un.useCallback)(()=>{let h=o.current;!h?.yieldedControl||document.visibilityState!=="visible"||(d(h),h.timer=setTimeout(()=>{h.timer=null,o.current?.generation===h.generation&&(o.current=null,r.current=h.generation,a.current(h.method,new Error("External payment method returned without a terminal callback."),{code:"external_method_missing_terminal_callback"}))},600))},[d]);return(0,un.useEffect)(()=>{let h=()=>{document.visibilityState==="visible"?w():I()};return document.addEventListener("visibilitychange",h),window.addEventListener("blur",I),window.addEventListener("focus",w),()=>{document.removeEventListener("visibilitychange",h),window.removeEventListener("blur",I),window.removeEventListener("focus",w),d()}},[d,I,w]),{startAttempt:u,finishAttempt:p,invalidateAttempt:b,isAttemptInvalidated:v,isAttemptCurrent:M,generationRef:n}}var Qn=require("react/jsx-runtime"),za=45,od=1e3,ad=11e3,id={width:"100%",minHeight:za,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"},sd={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 ld(e){return!e.generationActive||e.kind==="teardown"?{action:"ignore"}:e.kind==="ineligible"?{action:"unavailable"}:e.automaticRetryAllowed&&!e.automaticRetryUsed?{action:"retry"}:{action:"exhaust",report:sd[e.kind]??null}}function fl(e,t){return e==="watchdog_expired"?"paypal_render_timeout":Bi(t)?"paypal_init_timeout":"paypal_init_failure"}function cd(e){let t=e,n=t?.payer??t?.payment_source?.paypal;return{email:n?.email_address?.trim()||void 0,firstName:n?.name?.given_name?.trim()||void 0,lastName:n?.name?.surname?.trim()||void 0}}function dd(e){return e>=500?"5xx":e>=400?"4xx":e>=300?"3xx":"unknown"}function hl({sessionId:e,nonce:t,billingApiUrl:n,email:r,billingName:o,onBuyerIdentityReady:a,clientId:l,environment:d,currency:u,isSubscription:p,providerObjectType:b,approvalPresentation:v,onTokenizedBody:M,onComplete:I,onErrorChange:w,onDecline:h,onTechnicalFailure:O,isProcessing:G=!1,onLoadStateChange:T,onInitializationStateChange:Y,allowAutomaticRetry:U=!0,onButtonClick:de,runBeforeButtonClick:X,session:he,existingOrderId:De,telemetry:re,telemetryContext:Ve,onInstrument:yt,debug:te=!1}){let Oe=Ur(),ft=ko(yt,e),ke=(0,k.useMemo)(()=>{if(Oe)return null;let F=La({billingApiUrl:n,sdkPackage:"@flopay/react",sdkVersion:qt.SDK_VERSION,enabled:re!==!1});return F.setCheckoutContext(Ve??{}),F.beginCheckout(Ve??{}),F},[n,Oe,re,Ve?.checkoutMode,Ve?.layout]),Le=(0,k.useMemo)(()=>dn(Oe),[Oe]);(0,k.useEffect)(()=>()=>{ke&&ke.flush().catch(()=>{}).finally(()=>ke.destroy())},[ke]);let be=(0,k.useMemo)(()=>({error:F=>{Le?Le.error(F):ke?.error(F),ft({class:"technical_error",errorCode:F.requestCategory==="intent_create"?"PAYMENT_PROCESSING_FAILED":F.errorCode,requestCategory:F.requestCategory,provider:F.provider})},log:F=>{Le?Le.log(F):ke?.log(F),ft({class:"lifecycle",name:F.name,provider:F.provider})},performance:F=>{Le?Le.performance(F):ke?.performance(F)},terminal:F=>{Le?Le.terminal(F):ke?.terminal(F)},startTiming:()=>Le?.now()??ke?.now()??0,elapsed:F=>Le?.elapsed(F)??Math.max(0,(ke?.now()??F)-F)}),[ft,Le,ke]),me=(0,k.useRef)(null),Ie=(0,k.useRef)(0),We=(0,k.useRef)(null),rt=(0,k.useRef)(null),R=(0,k.useRef)(null),He=(0,k.useContext)(ea),ye=(0,k.useRef)(null);ye.current||(ye.current=Oa());let N=He??ye.current,ve=(0,k.useRef)(null),ue=(0,k.useRef)(!1),[Ke,Z]=(0,k.useState)(!1),[ot,lt]=(0,k.useState)(!1),[Ae,Ne]=(0,k.useState)(0),ct=(0,k.useRef)(0),[at,xe]=(0,k.useState)(!1),jt=(0,k.useRef)(!1),Vt=(0,k.useRef)(!1),[ut,Et]=(0,k.useState)(!1),[q,fe]=(0,k.useState)(!1),{request:et,collect:V,finish:Me}=Co(),bt=(0,k.useRef)({sessionId:e,required:!(0,qt.isValidEmail)(r?.trim()||he?.customer?.email?.trim())});bt.current.sessionId!==e&&(bt.current={sessionId:e,required:!(0,qt.isValidEmail)(r?.trim()||he?.customer?.email?.trim())});let Ge=bt.current.required,$=(0,k.useMemo)(()=>n.replace(/\/+$/,""),[n]),f=he?.gateways?.paypal?.providerObjectType??b,P=f??(p?"subscription":"order"),[H]=(0,k.useState)(Qo),ne=he?.gateways?.paypal?.approvalPresentation??v,$e=Fa(H,ne==="app_switch"?"app_switch":void 0,P),vt=f==="order"||f==="setup_token",Re=(0,k.useMemo)(()=>JSON.stringify([$,l,u,d??"",P,vt,$e,e,De??""]),[$,l,u,d,De,P,vt,$e,e]),ae=(0,k.useRef)(Re),it=ae.current!==Re,Ct=(0,k.useRef)(te),Nt=(0,k.useRef)(null),[ze,Ft]=(0,k.useState)([]),Ue=(0,k.useCallback)(F=>{Ct.current&&Ft(Ze=>[...Ze,`${new Date().toISOString().slice(11,23)} ${F}`])},[]);(0,k.useEffect)(()=>{Ct.current=te,te&&Ue("debug:enabled"),Nt.current?.setEnabled(te)},[Ue,te]);let Fn=(0,k.useRef)(M),Rn=(0,k.useRef)(I),Mt=(0,k.useRef)(w),wn=(0,k.useRef)(h),Dn=(0,k.useRef)(O),On=(0,k.useRef)(de),rn=(0,k.useRef)(T),Ce=(0,k.useRef)(Y),St=(0,k.useRef)(a),Tt=(0,k.useRef)(X),vn=(0,k.useRef)(he),Bt=(0,k.useRef)(r),Vn=(0,k.useRef)(o),pn=(0,k.useRef)(t),Wt=(0,k.useRef)(null),an=(0,k.useRef)(new Map),Wn=(0,k.useRef)(new Map),mn=(0,k.useRef)(!1);(0,k.useEffect)(()=>(mn.current=!0,()=>{mn.current=!1}),[]),(0,k.useEffect)(()=>{Fn.current=M},[M]),(0,k.useEffect)(()=>{St.current=a},[a]),(0,k.useEffect)(()=>{Rn.current=I},[I]),(0,k.useEffect)(()=>{Mt.current=w},[w]),(0,k.useEffect)(()=>{wn.current=h},[h]),(0,k.useEffect)(()=>{Dn.current=O},[O]),(0,k.useEffect)(()=>{On.current=de},[de]),(0,k.useEffect)(()=>{rn.current=T},[T]),(0,k.useEffect)(()=>{Ce.current=Y},[Y]),(0,k.useEffect)(()=>{Tt.current=X},[X]),(0,k.useEffect)(()=>{vn.current=he},[he]),(0,k.useEffect)(()=>{Bt.current=r},[r]),(0,k.useEffect)(()=>{Vn.current=o},[o]),(0,k.useEffect)(()=>{pn.current=t},[t]),(0,k.useEffect)(()=>{ct.current=Ae},[Ae]),(0,k.useEffect)(()=>{at&&ve.current?.focus()},[at,Ae]);let wt=(0,k.useCallback)(()=>{window.setTimeout(()=>{ve.current?.focus()},0)},[]),Zt=(0,k.useCallback)(()=>{Z(!1),Ne(F=>F+1)},[]),yn=(0,k.useCallback)(()=>{xe(!1),(me.current?.querySelector('iframe, button, [tabindex]:not([tabindex="-1"])')??me.current)?.focus?.()},[]);(0,k.useEffect)(()=>{!Ke||!ue.current||(ue.current=!1,yn())},[yn,Ke,Ae]);let Dt=(0,k.useCallback)((F,Ze)=>{let se=Ze?.popupBlocked??Gr(F);se&&N.markBlocked();let Hn=xa("PayPal",se,H.inAppBrowser),gn=Dn.current;if(gn){let Kt=se&&H.inAppBrowser?new qt.FloPayError(Hn,"api_error",{code:Ze?.code??"paypal_popup_blocked"}):F;gn("paypal",Kt,Ze);return}Mt.current?.(Hn)},[N,H.inAppBrowser]),Qt=(0,k.useCallback)(F=>{let Ze=We.current,se=rt.current;Ze===null||!se||(be.log({...se,popupCapability:N.current(),name:"provider.overlay.returned",stage:"overlay_return",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:F}),be.performance({...se,popupCapability:N.current(),stage:"overlay_return",durationMs:be.elapsed(Ze),durationMode:"buyer",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:F}),We.current=null)},[N,be]),Ht=(0,k.useCallback)((F,Ze,se)=>{let Hn=rt.current;Qt("overlay_timeout"),Hn&&be.error({...Hn,popupCapability:N.current(),errorCode:"REQUEST_TIMEOUT",failureCategory:"provider_runtime",stage:"overlay_return",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk",statusClass:"timeout",terminalReason:"overlay_timeout"}),Dt(Ze,{...se,telemetryReported:!0,provider:"paypal",paymentMethodCategory:"paypal",presentationMode:$e,terminalReason:"overlay_timeout"}),xe(!0),Zt(),wt()},[Qt,wt,Dt,N,$e,Zt,be]),fn=(0,k.useCallback)(()=>{N.markAvailable();let F=rt.current;F&&(R.current=F.attempt,be.log({...F,popupCapability:N.current(),name:"provider.popup.opened",stage:"overlay_open",provider:"paypal",paymentMethodCategory:"paypal"}))},[N,be]),{finishAttempt:gt,generationRef:Q,invalidateAttempt:Ln,isAttemptCurrent:Nn,isAttemptInvalidated:hr,startAttempt:Cn}=ta(Ht,{onHandoffObserved:fn}),sn=(0,k.useCallback)(()=>(xe(!1),Cn("paypal")),[Cn]),_n=(0,k.useCallback)(F=>{Ln(F?.generation),F?.showRetry&&xe(!0),F?.remount&&Zt(),F?.focus!==!1&&wt()},[wt,Ln,Zt]),_e=F=>{let Ze=Wt.current;return Ze&&Wn.current.set(F,Ze),F};(0,k.useEffect)(()=>{ae.current!==Re&&(ae.current=Re,jt.current=!1,Vt.current=!1,Z(!1),lt(!1),Et(!1),Ce.current?.("loading"))},[Re]),(0,k.useEffect)(()=>{st(()=>rn.current?.(Ke&&!ut))},[Ke,ut]);let ht=(0,qt.normalizeGatewayEnvironment)(d);(0,k.useEffect)(()=>{let F={attempt:Q.current+1,inAppBrowser:H.inAppBrowser,appFamily:H.appFamily,popupCapability:N.current(),presentationMode:$e},Ze=()=>({...rt.current??F,popupCapability:N.current()}),se={error:m=>be.error({...m,...Ze()}),log:m=>be.log({...m,...Ze()}),performance:m=>be.performance({...m,...Ze()}),terminal:m=>be.terminal({...m,...Ze()}),startTiming:be.startTiming,elapsed:be.elapsed},Hn=l?`${l.slice(0,6)}\u2026(len ${l.length})`:"(empty)",gn=typeof navigator>"u"?"(no navigator)":navigator.userAgent;if(Ue(`mount clientId=${Hn} env=${d??"(unset)"}\u2192${ht??"live"} ccy=${u} sub=${p}`),Ue(`ua=${gn.slice(0,80)}${gn.length>80?"\u2026":""}`),!l){Ue("FAIL: clientId empty \u2014 gateway misconfigured"),Et(!0),se.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(!me.current){Ue("FAIL: containerRef not attached");return}Ie.current=se.startTiming(),se.log({name:"provider.load.started",stage:"provider_load",provider:"paypal",paymentMethodCategory:"paypal"});let Kt=!1,Kn=!1,nt=()=>Kt||Kn,jr,Gt=!1,hn=()=>{jr=(0,qt.generateIdempotencyKey)(),jr||console.warn("[FloPay] DirectPayPal: secure idempotency key unavailable; retries may not be deduplicated."),Gt=!0},Mr=null,Br=!1,En=null,en=!1,br=()=>{!En||en||(en=!0,En.close().catch(()=>{}))},Tn=!1,Fr=!1,An=me.current,Pr=null,vr=null,rr=[],Gn=null,Yn=!1,xt=!1,or=null,kn=m=>{if(!m||typeof m.getBoundingClientRect!="function")return"(no rect)";let g=m.getBoundingClientRect();return`${Math.round(g.width)}\xD7${Math.round(g.height)}`},Xn=m=>{if(!m)return"(empty)";try{let g=new URL(m,typeof window>"u"?"https://localhost":window.location.href),D=g.pathname.toLowerCase();return D.includes("checkcaptcha")||D.includes("captcha")?`CAPTCHA(${g.host}${D})`:D.includes("risk")||D.includes("challenge")?`RISK(${g.host}${D})`:D.includes("smart/buttons")?`smart-buttons(${g.host})`:`${g.host}${D}`.slice(0,100)}catch{return m.slice(0,80)}},Cr=m=>{let g=m.getAttribute("src"),D=m.getAttribute("srcdoc"),z=m.getAttribute("name"),ce=m.getAttribute("sandbox"),J=[];return g&&J.push(`src=${Xn(g)}`),D&&J.push(`srcdoc[${D.length}ch]`),!g&&!D&&J.push("src=(empty) srcdoc=(empty)"),z&&J.push(`name=${z.slice(0,40)}`),ce!==null&&J.push(`sandbox="${ce.slice(0,40)}"`),J.join(" ")},dt=m=>{if(!(m instanceof HTMLIFrameElement))return"";try{let g=m.contentDocument;if(!g)return"cd=null";let D=g.body?.children.length??0,z=g.body?.innerHTML.length??0,ce=g.head?.innerHTML.length??0;return`cd=same-origin readyState=${g.readyState} body[${D}children,${z}ch] head[${ce}ch]`}catch(g){return`cd=cross-origin(${g.message.slice(0,30)})`}},on=[],tn=m=>{if(nt())return;let g=m.message??String(m.error??"(no message)");g&&(g.toLowerCase().includes("paypal")||g.toLowerCase().includes("zoid")||g.toLowerCase().includes("postrobot")||g.toLowerCase().includes("storage"))&&(Ue(`window:error ${g.slice(0,140)}`),on.push(g))},Dr=m=>{if(nt())return;let g=m.reason instanceof Error?m.reason.message:String(m.reason??"(no reason)");g&&(g.toLowerCase().includes("paypal")||g.toLowerCase().includes("zoid")||g.toLowerCase().includes("postrobot")||g.toLowerCase().includes("storage"))&&(Ue(`window:rejection ${g.slice(0,140)}`),on.push(g))},zn={value:0},Vr=()=>{Pr?.disconnect(),Pr=null,vr?.disconnect(),vr=null;for(let m of rr.splice(0))clearTimeout(m);xt=!1,Yn&&typeof window<"u"&&(window.removeEventListener("error",tn),window.removeEventListener("unhandledrejection",Dr)),Yn=!1},ar=()=>{if(!(Yn||nt()||Tn)){if(Yn=!0,on.length=0,zn.value=0,typeof window<"u"&&(window.addEventListener("error",tn),window.addEventListener("unhandledrejection",Dr)),typeof PerformanceObserver<"u")try{vr=new PerformanceObserver(m=>{if(!nt())for(let g of m.getEntries()){if(!g.name.toLowerCase().includes("paypal"))continue;zn.value+=1;let D=Math.round(g.duration);Ue(`net ${D}ms ${g.name.slice(0,90)}`)}}),vr.observe({type:"resource",buffered:!0})}catch{}or?.()}},ir=()=>{Gn&&(clearTimeout(Gn),Gn=null)},bn=()=>{Vr(),ir()},sr={setEnabled:m=>{m?ar():Vr()}};Nt.current=sr,Ct.current&&ar();let Or=m=>{if(!m)return!1;let g=m.toLowerCase();return g.includes("zoid destroyed")||g.includes("destroyed all components")||g.includes("window closed")||g.includes("detected container element removed")},In=m=>{if(nt()||Or(m))return;let g=Hr(m)??m;st(()=>Mt.current?.(g))},A=(m,g)=>{if(Kt||Br)return;Br=!0,Kn=!0,bn(),br();let D=ld({kind:m,generationActive:!0,automaticRetryAllowed:U,automaticRetryUsed:jt.current});if(D.action==="retry"){jt.current=!0,Z(!1),fe(!1),lt(!0),Ce.current?.("retrying"),Mr=setTimeout(()=>{Kt||Ne(z=>z+1)},od);return}if(Z(!1),fe(!1),lt(!1),Et(!0),D.action!=="ignore"){if(Ce.current?.("exhausted"),D.action==="unavailable"){console.error("[FloPay] DirectPayPal load/render failure:",g);return}if(D.report){let z=Ma({code:fl(m,g),message:g},{inAppBrowser:H.inAppBrowser,handoffObserved:!1});z.popupBlocked&&N.markBlocked(),se.error({errorCode:z.popupBlocked?z.errorCode:D.report.errorCode,stage:D.report.stage,operationOutcome:D.report.operationOutcome,provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk",failureCategory:"provider_runtime",terminalReason:z.terminalReason})}Vt.current||(Vt.current=!0,console.error("[FloPay] Direct PayPal initialization failed:",fl(m,g)))}};Et(!1);let L=async(m,g=Wt.current)=>{if(nt())return;let D=g?.sessionId??e;if(Fn.current){await Fn.current(m,{sessionId:D,accountPatch:g?.accountPatch,nonce:g?.nonce});return}let z=se.startTiming();se.log({name:"payment.processing.started",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"});let ce=()=>{se.log({name:"payment.processing.completed",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"}),se.performance({stage:"processing",durationMs:se.elapsed(z),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"process_payment"})};try{let J=vn.current,Ye=g?.accountPatch?.email??Bt.current,It=g?.accountPatch?.userId??J?.customer?.id??J?.accountData?.userId??"",E=g?.accountPatch?.firstName??J?.customer?.firstName??J?.accountData?.firstName,Pe=g?.accountPatch?.lastName??J?.customer?.lastName??J?.accountData?.lastName,ge=await new Na.PaymentAPI($,{telemetry:!1}).processPayment(It,{sessionId:D,nonce:g?.nonce??pn.current,paymentMethodCategory:"paypal",tokenizedData:m,accountData:{userId:It,email:Ye??J?.customer?.email??"",...E?{firstName:E}:{},...Pe?{lastName:Pe}:{},country:g?.accountPatch?.country??J?.customer?.country??J?.accountData?.country??void 0,zip:g?.accountPatch?.zip??J?.customer?.zip??J?.accountData?.zip??void 0}});if(ge.ok){if(Kn||Kt&&mn.current)return;ce(),se.terminal({outcome:"payment_succeeded",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:"approved"}),st(()=>Rn.current?.({status:"succeeded",checkoutMethod:"paypal"}));return}if(nt())return;let j=await ge.json().catch(()=>null),oe=j?.message??"PayPal payment failed.",_=Hr(oe)??oe;ce(),ge.status===400&&(typeof j?.declineCode=="string"||!Array.isArray(j?.fields))?se.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:"approved"}):ge.status===400||ge.status===422?se.terminal({outcome:"validation_rejected",provider:"paypal",paymentMethodCategory:"paypal",statusClass:"4xx",terminalReason:"approved"}):se.error({errorCode:"PAYMENT_PROCESSING_FAILED",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"process_payment",statusClass:dd(ge.status),failureCategory:ge.status>=500?"server_error":void 0}),In(_),st(()=>wn.current?.(cn("paypal",_,{code:j?.code,declineCode:j?.declineCode})));return}catch(J){if(nt())return;ce(),se.error({errorCode:"NETWORK_REQUEST_FAILED",failureCategory:"transport_error",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"process_payment",statusClass:"network_error"});let Ye=J instanceof Error?J.message:"PayPal payment failed.",It=Hr(Ye)??Ye;In(It),st(()=>wn.current?.(cn("paypal",It)));return}},B=()=>new qt.FloPayError("PayPal render was superseded.","api_error",{code:"paypal_render_superseded"}),le=m=>nt()?Promise.reject(B()):Promise.resolve(m),Be=async m=>{if(nt())throw B();Gt||hn();let g=Wt.current,D=g?.sessionId??e,z=g?.nonce??pn.current;se.log({name:"payment.intent.started",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create"});let ce;try{ce=await new Na.PaymentAPI($,{telemetry:!1}).createSessionIntent(D,z??"",vt?{provider:"paypal",paymentMethodCategory:"wallet",paymentMethodType:qt.PAYPAL_VAULTED_PAYMENT_METHOD_TYPE,paymentMethodId:null,intentKind:P==="setup_token"?"setup":"payment"}:{provider:"paypal",paymentMethodCategory:"wallet",paymentMethodType:"paypal",paymentMethodId:null,intentKind:"payment"},{idempotencyKey:jr})}catch(J){throw se.error({...(0,qt.classifyTelemetryFailure)(J,"PAYMENT_PROCESSING_FAILED","unknown"),stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create"}),J}if(nt())throw B();if(ce.provider!=="paypal"||ce.providerObjectType!==P)throw new Error(m);return se.log({name:"payment.intent.completed",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create",statusClass:"2xx"}),ce.providerObjectId},pt=(m,g)=>{let D=g?.nonce??pn.current;if(!D)return;let z=g?.sessionId??e,ce=wo(m)??_r(m)??"provider_declined";new Na.PaymentAPI($,{telemetry:!1}).reportSessionIntentDecline(z,D,{provider:"paypal",paymentMethodCategory:"wallet",paymentMethodType:"paypal",providerDeclineReason:ce}).catch(()=>{})},pe=Ae;Ue("loadScript:scheduled (deferred 1 tick)");let Fe=null,W=setTimeout(()=>{if(Kt){Ue("loadScript:skipped (cancelled before defer ran)");return}Ue("loadScript:start");let m=ht==="live"?"production":ht,g={};P==="subscription"?g={intent:"subscription",vault:!0}:P==="order"&&(g={intent:"capture"}),Fe=(0,gl.loadScript)({clientId:l,currency:u,...g,...m?{environment:m}:{},...m==="sandbox"?{dataNamespace:"paypal_sandbox"}:{}});let D=!1;Fe.then(z=>{if(D=!0,Ue(`loadScript:resolved inactive=${nt()} ns=${!!z} buttons=${!!z?.Buttons}`),nt())return;if(!z?.Buttons){Ue("FAIL: namespace missing Buttons factory"),A("namespace_unusable","PayPal SDK did not expose the Buttons factory.");return}se.log({name:"provider.ready",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"}),se.performance({stage:"provider_ready",durationMs:se.elapsed(Ie.current),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk"}),se.log({name:"provider.availability.checked",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"});let ce=async(ge,j)=>{if(nt()||ct.current!==pe)return;let oe=ge.vaultSetupToken??ge.subscriptionID??ge.orderID??"",_=oe?Wn.current.get(oe):an.current.get(pe);if(!(!_||!Nn(_.generation))&>(_.generation)){Wn.current.delete(oe),an.current.delete(_.surfaceKey),Qt("approved");try{if(fe(!0),st(()=>Mt.current?.(null)),!oe)throw new qt.FloPayError("PayPal did not return an approval token.","api_error",{code:"paypal_missing_token"});let qe=vn.current,Rt=eo(Vn.current??[qe?.customer?.firstName,qe?.customer?.lastName].filter(Boolean).join(" ")),Ee=Bn({email:_.accountPatch?.email?.trim()||Bt.current?.trim()||qe?.customer?.email?.trim(),firstName:_.accountPatch?.firstName?.trim()||Rt.firstName,lastName:_.accountPatch?.lastName?.trim()||Rt.lastName});if(!(0,qt.isValidEmail)(Ee.email)||!(Ee.firstName||Ee.lastName))try{let Sr=cd(await j?.order?.get?.());Ee=Bn({email:Sr.email||Ee.email,firstName:Sr.firstName||Ee.firstName,lastName:Sr.lastName||Ee.lastName})}catch{}if((St.current||Ge)&&!(0,qt.isValidEmail)(Ee.email)){let Sr=await V("PayPal",Ee);if(!Sr)return;Ee=Sr}(0,qt.isValidEmail)(Ee.email)&&(_.accountPatch=Bn({..._.accountPatch,...Ee}),await St.current?.(Ee));let Sn;P==="setup_token"?Sn={id:oe,type:"paypal_setup_token",isPaypal:!0,gateway:"paypal",paymentMethodType:qt.PAYPAL_VAULTED_PAYMENT_METHOD_TYPE}:vt?Sn={id:oe,isPaypal:!0,gateway:"paypal",paymentMethodType:qt.PAYPAL_VAULTED_PAYMENT_METHOD_TYPE}:Sn={id:oe,isPaypal:!0},await L(Sn,_)}catch(qe){In(qe instanceof Error?qe.message:"PayPal capture failed.")}finally{nt()||fe(!1)}}},J=ge=>{let j=De?()=>le(De):()=>Be(ge);return async()=>_e(await j())},Ye=z.Buttons({style:{layout:"horizontal",height:za,tagline:!1},...$e==="app_switch"?{appSwitchWhenAvailable:!0}:{},onClick:async(ge,j)=>{if(nt()){await j.reject();return}hn();let oe=Tt.current,_={};if(oe)try{let Ee=await oe("paypal");if(nt()){await j.reject();return}if(!Ee.proceed){Wt.current=null,an.current.delete(pe),await j.reject();return}_={sessionId:Ee.sessionId,accountPatch:Ee.accountPatch,nonce:Ee.nonce}}catch(Ee){Ue(`onClick:runBeforeButtonClick rejected msg=${(Ee instanceof Error?Ee.message:String(Ee)).slice(0,120)}`),Wt.current=null,an.current.delete(pe),await j.reject();return}st(()=>On.current?.("paypal"));let qe=sn(),Rt={generation:qe,surfaceKey:pe,..._};Wt.current=Rt,an.current.set(pe,Rt),rt.current={...F,attempt:qe},await j.resolve(),se.log({name:"payment.method.selected",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"}),se.log({name:"provider.handoff.requested",stage:"overlay_open",provider:"paypal",paymentMethodCategory:"paypal"}),We.current=se.startTiming()},createOrder:P==="order"?J("Failed to create PayPal order."):void 0,createSubscription:P==="subscription"?J("Failed to create PayPal subscription."):void 0,createVaultSetupToken:P==="setup_token"?async()=>_e(await Be("Failed to create PayPal setup token.")):void 0,onApprove:ce,onCancel:()=>{if(nt())return;let ge=an.current.get(pe)??Wt.current;ge&&an.current.delete(ge.surfaceKey),Wt.current=null,Qt("cancelled"),se.terminal({outcome:"payment_cancelled",terminalReason:"cancelled",provider:"paypal",paymentMethodCategory:"paypal"}),ue.current=!0,_n({generation:ge?.generation,remount:!0,focus:!1})},onError:ge=>{if(nt()||ct.current!==pe)return;let j=ge instanceof Error?ge.message:"PayPal failed to render.";if(Ue(`onError rendered=${Tn} msg=${j.slice(0,120)}`),Tn){let oe=an.current.get(pe)??Wt.current;if(oe&&!Nn(oe.generation)||!oe&&hr())return;if(Or(j)){gt(oe?.generation);return}let{errorCode:_,popupBlocked:qe,providerDeclined:Rt,terminalReason:Ee}=Ma(ge,{inAppBrowser:H.inAppBrowser,handoffObserved:oe!=null&&R.current===oe.generation});if(qe&&N.markBlocked(),Qt(Ee),Rt){se.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:Ee}),pt(ge,oe),st(()=>wn.current?.(cn("paypal",j))),oe&&an.current.delete(oe.surfaceKey),Wt.current=null,gt(oe?.generation);return}se.error({errorCode:_,failureCategory:"provider_runtime",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk",terminalReason:Ee}),oe&&an.current.delete(oe.surfaceKey),Wt.current=null,_n({generation:oe?.generation,remount:!0,showRetry:!0,focus:!0}),Dt(ge,{code:"paypal_runtime_failed",popupBlocked:qe,telemetryReported:!0,provider:"paypal",paymentMethodCategory:"paypal",presentationMode:$e,terminalReason:Ee});return}A(Or(j)?"teardown":"pre_ready_callback",j)}}),It=Ye.isEligible();if(Ue(`isEligible=${It}`),se.log({name:"provider.eligibility.checked",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"}),!It){Z(!1),A("ineligible","PayPal buttons are not eligible to render in this context (paypal_ineligible).");return}Fr=!0,En=Ye,or=()=>{if(!Yn||xt||nt()||Tn)return;xt=!0,Ue(`container:dims ${kn(An)} visibility=${typeof document>"u"?"(no document)":document.visibilityState}`),typeof MutationObserver<"u"&&(Pr=new MutationObserver(j=>{if(!nt()){for(let oe of j)if(oe.type==="childList")oe.addedNodes.forEach(_=>{if(!(_ instanceof Element))return;let qe=_.tagName.toLowerCase(),Rt=(_.getAttribute("title")??"").slice(0,40),Ee=qe==="iframe"?` ${Cr(_)}`:"";Ue(`child+ ${qe}${Rt?` title="${Rt}"`:""}${Ee} dims=${kn(_)}`)});else if(oe.type==="attributes"&&oe.target instanceof Element){let _=oe.target;if(_.tagName.toLowerCase()!=="iframe")continue;let qe=oe.attributeName;(qe==="src"||qe==="srcdoc")&&Ue(`attr~ iframe ${qe}=${qe==="srcdoc"?`[${(_.getAttribute("srcdoc")??"").length}ch]`:Xn(_.getAttribute("src"))} dims=${kn(_)}`)}}}),Pr.observe(An,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["src","srcdoc"]}));let ge=j=>{if(nt()||Tn)return;let oe=An.querySelectorAll("iframe"),_=typeof document<"u"&&"hasStorageAccess"in document;Ue(`watchdog:${j} container=${kn(An)} children=${An.childElementCount} iframes=${oe.length} visibility=${typeof document>"u"?"(no document)":document.visibilityState} cookies=${typeof navigator>"u"?"?":navigator.cookieEnabled} hasStorageAccessApi=${_} paypalNetRequests=${zn.value}`),oe.forEach((qe,Rt)=>{let Ee=(qe.getAttribute("title")??"").slice(0,40);Ue(` iframe[${Rt}] ${kn(qe)}${Ee?` title="${Ee}"`:""} ${Cr(qe)}`);let Sn=dt(qe);Sn&&Ue(` ${Sn}`)}),on.length===0&&Ue(" (no PayPal/zoid window errors captured)")};rr.push(setTimeout(()=>ge("3s"),3e3)),rr.push(setTimeout(()=>ge("8s"),8e3)),rr.push(setTimeout(()=>ge("15s"),15e3))},or(),Ue("render:start");let Pe=se.startTiming();Gn=setTimeout(()=>{nt()||Tn||(Ue("watchdog:11s retryable render timeout"),A("watchdog_expired","PayPal Buttons render did not settle within 11000ms."))},ad);let At=Ye.render(An);(async()=>{try{if(await At,Ue(`render:resolved inactive=${nt()}`),bn(),nt()){br();return}Tn=!0,Z(!0),lt(!1),Ce.current?.("ready"),se.log({name:"checkout.rendered",stage:"checkout_render",provider:"paypal",paymentMethodCategory:"paypal"}),se.performance({stage:"checkout_render",durationMs:se.elapsed(Pe),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"})}catch(ge){let j=ge instanceof Error?ge.message:"PayPal failed to render.";Ue(`render:rejected msg=${j.slice(0,120)}`),bn(),A(Or(j)?"teardown":"render_rejected",j)}})()}).catch(z=>{let ce=z instanceof Error?z.message:"PayPal operation failed.";Ue(`provider:failed msg=${ce.slice(0,120)}`);let J="script_rejected";D&&Or(ce)?J="teardown":D&&Fr&&(J="render_rejected"),A(J,ce)})},0);return()=>{Kt=!0,clearTimeout(W),Mr&&clearTimeout(Mr),bn(),Nt.current===sr&&(Nt.current=null),br(),We.current=null,rt.current=null}},[U,$,l,u,d,P,$e,vt,e,De,Ae,be,V,Ge,Ue,Qt]);let ie=te?(0,Qn.jsxs)("pre",{"data-testid":"flopay-direct-paypal-debug",style:{margin:"0 0 8px 0",padding:"6px 8px",background:ut?"#fef2f2":"#f3f4f6",border:`1px solid ${ut?"#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=${Ke} failed=${ut})`,ze.length===0?`
|
|
1
|
+
"use strict";var Oc=Object.create;var Ta=Object.defineProperty;var Lc=Object.getOwnPropertyDescriptor;var Nc=Object.getOwnPropertyNames;var zc=Object.getPrototypeOf,Uc=Object.prototype.hasOwnProperty;var qc=(e,t)=>{for(var n in t)Ta(e,n,{get:t[n],enumerable:!0})},Js=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Nc(t))!Uc.call(e,o)&&o!==n&&Ta(e,o,{get:()=>t[o],enumerable:!(r=Lc(t,o))||r.enumerable});return e};var Zs=(e,t,n)=>(n=e!=null?Oc(zc(e)):{},Js(t||!e||!e.__esModule?Ta(n,"default",{value:e,enumerable:!0}):n,e)),$c=e=>Js(Ta({},"__esModule",{value:!0}),e);var ku={};qc(ku,{DirectPayPalButton:()=>ra,FloPayAutomaticPaymentButton:()=>mc,FloPayCardSetup:()=>hc,FloPayCardSetupError:()=>ha,FloPayCheckout:()=>li,FloPayProvider:()=>aa,SplitCardForm:()=>oi,VaultCardFields:()=>Bo,dropThirdPartyOnlyError:()=>bc.dropThirdPartyOnlyError,useCheckout:()=>ul,useFloPay:()=>Ur,usePayPalFloPay:()=>Fa});module.exports=$c(ku);var bc=require("@flopay/shared");var ci=require("@flopay/js"),nr=require("@flopay/shared"),Qe=require("react");var Lt=require("react/jsx-runtime");function jc(){return(0,Lt.jsxs)(Lt.Fragment,{children:[(0,Lt.jsxs)("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,Lt.jsx)("rect",{width:"20",height:"14",x:"2",y:"5",rx:"2"}),(0,Lt.jsx)("line",{x1:"2",x2:"22",y1:"10",y2:"10"})]}),"Credit / Debit Card",(0,Lt.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"#9ca3af",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{position:"absolute",right:"1rem"},"aria-hidden":"true",children:(0,Lt.jsx)("path",{d:"M9 18l6-6-6-6"})})]})}function Vc(){return(0,Lt.jsx)(Lt.Fragment,{children:"Go back"})}function Wc(){return(0,Lt.jsx)(Lt.Fragment,{children:"Secure card checkout"})}function ho(e){return e!==void 0&&(e===""||e===null||e===!1)}function bo({content:e}){return(0,Lt.jsx)(Lt.Fragment,{children:e===void 0?(0,Lt.jsx)(jc,{}):e})}function Po({content:e}){return(0,Lt.jsx)(Lt.Fragment,{children:e===void 0?(0,Lt.jsx)(Vc,{}):e})}function Yo({content:e}){return(0,Lt.jsx)(Lt.Fragment,{children:e===void 0?(0,Lt.jsx)(Wc,{}):e})}var Pt=require("@flopay/shared"),Hc="Checkout is temporarily unavailable. Please try again later.";function Ei(e){return{errorCode:"PROVIDER_LOAD_FAILED",failureCategory:e instanceof Pt.FloPayError&&e.type==="authentication_error"?"invalid_response":"provider_runtime",stage:"provider_load",provider:"stripe",requestCategory:"provider_sdk"}}function Kc(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 Qs(){return new Pt.FloPayError(Hc,"api_error",{code:"CheckoutInitializationFailed"})}function Ti(e){return!!e?.gateways?.worldpayCorporateGateway}function Wr(e){return e?.status==="open"&&Ti(e)}function el(e,t,n){let r=e?.data.session,o=r?.gateways?.stripe?.enabledPaymentMethods??e?.data.stripe?.enabledPaymentMethods;return!!(n&&(r?.vault?.html||r?.gateways?.pcivault||o?.includes("card")||Wr(r))||t&&e?.data.paypal?.publishableKey)}function tl(e,t){if(t&&(!(e instanceof Pt.FloPayError)||e.type==="authentication_error"))return Ei(e);if(!(e instanceof Pt.FloPayError&&Kc(e))){if(!t&&!(e instanceof Pt.FloPayError)&&(e instanceof TypeError||e instanceof SyntaxError))return{...(0,Pt.classifyTelemetryFailure)(e,"NETWORK_REQUEST_FAILED"),stage:"session_read",requestCategory:"session_read"};if(!t&&e instanceof Pt.FloPayError)return{errorCode:"NETWORK_REQUEST_FAILED",stage:"session_read",requestCategory:"session_read"};if(!(e instanceof Pt.FloPayError))return{errorCode:"INTERNAL_SDK_ERROR",stage:"checkout_mount"}}}function vo(e,t,n,r={}){let o;return(a={})=>{if(o)return o;let l={...r,...a,email:a.email?.trim()||r.email?.trim()},d=(0,Pt.isCardHolderNamePlaceholder)(l.firstName,l.lastName);if(!(0,Pt.isValidEmail)(l.email))return Promise.reject(new Pt.FloPayError("A valid buyer email is required before claiming checkout.","validation_error",{code:"BuyerEmailCollectionRequired",param:"account.email"}));let u={};for(let[p,b]of Object.entries(l)){if(d&&p.endsWith("Name")||typeof b!="string")continue;let v=b.trim();v&&(u[p]=v)}return o=e.claimCheckoutSession(t,n,{accountData:u}),o.catch(()=>{}),o}}function nl(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 Ai(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(a=>({type:"subscription",code:a.code??a.providerPlanId,name:a.subscriptionName??a.providerPlanName??a.code??a.providerPlanId??null,quantity:a.quantity??1,totalAmount:a.totalAmount,overrideAmount:a.overrideAmount,currency:a.currency,metadata:a.metadata})),...(e.items??[]).map(a=>({type:"item",code:a.code??a.providerItemId,name:a.itemName??a.providerItemName??a.code??a.providerItemId??null,quantity:a.quantity??1,totalAmount:a.totalAmount,overrideAmount:a.overrideAmount,currency:a.currency,metadata:a.metadata}))],r=n.reduce((a,l)=>a+(l.overrideAmount??l.totalAmount??0),0),o=e.currency??n.find(a=>a.currency)?.currency??"USD";return{id:"",clientSecret:"",mode:n.some(a=>a.type==="subscription")?"subscription":"payment",amount:Math.round(r*100),currency:o,status:"open",captureMethod:e.captureMethod,customer:{id:e.account.userId,email:e.account.email??"",firstName:e.account.firstName,lastName:e.account.lastName,gender:e.account.gender??void 0,city:e.account.city??void 0,state:e.account.state??void 0,country:e.account.country??void 0,zip:e.account.zip??void 0},successUrl:e.successUrl,cancelUrl:e.cancelUrl,checkoutMode:t??e.checkoutMode??"full",products:n.map((a,l)=>({uuid:`synthetic-${a.type??"item"}-${l}`,checkoutSessionId:"",type:a.type??"item",code:a.code,name:a.name??null,quantity:a.quantity??1,totalAmount:a.totalAmount,overrideAmount:a.overrideAmount??null,currency:a.currency??o,metadata:a.metadata??null}))}}function to(e){if((0,Pt.isCardHolderNamePlaceholder)(e))return{};let[t,...n]=e?.trim().split(/\s+/)??[];return t?{firstName:t,lastName:n.join(" ")||void 0}:{}}function xi(e,t){return t?{...e,...t}:e}function cn(e,t,n){let r=typeof t=="string"?t:t.message,o=typeof t=="string"?n?.code:n?.code??t.code,a=typeof t=="string"?n?.declineCode:n?.declineCode??t.declineCode,l=typeof t=="string"?void 0:t.sessionId;return{method:e,message:r,...o?{code:o}:{},...a?{declineCode:a}:{},...l?{sessionId:l}:{}}}function Hr(e,t){return t&&e.sessionId===void 0&&Object.defineProperty(e,"sessionId",{value:t,enumerable:!0}),e}var Gc=[{match:/^paypal authorization required\.?$/i,replacement:"For your additional security, please re-authenticate this payment via PayPal."}];function Kr(e){if(typeof e!="string")return e??void 0;let t=e.trim();if(!t)return e;for(let{match:n,replacement:r}of Gc)if(n.test(t))return r;return e}function Lr(e,t){return e.status!=="authorized"?{status:"succeeded"}:{status:"authorized",paymentId:e.paymentId,sessionId:e.id||t||void 0,authorizationExpiresAt:e.authorizationExpiresAt}}function Nr(e){return e?.status==="authorized"||e?.status==="complete"}function Gr(e,t){if(e.data.session)return e.data.session;let n=e.raw,r=n?.latestTransactionAttempt?.result,o=n?.status==="authorized"||r==="AUTHORIZED";return o||n?.status==="completed"||r==="SUCCESS"?{...t,status:o?"authorized":"complete"}:n?.status==="expired"?{...t,status:"expired"}:void 0}function ol(e){return e?.status==="expired"&&(e.failureOutcome==="authorization_expired"||e.captureMethod==="manual")}function Aa(e){let t=ol(e);return new Pt.FloPayError(t?"Authorization has expired.":"Checkout session has expired.","api_error",{code:t?"authorization_expired":"checkout_session_expired"})}function xa(e){return e instanceof Pt.FloPayError||typeof e=="object"&&e!==null&&"code"in e?e.code:void 0}function Co(e){return ol(e)?new Pt.FloPayError("Authorization has expired.","api_error",{code:"authorization_expired"}):e?.status==="expired"?new Pt.FloPayError("Automatic payment failed. Please try again.","api_error",{code:"checkout_session_expired"}):new Pt.FloPayError(Pt.CHECKOUT_PROCESSING_TIMEOUT_MESSAGE,"api_error",{code:"checkout_processing_timeout"})}function Xo(e,t){return e==="processing"||(0,Pt.isMoneySettledOutcome)(e,t)}function al(e){return e==="succeeded"?"succeeded":e==="processing"||e==="requires_capture"?"processing":"failed"}async function il(e,t){let n=e;if((0,Pt.isSetupIntentClientSecret)(t)){if(!n?.retrieveSetupIntent)return null;let{setupIntent:a,error:l}=await n.retrieveSetupIntent(t);if(l)throw new Pt.FloPayError(l.message??"Failed to retrieve setup intent.","api_error",{...l.code?{code:l.code}:{}});return a??null}if(!n?.retrievePaymentIntent)return null;let{paymentIntent:r,error:o}=await n.retrievePaymentIntent(t);if(o)throw new Pt.FloPayError(o.message??"Failed to retrieve payment intent.","api_error",{...o.code?{code:o.code}:{}});return r??null}function sl(e,t="automatic"){return{...typeof e=="number"&&Number.isFinite(e)&&e>0?{mode:"payment",amount:e,captureMethod:t==="manual"?"manual":"automatic_async"}:{mode:"setup"},paymentMethodTypes:["card"],setupFutureUsage:"off_session"}}function Mi(e){let t=e&&typeof e=="object"?e:null;return t?.name==="IntegrationError"||t?.code==="elements_intent_mismatch"||t?.type==="invalid_request_error"?{errorCode:"CONFIGURATION_INVALID",failureCategory:"invalid_response"}:{errorCode:"PROVIDER_RUNTIME_FAILED",failureCategory:"provider_runtime"}}function Jo(e){let t=[e?.id,e?.originalPaymentMethodId];for(let n of t)if(typeof n=="string"&&n.startsWith("pm_"))return n}var $r=require("@flopay/js"),Xe=require("@flopay/shared"),C=Zs(require("react"),1);var Bi=require("react"),Zn=(0,Bi.createContext)({flopay:null,paypalFlopay:null,billingApiUrl:""}),pr=(0,Bi.createContext)({session:null,loading:!1,error:null});var za=require("@flopay/js"),qt=require("@flopay/shared"),hl=require("@paypal/paypal-js"),k=require("react");var ll=require("@flopay/shared"),mr=require("react"),zr=require("react/jsx-runtime");function Bn(e,t=!1){let{firstName:n,lastName:r,...o}=e,a=n?.trim(),l=r?.trim();return{...o,...a||t?{firstName:a??""}:{},...l||t?{lastName:l??""}:{}}}function So(){let[e,t]=(0,mr.useState)(null),n=(0,mr.useRef)(null),r=(0,mr.useRef)(0),o=(0,mr.useCallback)((l,d)=>(n.current?.(null),r.current+=1,t({id:r.current,methodLabel:l,identity:d}),new Promise(u=>{n.current=u})),[]),a=(0,mr.useCallback)(l=>{let d=n.current;n.current=null,t(null),d?.(l)},[]);return(0,mr.useEffect)(()=>()=>{n.current?.(null),n.current=null},[]),{request:e,collect:o,finish:a}}function wo({identity:e,methodLabel:t,onComplete:n,onCancel:r,submitting:o=!1,testId:a="flopay-buyer-identity-pane"}){let[l,d]=(0,mr.useState)(e.email?.trim()??""),u=(0,ll.isValidEmail)(l.trim());return(0,zr.jsxs)("div",{"data-testid":a,style:{display:"flex",flexDirection:"column",gap:"0.75rem",padding:"0.875rem",border:"1px solid #d1d5db",borderRadius:8,background:"#fff",color:"#262833"},children:[(0,zr.jsxs)("div",{style:{fontWeight:700},children:["Continue with ",t]}),(0,zr.jsxs)("label",{style:{display:"flex",flexDirection:"column",gap:"0.375rem"},children:["Email address",(0,zr.jsx)("input",{type:"email",autoComplete:"email","data-testid":"flopay-email",required:!0,value:l,onChange:p=>d(p.target.value),style:{minHeight:42,padding:"0 0.75rem",border:"1px solid #d1d5db",borderRadius:6}})]}),(0,zr.jsxs)("div",{style:{display:"flex",gap:"0.5rem"},children:[r&&(0,zr.jsx)("button",{type:"button",onClick:r,style:{flex:1,minHeight:42},children:"Cancel"}),(0,zr.jsxs)("button",{type:"button",disabled:!u||o,onClick:()=>{n(Bn({...e,email:l.trim()}))},style:{flex:2,minHeight:42},children:["Continue with ",t]})]})]})}var Yc=new Set(["err_blocked_by_client","notallowederror","popup_blocked","popupblocked"]),Xc=["https://www.paypal.com","https://www.sandbox.paypal.com"];function Ma(e,t,n){let r=`We couldn't open ${e}. Try again or choose another payment method.`;return t?n?`${r} Open this page in your system browser, then try again.`:`${r} Allow pop-ups for this site, then try again.`:r}function cl(e){if(e instanceof Error)return e.message;if(typeof e=="object"&&e!==null){let t=e.message;return typeof t=="string"?t:void 0}return typeof e=="string"?e:void 0}function no(e){if(typeof e!="string")return;let t=e.trim();return/^[a-z0-9_.-]{1,64}$/i.test(t)?t:void 0}function _r(e){if(typeof e!="object"||e===null)return;let t=e;return no(t.code)??no(t.type)??no(t.name)}function ko(e){if(!(typeof e!="object"||e===null))return no(e.decline_code)}function Zo(e){return typeof e!="object"||e===null?!1:no(e.type)?.toLowerCase()==="card_error"||ko(e)!==void 0}function Jc(e){let t=cl(e)?.toLowerCase()??"",n=_r(e)?.toLowerCase()??"";return Yc.has(n)?!0:/(?:popup|pop-up).{0,40}(?:block|denied|prevent)/i.test(t)||/(?:block|denied|prevent).{0,40}(?:popup|pop-up)/i.test(t)}function Fi(e){if(_r(e)?.toLowerCase()==="paypal_init_timeout")return!0;let n=cl(e)??"";return n.includes("No ack for postMessage init()")&&Xc.some(r=>n.includes(r))&&n.includes("10000ms")}function Ba(e,t){if(Zo(e))return{errorCode:"PROVIDER_RUNTIME_FAILED",popupBlocked:!1,providerDeclined:!0,terminalReason:"provider_declined"};let r=Jc(e)||t.inAppBrowser&&!t.handoffObserved&&Fi(e);return{errorCode:r?"POPUP_BLOCKED":"PROVIDER_RUNTIME_FAILED",popupBlocked:r,providerDeclined:!1,terminalReason:r?"popup_blocked":"provider_error"}}function Yr(e){return Ba(e,{inAppBrowser:!1,handoffObserved:!1}).popupBlocked}var dl=require("@flopay/shared"),Qo=require("react");function Ur(){return(0,Qo.useContext)(Zn).flopay}function Fa(){return(0,Qo.useContext)(Zn).paypalFlopay??null}function ul(){return(0,Qo.useContext)(pr)}function pl(){return(0,Qo.useContext)(Zn).billingApiUrl||(0,dl.resolveBillingApiUrl)()}function ea(e){let t=e??(typeof navigator>"u"?"":navigator.userAgent),n=r=>({inAppBrowser:r!=="none",appFamily:r,popupCapability:"unknown"});return t?/FBAN|FBAV|FB_IAB|FBIOS/i.test(t)?n("facebook"):/Instagram/i.test(t)?n("instagram"):/musical_ly|BytedanceWebview|TikTok/i.test(t)?n("tiktok"):/Twitter|Snapchat|Pinterest|LinkedInApp|Line\/|MicroMessenger|GSA\//i.test(t)?n("other_in_app"):/Android.*;\s?wv\)/.test(t)||/(iPhone|iPad|iPod).*AppleWebKit(?!.*Safari)/.test(t)?n("generic_webview"):n("none"):n("none")}function ml(e,t,n=e.popupCapability){return e.inAppBrowser||n==="blocked"||t==="prefer_redirect"?"redirect":"popup"}function Da(e,t,n){return!e.inAppBrowser||n!=="order"?"popup":t==="app_switch"||t==="redirect"?t:"popup"}var yl=require("@flopay/shared"),oo=require("react");function st(e){if(!e)return;let t=n=>{console.error("[FloPay] Merchant callback failed; checkout continued.",n)};try{Promise.resolve(e()).catch(t)}catch(n){t(n)}}var Oa=require("react"),ro=typeof window>"u"?Oa.useEffect:Oa.useLayoutEffect;var Zc={"checkout.mount":"checkout_mount","sdk.initialize.ready":"sdk_loaded","provider.ready":"sdk_loaded","checkout.rendered":"form_rendered","vault.widget.ready":"form_rendered","vault.submission.started":"tokenize","payment.tokenization.started":"tokenize","payment.processing.started":"process_attempt","payment.intent.started":"process_attempt","vault.action.required":"3ds_challenge","payment.three_ds.handoff":"3ds_challenge"};function Qc(e){return e==="stripe"||e==="paypal"?e:void 0}function ed(e){let t=Qc(e.provider),n={schemaVersion:yl.FLO_INSTRUMENT_SCHEMA_VERSION,...t?{gateway:t}:{}};if(e.class==="lifecycle"){let r=Zc[e.name];return r?{...n,name:r}:null}return e.class==="card_surface"?{...n,name:"card_expanded"}:e.errorCode==="CHECKOUT_SESSION_CREATE_FAILED"?{...n,name:"checkout_error",phase:"session_create"}:e.errorCode==="SDK_INITIALIZATION_FAILED"||e.errorCode==="PROVIDER_LOAD_FAILED"?{...n,name:"checkout_error",phase:"sdk_load"}:e.errorCode==="PAYMENT_PROCESSING_FAILED"?{...n,name:"checkout_error",phase:e.requestCategory==="intent_create"?"wallets":"process"}:null}var Di=new Set(["checkout_mount","sdk_loaded","form_rendered","card_expanded"]);function Io(e,t){let n=(0,oo.useRef)(e);n.current=e;let r=(0,oo.useRef)(new Set),o=(0,oo.useRef)(t),a=(0,oo.useRef)(t);return ro(()=>{a.current=t,o.current!==t&&(o.current=t,r.current.clear())},[t]),(0,oo.useCallback)(l=>{if(a.current!==t)return;let d=ed(l);if(d){if(Di.has(d.name)){if(r.current.has(d.name))return;r.current.add(d.name)}st(()=>n.current?.(d))}},[t])}var fl=require("react"),ta=(0,fl.createContext)(null);function La(){let e="unknown";return{current:()=>e,markAvailable:()=>e!=="unknown"?!1:(e="available",!0),markBlocked:()=>e==="blocked"?!1:(e="blocked",!0)}}var td=Symbol.for("@flopay/js.telemetry.bridge.v1"),nd=Symbol.for("@flopay/js.telemetry.reporter-factory.v1");function rd(){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=rd(),n=(o,a)=>o?o.bind(e):a,r=n(e.now,t.now);return{error:n(e.error,t.error),log:n(e.log,t.log),performance:n(e.performance,t.performance),terminal:n(e.terminal,t.terminal),now:r,elapsed:e.elapsed?e.elapsed.bind(e):o=>Math.max(0,r()-o),setCheckoutContext:n(e.setCheckoutContext,t.setCheckoutContext),beginCheckout:n(e.beginCheckout,t.beginCheckout),disable:n(e.disable,t.disable),subscribe:n(e.subscribe,t.subscribe),flush:n(e.flush,t.flush),destroy:n(e.destroy,t.destroy)}}function Na(e){let t=globalThis[nd];return od(t?.(e)??{})}function dn(e){if(e)return e[td]}var un=require("react");function na(e,t){let n=(0,un.useRef)(0),r=(0,un.useRef)(null),o=(0,un.useRef)(null),a=(0,un.useRef)(e),l=(0,un.useRef)(t?.onHandoffObserved);(0,un.useEffect)(()=>{a.current=e,l.current=t?.onHandoffObserved},[e,t?.onHandoffObserved]);let d=(0,un.useCallback)((h=o.current)=>{h?.timer&&(clearTimeout(h.timer),h.timer=null)},[]),u=(0,un.useCallback)(h=>{d();let O=n.current+1;return n.current=O,r.current=null,o.current={generation:O,method:h,timer:null,yieldedControl:!1},O},[d]),p=(0,un.useCallback)(h=>{let O=o.current;return h!==void 0&&O?.generation!==h?!1:(d(O),o.current=null,(h===void 0||r.current===h)&&(r.current=null),!0)},[d]),b=(0,un.useCallback)(h=>{let O=o.current,G=h??O?.generation??n.current;(h===void 0||O?.generation===h)&&(d(O),o.current=null),r.current=G},[d]),v=(0,un.useCallback)(h=>r.current===(h??n.current),[]),B=(0,un.useCallback)(h=>o.current?.generation===h&&r.current!==h,[]),I=(0,un.useCallback)(()=>{let h=o.current;h&&(d(h),!h.yieldedControl&&(h.yieldedControl=!0,l.current?.(h.method)))},[d]),w=(0,un.useCallback)(()=>{let h=o.current;!h?.yieldedControl||document.visibilityState!=="visible"||(d(h),h.timer=setTimeout(()=>{h.timer=null,o.current?.generation===h.generation&&(o.current=null,r.current=h.generation,a.current(h.method,new Error("External payment method returned without a terminal callback."),{code:"external_method_missing_terminal_callback"}))},600))},[d]);return(0,un.useEffect)(()=>{let h=()=>{document.visibilityState==="visible"?w():I()};return document.addEventListener("visibilitychange",h),window.addEventListener("blur",I),window.addEventListener("focus",w),()=>{document.removeEventListener("visibilitychange",h),window.removeEventListener("blur",I),window.removeEventListener("focus",w),d()}},[d,I,w]),{startAttempt:u,finishAttempt:p,invalidateAttempt:b,isAttemptInvalidated:v,isAttemptCurrent:B,generationRef:n}}var Qn=require("react/jsx-runtime"),Ua=45,ad=1e3,id=11e3,sd={width:"100%",minHeight:Ua,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"},ld={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 cd(e){return!e.generationActive||e.kind==="teardown"?{action:"ignore"}:e.kind==="ineligible"?{action:"unavailable"}:e.automaticRetryAllowed&&!e.automaticRetryUsed?{action:"retry"}:{action:"exhaust",report:ld[e.kind]??null}}function gl(e,t){return e==="watchdog_expired"?"paypal_render_timeout":Fi(t)?"paypal_init_timeout":"paypal_init_failure"}function dd(e){let t=e,n=t?.payer??t?.payment_source?.paypal;return{email:n?.email_address?.trim()||void 0,firstName:n?.name?.given_name?.trim()||void 0,lastName:n?.name?.surname?.trim()||void 0}}function ud(e){return e>=500?"5xx":e>=400?"4xx":e>=300?"3xx":"unknown"}function bl({sessionId:e,nonce:t,billingApiUrl:n,email:r,billingName:o,onBuyerIdentityReady:a,clientId:l,environment:d,currency:u,isSubscription:p,providerObjectType:b,approvalPresentation:v,onTokenizedBody:B,onComplete:I,onErrorChange:w,onDecline:h,onTechnicalFailure:O,isProcessing:G=!1,onLoadStateChange:T,onInitializationStateChange:Y,allowAutomaticRetry:U=!0,onButtonClick:de,runBeforeButtonClick:X,session:he,existingOrderId:Fe,telemetry:oe,telemetryContext:je,onInstrument:yt,debug:re=!1}){let De=Ur(),ft=Io(yt,e),ke=(0,k.useMemo)(()=>{if(De)return null;let F=Na({billingApiUrl:n,sdkPackage:"@flopay/react",sdkVersion:qt.SDK_VERSION,enabled:oe!==!1});return F.setCheckoutContext(je??{}),F.beginCheckout(je??{}),F},[n,De,oe,je?.checkoutMode,je?.layout]),Oe=(0,k.useMemo)(()=>dn(De),[De]);(0,k.useEffect)(()=>()=>{ke&&ke.flush().catch(()=>{}).finally(()=>ke.destroy())},[ke]);let be=(0,k.useMemo)(()=>({error:F=>{Oe?Oe.error(F):ke?.error(F),ft({class:"technical_error",errorCode:F.requestCategory==="intent_create"?"PAYMENT_PROCESSING_FAILED":F.errorCode,requestCategory:F.requestCategory,provider:F.provider})},log:F=>{Oe?Oe.log(F):ke?.log(F),ft({class:"lifecycle",name:F.name,provider:F.provider})},performance:F=>{Oe?Oe.performance(F):ke?.performance(F)},terminal:F=>{Oe?Oe.terminal(F):ke?.terminal(F)},startTiming:()=>Oe?.now()??ke?.now()??0,elapsed:F=>Oe?.elapsed(F)??Math.max(0,(ke?.now()??F)-F)}),[ft,Oe,ke]),me=(0,k.useRef)(null),Ie=(0,k.useRef)(0),Ve=(0,k.useRef)(null),rt=(0,k.useRef)(null),R=(0,k.useRef)(null),We=(0,k.useContext)(ta),ye=(0,k.useRef)(null);ye.current||(ye.current=La());let N=We??ye.current,ve=(0,k.useRef)(null),ue=(0,k.useRef)(!1),[He,Q]=(0,k.useState)(!1),[ot,lt]=(0,k.useState)(!1),[Te,Le]=(0,k.useState)(0),ct=(0,k.useRef)(0),[at,Ae]=(0,k.useState)(!1),jt=(0,k.useRef)(!1),Vt=(0,k.useRef)(!1),[ut,Et]=(0,k.useState)(!1),[q,fe]=(0,k.useState)(!1),{request:et,collect:V,finish:xe}=So(),bt=(0,k.useRef)({sessionId:e,required:!(0,qt.isValidEmail)(r?.trim()||he?.customer?.email?.trim())});bt.current.sessionId!==e&&(bt.current={sessionId:e,required:!(0,qt.isValidEmail)(r?.trim()||he?.customer?.email?.trim())});let Ke=bt.current.required,$=(0,k.useMemo)(()=>n.replace(/\/+$/,""),[n]),f=he?.gateways?.paypal?.providerObjectType??b,P=f??(p?"subscription":"order"),[H]=(0,k.useState)(ea),ee=he?.gateways?.paypal?.approvalPresentation??v,qe=Da(H,ee==="app_switch"?"app_switch":void 0,P),vt=f==="order"||f==="setup_token",Ge=(0,k.useMemo)(()=>JSON.stringify([$,l,u,d??"",P,vt,qe,e,Fe??""]),[$,l,u,d,Fe,P,vt,qe,e]),Z=(0,k.useRef)(Ge),it=Z.current!==Ge,Ct=(0,k.useRef)(re),Nt=(0,k.useRef)(null),[Ne,Ft]=(0,k.useState)([]),ze=(0,k.useCallback)(F=>{Ct.current&&Ft(Ze=>[...Ze,`${new Date().toISOString().slice(11,23)} ${F}`])},[]);(0,k.useEffect)(()=>{Ct.current=re,re&&ze("debug:enabled"),Nt.current?.setEnabled(re)},[ze,re]);let Fn=(0,k.useRef)(B),Rn=(0,k.useRef)(I),Mt=(0,k.useRef)(w),wn=(0,k.useRef)(h),Dn=(0,k.useRef)(O),On=(0,k.useRef)(de),rn=(0,k.useRef)(T),Ce=(0,k.useRef)(Y),St=(0,k.useRef)(a),Tt=(0,k.useRef)(X),vn=(0,k.useRef)(he),Bt=(0,k.useRef)(r),Vn=(0,k.useRef)(o),pn=(0,k.useRef)(t),Wt=(0,k.useRef)(null),an=(0,k.useRef)(new Map),Wn=(0,k.useRef)(new Map),mn=(0,k.useRef)(!1);(0,k.useEffect)(()=>(mn.current=!0,()=>{mn.current=!1}),[]),(0,k.useEffect)(()=>{Fn.current=B},[B]),(0,k.useEffect)(()=>{St.current=a},[a]),(0,k.useEffect)(()=>{Rn.current=I},[I]),(0,k.useEffect)(()=>{Mt.current=w},[w]),(0,k.useEffect)(()=>{wn.current=h},[h]),(0,k.useEffect)(()=>{Dn.current=O},[O]),(0,k.useEffect)(()=>{On.current=de},[de]),(0,k.useEffect)(()=>{rn.current=T},[T]),(0,k.useEffect)(()=>{Ce.current=Y},[Y]),(0,k.useEffect)(()=>{Tt.current=X},[X]),(0,k.useEffect)(()=>{vn.current=he},[he]),(0,k.useEffect)(()=>{Bt.current=r},[r]),(0,k.useEffect)(()=>{Vn.current=o},[o]),(0,k.useEffect)(()=>{pn.current=t},[t]),(0,k.useEffect)(()=>{ct.current=Te},[Te]),(0,k.useEffect)(()=>{at&&ve.current?.focus()},[at,Te]);let wt=(0,k.useCallback)(()=>{window.setTimeout(()=>{ve.current?.focus()},0)},[]),Zt=(0,k.useCallback)(()=>{Q(!1),Le(F=>F+1)},[]),yn=(0,k.useCallback)(()=>{Ae(!1),(me.current?.querySelector('iframe, button, [tabindex]:not([tabindex="-1"])')??me.current)?.focus?.()},[]);(0,k.useEffect)(()=>{!He||!ue.current||(ue.current=!1,yn())},[yn,He,Te]);let Dt=(0,k.useCallback)((F,Ze)=>{let se=Ze?.popupBlocked??Yr(F);se&&N.markBlocked();let Hn=Ma("PayPal",se,H.inAppBrowser),gn=Dn.current;if(gn){let Kt=se&&H.inAppBrowser?new qt.FloPayError(Hn,"api_error",{code:Ze?.code??"paypal_popup_blocked"}):F;gn("paypal",Kt,Ze);return}Mt.current?.(Hn)},[N,H.inAppBrowser]),Qt=(0,k.useCallback)(F=>{let Ze=Ve.current,se=rt.current;Ze===null||!se||(be.log({...se,popupCapability:N.current(),name:"provider.overlay.returned",stage:"overlay_return",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:F}),be.performance({...se,popupCapability:N.current(),stage:"overlay_return",durationMs:be.elapsed(Ze),durationMode:"buyer",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:F}),Ve.current=null)},[N,be]),Ht=(0,k.useCallback)((F,Ze,se)=>{let Hn=rt.current;Qt("overlay_timeout"),Hn&&be.error({...Hn,popupCapability:N.current(),errorCode:"REQUEST_TIMEOUT",failureCategory:"provider_runtime",stage:"overlay_return",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk",statusClass:"timeout",terminalReason:"overlay_timeout"}),Dt(Ze,{...se,telemetryReported:!0,provider:"paypal",paymentMethodCategory:"paypal",presentationMode:qe,terminalReason:"overlay_timeout"}),Ae(!0),Zt(),wt()},[Qt,wt,Dt,N,qe,Zt,be]),fn=(0,k.useCallback)(()=>{N.markAvailable();let F=rt.current;F&&(R.current=F.attempt,be.log({...F,popupCapability:N.current(),name:"provider.popup.opened",stage:"overlay_open",provider:"paypal",paymentMethodCategory:"paypal"}))},[N,be]),{finishAttempt:gt,generationRef:te,invalidateAttempt:Ln,isAttemptCurrent:Nn,isAttemptInvalidated:hr,startAttempt:Cn}=na(Ht,{onHandoffObserved:fn}),sn=(0,k.useCallback)(()=>(Ae(!1),Cn("paypal")),[Cn]),_n=(0,k.useCallback)(F=>{Ln(F?.generation),F?.showRetry&&Ae(!0),F?.remount&&Zt(),F?.focus!==!1&&wt()},[wt,Ln,Zt]),Re=F=>{let Ze=Wt.current;return Ze&&Wn.current.set(F,Ze),F};(0,k.useEffect)(()=>{Z.current!==Ge&&(Z.current=Ge,jt.current=!1,Vt.current=!1,Q(!1),lt(!1),Et(!1),Ce.current?.("loading"))},[Ge]),(0,k.useEffect)(()=>{st(()=>rn.current?.(He&&!ut))},[He,ut]);let ht=(0,qt.normalizeGatewayEnvironment)(d);(0,k.useEffect)(()=>{let F={attempt:te.current+1,inAppBrowser:H.inAppBrowser,appFamily:H.appFamily,popupCapability:N.current(),presentationMode:qe},Ze=()=>({...rt.current??F,popupCapability:N.current()}),se={error:m=>be.error({...m,...Ze()}),log:m=>be.log({...m,...Ze()}),performance:m=>be.performance({...m,...Ze()}),terminal:m=>be.terminal({...m,...Ze()}),startTiming:be.startTiming,elapsed:be.elapsed},Hn=l?`${l.slice(0,6)}\u2026(len ${l.length})`:"(empty)",gn=typeof navigator>"u"?"(no navigator)":navigator.userAgent;if(ze(`mount clientId=${Hn} env=${d??"(unset)"}\u2192${ht??"live"} ccy=${u} sub=${p}`),ze(`ua=${gn.slice(0,80)}${gn.length>80?"\u2026":""}`),!l){ze("FAIL: clientId empty \u2014 gateway misconfigured"),Et(!0),se.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(!me.current){ze("FAIL: containerRef not attached");return}Ie.current=se.startTiming(),se.log({name:"provider.load.started",stage:"provider_load",provider:"paypal",paymentMethodCategory:"paypal"});let Kt=!1,Kn=!1,nt=()=>Kt||Kn,jr,Gt=!1,hn=()=>{jr=(0,qt.generateIdempotencyKey)(),jr||console.warn("[FloPay] DirectPayPal: secure idempotency key unavailable; retries may not be deduplicated."),Gt=!0},Mr=null,Br=!1,En=null,en=!1,br=()=>{!En||en||(en=!0,En.close().catch(()=>{}))},Tn=!1,Fr=!1,An=me.current,Pr=null,vr=null,rr=[],Gn=null,Yn=!1,xt=!1,or=null,kn=m=>{if(!m||typeof m.getBoundingClientRect!="function")return"(no rect)";let g=m.getBoundingClientRect();return`${Math.round(g.width)}\xD7${Math.round(g.height)}`},Xn=m=>{if(!m)return"(empty)";try{let g=new URL(m,typeof window>"u"?"https://localhost":window.location.href),D=g.pathname.toLowerCase();return D.includes("checkcaptcha")||D.includes("captcha")?`CAPTCHA(${g.host}${D})`:D.includes("risk")||D.includes("challenge")?`RISK(${g.host}${D})`:D.includes("smart/buttons")?`smart-buttons(${g.host})`:`${g.host}${D}`.slice(0,100)}catch{return m.slice(0,80)}},Cr=m=>{let g=m.getAttribute("src"),D=m.getAttribute("srcdoc"),z=m.getAttribute("name"),ce=m.getAttribute("sandbox"),J=[];return g&&J.push(`src=${Xn(g)}`),D&&J.push(`srcdoc[${D.length}ch]`),!g&&!D&&J.push("src=(empty) srcdoc=(empty)"),z&&J.push(`name=${z.slice(0,40)}`),ce!==null&&J.push(`sandbox="${ce.slice(0,40)}"`),J.join(" ")},dt=m=>{if(!(m instanceof HTMLIFrameElement))return"";try{let g=m.contentDocument;if(!g)return"cd=null";let D=g.body?.children.length??0,z=g.body?.innerHTML.length??0,ce=g.head?.innerHTML.length??0;return`cd=same-origin readyState=${g.readyState} body[${D}children,${z}ch] head[${ce}ch]`}catch(g){return`cd=cross-origin(${g.message.slice(0,30)})`}},on=[],tn=m=>{if(nt())return;let g=m.message??String(m.error??"(no message)");g&&(g.toLowerCase().includes("paypal")||g.toLowerCase().includes("zoid")||g.toLowerCase().includes("postrobot")||g.toLowerCase().includes("storage"))&&(ze(`window:error ${g.slice(0,140)}`),on.push(g))},Dr=m=>{if(nt())return;let g=m.reason instanceof Error?m.reason.message:String(m.reason??"(no reason)");g&&(g.toLowerCase().includes("paypal")||g.toLowerCase().includes("zoid")||g.toLowerCase().includes("postrobot")||g.toLowerCase().includes("storage"))&&(ze(`window:rejection ${g.slice(0,140)}`),on.push(g))},zn={value:0},Vr=()=>{Pr?.disconnect(),Pr=null,vr?.disconnect(),vr=null;for(let m of rr.splice(0))clearTimeout(m);xt=!1,Yn&&typeof window<"u"&&(window.removeEventListener("error",tn),window.removeEventListener("unhandledrejection",Dr)),Yn=!1},ar=()=>{if(!(Yn||nt()||Tn)){if(Yn=!0,on.length=0,zn.value=0,typeof window<"u"&&(window.addEventListener("error",tn),window.addEventListener("unhandledrejection",Dr)),typeof PerformanceObserver<"u")try{vr=new PerformanceObserver(m=>{if(!nt())for(let g of m.getEntries()){if(!g.name.toLowerCase().includes("paypal"))continue;zn.value+=1;let D=Math.round(g.duration);ze(`net ${D}ms ${g.name.slice(0,90)}`)}}),vr.observe({type:"resource",buffered:!0})}catch{}or?.()}},ir=()=>{Gn&&(clearTimeout(Gn),Gn=null)},bn=()=>{Vr(),ir()},sr={setEnabled:m=>{m?ar():Vr()}};Nt.current=sr,Ct.current&&ar();let Or=m=>{if(!m)return!1;let g=m.toLowerCase();return g.includes("zoid destroyed")||g.includes("destroyed all components")||g.includes("window closed")||g.includes("detected container element removed")},In=m=>{if(nt()||Or(m))return;let g=Kr(m)??m;st(()=>Mt.current?.(g))},x=(m,g)=>{if(Kt||Br)return;Br=!0,Kn=!0,bn(),br();let D=cd({kind:m,generationActive:!0,automaticRetryAllowed:U,automaticRetryUsed:jt.current});if(D.action==="retry"){jt.current=!0,Q(!1),fe(!1),lt(!0),Ce.current?.("retrying"),Mr=setTimeout(()=>{Kt||Le(z=>z+1)},ad);return}if(Q(!1),fe(!1),lt(!1),Et(!0),D.action!=="ignore"){if(Ce.current?.("exhausted"),D.action==="unavailable"){console.error("[FloPay] DirectPayPal load/render failure:",g);return}if(D.report){let z=Ba({code:gl(m,g),message:g},{inAppBrowser:H.inAppBrowser,handoffObserved:!1});z.popupBlocked&&N.markBlocked(),se.error({errorCode:z.popupBlocked?z.errorCode:D.report.errorCode,stage:D.report.stage,operationOutcome:D.report.operationOutcome,provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk",failureCategory:"provider_runtime",terminalReason:z.terminalReason})}Vt.current||(Vt.current=!0,console.error("[FloPay] Direct PayPal initialization failed:",gl(m,g)))}};Et(!1);let L=async(m,g=Wt.current)=>{if(nt())return;let D=g?.sessionId??e;if(Fn.current){await Fn.current(m,{sessionId:D,accountPatch:g?.accountPatch,nonce:g?.nonce});return}let z=se.startTiming();se.log({name:"payment.processing.started",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"});let ce=()=>{se.log({name:"payment.processing.completed",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"}),se.performance({stage:"processing",durationMs:se.elapsed(z),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"process_payment"})};try{let J=vn.current,Ye=g?.accountPatch?.email??Bt.current,It=g?.accountPatch?.userId??J?.customer?.id??J?.accountData?.userId??"",E=g?.accountPatch?.firstName??J?.customer?.firstName??J?.accountData?.firstName,Pe=g?.accountPatch?.lastName??J?.customer?.lastName??J?.accountData?.lastName,ge=await new za.PaymentAPI($,{telemetry:!1}).processPayment(It,{sessionId:D,nonce:g?.nonce??pn.current,paymentMethodCategory:"paypal",tokenizedData:m,accountData:{userId:It,email:Ye??J?.customer?.email??"",...E?{firstName:E}:{},...Pe?{lastName:Pe}:{},country:g?.accountPatch?.country??J?.customer?.country??J?.accountData?.country??void 0,zip:g?.accountPatch?.zip??J?.customer?.zip??J?.accountData?.zip??void 0}});if(ge.ok){if(Kn||Kt&&mn.current)return;ce(),se.terminal({outcome:"payment_succeeded",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:"approved"}),st(()=>Rn.current?.({status:"succeeded",checkoutMethod:"paypal"}));return}if(nt())return;let j=await ge.json().catch(()=>null),ae=j?.message??"PayPal payment failed.",_=Kr(ae)??ae;ce(),ge.status===400&&(typeof j?.declineCode=="string"||!Array.isArray(j?.fields))?se.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:"approved"}):ge.status===400||ge.status===422?se.terminal({outcome:"validation_rejected",provider:"paypal",paymentMethodCategory:"paypal",statusClass:"4xx",terminalReason:"approved"}):se.error({errorCode:"PAYMENT_PROCESSING_FAILED",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"process_payment",statusClass:ud(ge.status),failureCategory:ge.status>=500?"server_error":void 0}),In(_),st(()=>wn.current?.(cn("paypal",_,{code:j?.code,declineCode:j?.declineCode})));return}catch(J){if(nt())return;ce(),se.error({errorCode:"NETWORK_REQUEST_FAILED",failureCategory:"transport_error",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"process_payment",statusClass:"network_error"});let Ye=J instanceof Error?J.message:"PayPal payment failed.",It=Kr(Ye)??Ye;In(It),st(()=>wn.current?.(cn("paypal",It)));return}},A=()=>new qt.FloPayError("PayPal render was superseded.","api_error",{code:"paypal_render_superseded"}),le=m=>nt()?Promise.reject(A()):Promise.resolve(m),Me=async m=>{if(nt())throw A();Gt||hn();let g=Wt.current,D=g?.sessionId??e,z=g?.nonce??pn.current;se.log({name:"payment.intent.started",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create"});let ce;try{ce=await new za.PaymentAPI($,{telemetry:!1}).createSessionIntent(D,z??"",vt?{provider:"paypal",paymentMethodCategory:"wallet",paymentMethodType:qt.PAYPAL_VAULTED_PAYMENT_METHOD_TYPE,paymentMethodId:null,intentKind:P==="setup_token"?"setup":"payment"}:{provider:"paypal",paymentMethodCategory:"wallet",paymentMethodType:"paypal",paymentMethodId:null,intentKind:"payment"},{idempotencyKey:jr})}catch(J){throw se.error({...(0,qt.classifyTelemetryFailure)(J,"PAYMENT_PROCESSING_FAILED","unknown"),stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create"}),J}if(nt())throw A();if(ce.provider!=="paypal"||ce.providerObjectType!==P)throw new Error(m);return se.log({name:"payment.intent.completed",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"intent_create",statusClass:"2xx"}),ce.providerObjectId},pt=(m,g)=>{let D=g?.nonce??pn.current;if(!D)return;let z=g?.sessionId??e,ce=ko(m)??_r(m)??"provider_declined";new za.PaymentAPI($,{telemetry:!1}).reportSessionIntentDecline(z,D,{provider:"paypal",paymentMethodCategory:"wallet",paymentMethodType:"paypal",providerDeclineReason:ce}).catch(()=>{})},pe=Te;ze("loadScript:scheduled (deferred 1 tick)");let Be=null,W=setTimeout(()=>{if(Kt){ze("loadScript:skipped (cancelled before defer ran)");return}ze("loadScript:start");let m=ht==="live"?"production":ht,g={};P==="subscription"?g={intent:"subscription",vault:!0}:P==="order"&&(g={intent:"capture"}),Be=(0,hl.loadScript)({clientId:l,currency:u,...g,...m?{environment:m}:{},...m==="sandbox"?{dataNamespace:"paypal_sandbox"}:{}});let D=!1;Be.then(z=>{if(D=!0,ze(`loadScript:resolved inactive=${nt()} ns=${!!z} buttons=${!!z?.Buttons}`),nt())return;if(!z?.Buttons){ze("FAIL: namespace missing Buttons factory"),x("namespace_unusable","PayPal SDK did not expose the Buttons factory.");return}se.log({name:"provider.ready",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"}),se.performance({stage:"provider_ready",durationMs:se.elapsed(Ie.current),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk"}),se.log({name:"provider.availability.checked",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"});let ce=async(ge,j)=>{if(nt()||ct.current!==pe)return;let ae=ge.vaultSetupToken??ge.subscriptionID??ge.orderID??"",_=ae?Wn.current.get(ae):an.current.get(pe);if(!(!_||!Nn(_.generation))&>(_.generation)){Wn.current.delete(ae),an.current.delete(_.surfaceKey),Qt("approved");try{if(fe(!0),st(()=>Mt.current?.(null)),!ae)throw new qt.FloPayError("PayPal did not return an approval token.","api_error",{code:"paypal_missing_token"});let Ue=vn.current,Rt=to(Vn.current??[Ue?.customer?.firstName,Ue?.customer?.lastName].filter(Boolean).join(" ")),_e=Bn({email:_.accountPatch?.email?.trim()||Bt.current?.trim()||Ue?.customer?.email?.trim(),firstName:_.accountPatch?.firstName?.trim()||Rt.firstName,lastName:_.accountPatch?.lastName?.trim()||Rt.lastName});if(!(0,qt.isValidEmail)(_e.email)||!(_e.firstName||_e.lastName))try{let Sr=dd(await j?.order?.get?.());_e=Bn({email:Sr.email||_e.email,firstName:Sr.firstName||_e.firstName,lastName:Sr.lastName||_e.lastName})}catch{}if((St.current||Ke)&&!(0,qt.isValidEmail)(_e.email)){let Sr=await V("PayPal",_e);if(!Sr)return;_e=Sr}(0,qt.isValidEmail)(_e.email)&&(_.accountPatch=Bn({..._.accountPatch,..._e}),await St.current?.(_e));let Sn;P==="setup_token"?Sn={id:ae,type:"paypal_setup_token",isPaypal:!0,gateway:"paypal",paymentMethodType:qt.PAYPAL_VAULTED_PAYMENT_METHOD_TYPE}:vt?Sn={id:ae,isPaypal:!0,gateway:"paypal",paymentMethodType:qt.PAYPAL_VAULTED_PAYMENT_METHOD_TYPE}:Sn={id:ae,isPaypal:!0},await L(Sn,_)}catch(Ue){In(Ue instanceof Error?Ue.message:"PayPal capture failed.")}finally{nt()||fe(!1)}}},J=ge=>{let j=Fe?()=>le(Fe):()=>Me(ge);return async()=>Re(await j())},Ye=z.Buttons({style:{layout:"horizontal",height:Ua,tagline:!1},...qe==="app_switch"?{appSwitchWhenAvailable:!0}:{},onClick:async(ge,j)=>{if(nt()){await j.reject();return}hn();let ae=Tt.current,_={};if(ae)try{let _e=await ae("paypal");if(nt()){await j.reject();return}if(!_e.proceed){Wt.current=null,an.current.delete(pe),await j.reject();return}_={sessionId:_e.sessionId,accountPatch:_e.accountPatch,nonce:_e.nonce}}catch(_e){ze(`onClick:runBeforeButtonClick rejected msg=${(_e instanceof Error?_e.message:String(_e)).slice(0,120)}`),Wt.current=null,an.current.delete(pe),await j.reject();return}st(()=>On.current?.("paypal"));let Ue=sn(),Rt={generation:Ue,surfaceKey:pe,..._};Wt.current=Rt,an.current.set(pe,Rt),rt.current={...F,attempt:Ue},await j.resolve(),se.log({name:"payment.method.selected",stage:"processing",provider:"paypal",paymentMethodCategory:"paypal"}),se.log({name:"provider.handoff.requested",stage:"overlay_open",provider:"paypal",paymentMethodCategory:"paypal"}),Ve.current=se.startTiming()},createOrder:P==="order"?J("Failed to create PayPal order."):void 0,createSubscription:P==="subscription"?J("Failed to create PayPal subscription."):void 0,createVaultSetupToken:P==="setup_token"?async()=>Re(await Me("Failed to create PayPal setup token.")):void 0,onApprove:ce,onCancel:()=>{if(nt())return;let ge=an.current.get(pe)??Wt.current;ge&&an.current.delete(ge.surfaceKey),Wt.current=null,Qt("cancelled"),se.terminal({outcome:"payment_cancelled",terminalReason:"cancelled",provider:"paypal",paymentMethodCategory:"paypal"}),ue.current=!0,_n({generation:ge?.generation,remount:!0,focus:!1})},onError:ge=>{if(nt()||ct.current!==pe)return;let j=ge instanceof Error?ge.message:"PayPal failed to render.";if(ze(`onError rendered=${Tn} msg=${j.slice(0,120)}`),Tn){let ae=an.current.get(pe)??Wt.current;if(ae&&!Nn(ae.generation)||!ae&&hr())return;if(Or(j)){gt(ae?.generation);return}let{errorCode:_,popupBlocked:Ue,providerDeclined:Rt,terminalReason:_e}=Ba(ge,{inAppBrowser:H.inAppBrowser,handoffObserved:ae!=null&&R.current===ae.generation});if(Ue&&N.markBlocked(),Qt(_e),Rt){se.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal",terminalReason:_e}),pt(ge,ae),st(()=>wn.current?.(cn("paypal",j))),ae&&an.current.delete(ae.surfaceKey),Wt.current=null,gt(ae?.generation);return}se.error({errorCode:_,failureCategory:"provider_runtime",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal",requestCategory:"provider_sdk",terminalReason:_e}),ae&&an.current.delete(ae.surfaceKey),Wt.current=null,_n({generation:ae?.generation,remount:!0,showRetry:!0,focus:!0}),Dt(ge,{code:"paypal_runtime_failed",popupBlocked:Ue,telemetryReported:!0,provider:"paypal",paymentMethodCategory:"paypal",presentationMode:qe,terminalReason:_e});return}x(Or(j)?"teardown":"pre_ready_callback",j)}}),It=Ye.isEligible();if(ze(`isEligible=${It}`),se.log({name:"provider.eligibility.checked",stage:"provider_ready",provider:"paypal",paymentMethodCategory:"paypal"}),!It){Q(!1),x("ineligible","PayPal buttons are not eligible to render in this context (paypal_ineligible).");return}Fr=!0,En=Ye,or=()=>{if(!Yn||xt||nt()||Tn)return;xt=!0,ze(`container:dims ${kn(An)} visibility=${typeof document>"u"?"(no document)":document.visibilityState}`),typeof MutationObserver<"u"&&(Pr=new MutationObserver(j=>{if(!nt()){for(let ae of j)if(ae.type==="childList")ae.addedNodes.forEach(_=>{if(!(_ instanceof Element))return;let Ue=_.tagName.toLowerCase(),Rt=(_.getAttribute("title")??"").slice(0,40),_e=Ue==="iframe"?` ${Cr(_)}`:"";ze(`child+ ${Ue}${Rt?` title="${Rt}"`:""}${_e} dims=${kn(_)}`)});else if(ae.type==="attributes"&&ae.target instanceof Element){let _=ae.target;if(_.tagName.toLowerCase()!=="iframe")continue;let Ue=ae.attributeName;(Ue==="src"||Ue==="srcdoc")&&ze(`attr~ iframe ${Ue}=${Ue==="srcdoc"?`[${(_.getAttribute("srcdoc")??"").length}ch]`:Xn(_.getAttribute("src"))} dims=${kn(_)}`)}}}),Pr.observe(An,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["src","srcdoc"]}));let ge=j=>{if(nt()||Tn)return;let ae=An.querySelectorAll("iframe"),_=typeof document<"u"&&"hasStorageAccess"in document;ze(`watchdog:${j} container=${kn(An)} children=${An.childElementCount} iframes=${ae.length} visibility=${typeof document>"u"?"(no document)":document.visibilityState} cookies=${typeof navigator>"u"?"?":navigator.cookieEnabled} hasStorageAccessApi=${_} paypalNetRequests=${zn.value}`),ae.forEach((Ue,Rt)=>{let _e=(Ue.getAttribute("title")??"").slice(0,40);ze(` iframe[${Rt}] ${kn(Ue)}${_e?` title="${_e}"`:""} ${Cr(Ue)}`);let Sn=dt(Ue);Sn&&ze(` ${Sn}`)}),on.length===0&&ze(" (no PayPal/zoid window errors captured)")};rr.push(setTimeout(()=>ge("3s"),3e3)),rr.push(setTimeout(()=>ge("8s"),8e3)),rr.push(setTimeout(()=>ge("15s"),15e3))},or(),ze("render:start");let Pe=se.startTiming();Gn=setTimeout(()=>{nt()||Tn||(ze("watchdog:11s retryable render timeout"),x("watchdog_expired","PayPal Buttons render did not settle within 11000ms."))},id);let At=Ye.render(An);(async()=>{try{if(await At,ze(`render:resolved inactive=${nt()}`),bn(),nt()){br();return}Tn=!0,Q(!0),lt(!1),Ce.current?.("ready"),se.log({name:"checkout.rendered",stage:"checkout_render",provider:"paypal",paymentMethodCategory:"paypal"}),se.performance({stage:"checkout_render",durationMs:se.elapsed(Pe),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"})}catch(ge){let j=ge instanceof Error?ge.message:"PayPal failed to render.";ze(`render:rejected msg=${j.slice(0,120)}`),bn(),x(Or(j)?"teardown":"render_rejected",j)}})()}).catch(z=>{let ce=z instanceof Error?z.message:"PayPal operation failed.";ze(`provider:failed msg=${ce.slice(0,120)}`);let J="script_rejected";D&&Or(ce)?J="teardown":D&&Fr&&(J="render_rejected"),x(J,ce)})},0);return()=>{Kt=!0,clearTimeout(W),Mr&&clearTimeout(Mr),bn(),Nt.current===sr&&(Nt.current=null),br(),Ve.current=null,rt.current=null}},[U,$,l,u,d,P,qe,vt,e,Fe,Te,be,V,Ke,ze,Qt]);let ie=re?(0,Qn.jsxs)("pre",{"data-testid":"flopay-direct-paypal-debug",style:{margin:"0 0 8px 0",padding:"6px 8px",background:ut?"#fef2f2":"#f3f4f6",border:`1px solid ${ut?"#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=${He} failed=${ut})`,Ne.length===0?`
|
|
2
2
|
(waiting for first lifecycle event\u2026)`:`
|
|
3
|
-
${
|
|
4
|
-
`)}`]}):null;return ut&&!it?
|
|
3
|
+
${Ne.join(`
|
|
4
|
+
`)}`]}):null;return ut&&!it?re?(0,Qn.jsx)("div",{children:ie}):null:(0,Qn.jsxs)("div",{children:[ie,et&&(0,Qn.jsx)(wo,{identity:et.identity,methodLabel:et.methodLabel,testId:"flopay-direct-paypal-identity-pane",onComplete:xe,onCancel:()=>xe(null)}),(0,Qn.jsxs)("div",{"aria-hidden":ot||et?!0:void 0,style:ot||et?{position:"relative",height:0,opacity:0,pointerEvents:"none"}:{position:"relative",minHeight:Ua},children:[!He&&!ot&&(0,Qn.jsx)("div",{"data-testid":"flopay-direct-paypal-placeholder",style:{position:"absolute",inset:0,borderRadius:8,background:"#e5e7eb",animation:"flopay-pulse 1.5s ease-in-out infinite",pointerEvents:"none"}}),(0,Qn.jsx)("div",{ref:me,"data-testid":"flopay-direct-paypal-container",tabIndex:-1,role:"group","aria-label":"PayPal payment method",style:{minHeight:Ua,display:"flex",opacity:He?1:0},"aria-busy":q||G},Te)]},Te),at&&(0,Qn.jsx)("button",{ref:ve,type:"button","data-testid":"flopay-direct-paypal-focus-target",onClick:yn,style:sd,children:"Try PayPal again"})]})}function ra(e){return(0,Qn.jsx)(bl,{...e})}function Pl(e){return(0,Qn.jsx)(bl,{...e})}var oa=require("react/jsx-runtime");function Ro({children:e,margin:t,icon:n=!0,styleOverride:r}){return(0,oa.jsxs)("div",{role:"alert","data-testid":"flopay-error",style:{margin:t,padding:"0.625rem 0.875rem",background:"#FEF2F2",border:"1px solid #FECACA",borderRadius:"8px",color:"#991B1B",fontSize:"0.85rem",fontWeight:600,...n?{display:"flex",alignItems:"center",gap:"0.5rem"}:{},...r??{}},children:[n&&(0,oa.jsx)("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",style:{flexShrink:0},children:(0,oa.jsx)("path",{d:"M12 9v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z",stroke:"#DC2626",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})}),e]})}var qa=require("@flopay/shared");function _o(){return typeof window<"u"&&typeof window.sessionStorage<"u"}var Li=":idempotency-key";function Ni(e,t){if(!_o())return null;let n=window.sessionStorage.getItem(e);if(!n)return null;try{let r=JSON.parse(n);return!r||typeof r.sid!="string"||!r.sid||"canonicalIdentity"in r&&r.canonicalIdentity!==t?null:{..."canonicalIdentity"in r?{canonicalIdentity:t}:{},sid:r.sid,nonce:typeof r.nonce=="string"?r.nonce:void 0}}catch{return{sid:n}}}function zi(e,t){if(!_o())return null;try{let n=window.sessionStorage.getItem(e+Li);if(!n)return null;try{let r=JSON.parse(n);return typeof r=="string"?r?{idempotencyKey:r}:null:!r||typeof r.idempotencyKey!="string"||!r.idempotencyKey||"canonicalIdentity"in r&&r.canonicalIdentity!==t?null:{..."canonicalIdentity"in r?{canonicalIdentity:t}:{},idempotencyKey:r.idempotencyKey}}catch{return{idempotencyKey:n}}}catch{return null}}function $a(e,t){if(_o())try{Ni(e,t)&&window.sessionStorage.removeItem(e)}catch(n){console.warn("[FloPayCheckout] Failed to clear checkout session cache.",n)}}function ja(e,t){if($a(e,t),!!_o())try{zi(e,t)&&window.sessionStorage.removeItem(e+Li)}catch(n){console.warn("[FloPayCheckout] Failed to clear checkout idempotency key.",n)}}function Va(e,t,n,r){if(_o())try{window.sessionStorage.setItem(e,JSON.stringify(r?{canonicalIdentity:t,sid:n,nonce:r}:{canonicalIdentity:t,sid:n}))}catch(o){console.warn("[FloPayCheckout] Failed to persist checkout session cache.",o)}}function Wa(e,t,n){if(_o())try{window.sessionStorage.setItem(e+Li,JSON.stringify({canonicalIdentity:t,idempotencyKey:n}))}catch(r){console.warn("[FloPayCheckout] Failed to persist checkout idempotency key.",r)}}function Oi(e,t){return`${e}:${t.totalAmount??""}:${t.overrideAmount??""}:${t.quantity??1}:${t.currency??""}`}function pd(e){if(e==null)return e;let t=JSON.stringify(Object.entries(e).sort(([l],[d])=>l<d?-1:l>d?1:0)),n=1779033703,r=3144134277,o=1013904242,a=2773480762;for(let l=0;l<t.length;l++){let d=t.charCodeAt(l);n=r^Math.imul(n^d,597399067),r=o^Math.imul(r^d,2869860233),o=a^Math.imul(o^d,951274213),a=n^Math.imul(a^d,2716044179)}return n=Math.imul(o^n>>>18,597399067),r=Math.imul(a^r>>>22,2869860233),o=Math.imul(n^o>>>17,951274213),a=Math.imul(r^a>>>19,2716044179),n^=r^o^a,r^=n,o^=n,a^=n,[n,r,o,a].map(l=>(l>>>0).toString(16).padStart(8,"0")).join("")}function Eo(e,t=!1){let n=e?.account?.email?.trim().toLowerCase()??"",r={c:e?.clientId,cur:e?.currency??"",captureMethod:e?.captureMethod??"",a:{e:n,u:n?"":e?.account?.userId??"",country:e?.account?.country??""},successUrl:e?.successUrl,cancelUrl:e?.cancelUrl,p:e?.products?.map(o=>Oi(`${o.type??""}:${o.code??o.providerItemId??o.providerPlanId??""}`,o)).sort(),i:e?.items?.map(o=>Oi(o.code??o.providerItemId??"",o)).sort(),s:e?.subscriptions?.map(o=>Oi(o.code??o.providerPlanId??"",o)).sort(),couponCodes:e?.couponCodes?[...e.couponCodes].sort():void 0,checkoutMetadata:pd(e?.checkoutMetadata),...t?{tagsData:e?.tagsData,utmMetadata:e?.utmMetadata,tokenizedData:e?.tokenizedData,checkoutMode:e?.checkoutMode??"full"}:{}};return JSON.stringify(r)}function vl(e,t=!1){let n=Eo(e,t),r=0;for(let o=0;o<n.length;o++)r=(r<<5)-r+n.charCodeAt(o)|0;return`flopay_session_${Math.abs(r).toString(36)}`}function Cl(e,t){if(!e?.customer||!e.products||t.checkoutMetadata!==void 0)return!1;let n=t.account.email?.trim().toLowerCase()??"",r=e.customer.email?.trim().toLowerCase()??"";if((n?r!==n:e.customer.id!==t.account.userId)||(t.account.country??"").trim().toUpperCase()!==(e.customer.country??"").trim().toUpperCase()||e.successUrl!==t.successUrl||e.cancelUrl!==t.cancelUrl||(e.captureMethod??"automatic")!==(t.captureMethod??"automatic"))return!1;let o=(0,qa.resolveSessionCurrency)(t.currency,t.items,t.subscriptions,t.products);if(!o||e.currency.toUpperCase()!==o.toUpperCase())return!1;let a=(t.products??(0,qa.foldIntoProducts)(t.items,t.subscriptions)).map(p=>({type:p.type,code:p.code??p.providerItemId??p.providerPlanId??"",quantity:p.quantity??1,totalAmount:p.totalAmount,overrideAmount:p.overrideAmount??null,currency:(p.currency??o).toUpperCase()})).sort((p,b)=>`${p.code}:${p.type??""}`.localeCompare(`${b.code}:${b.type??""}`)),l=e.products.map(p=>({type:p.type,code:p.code??"",quantity:p.quantity??1,totalAmount:p.totalAmount,overrideAmount:p.overrideAmount??null,currency:(p.currency??e.currency).toUpperCase()})).sort((p,b)=>`${p.code}:${p.type??""}`.localeCompare(`${b.code}:${b.type??""}`));if(a.length!==l.length)return!1;for(let[p,b]of a.entries()){let v=l[p];if(v===void 0||b.code!==v.code||b.type!==void 0&&b.type!==v.type||b.quantity!==v.quantity||b.totalAmount!==v.totalAmount||b.overrideAmount!==v.overrideAmount||b.currency!==v.currency)return!1}let d=[...t.couponCodes??[]].sort(),u=[...e.coupons??[]].sort();return d.length===u.length&&d.every((p,b)=>p===u[b])}var nn=require("react/jsx-runtime");var md={panel:{background:"white"},spinnerTrackColor:"#e5e7eb",spinnerAccentColor:"#4A49FF",labelColors:{processing:"#374151",success:"#16a34a",error:"#dc2626"},noteColor:"#6b7280"};function er({status:e,errorMessage:t,authorized:n=!1,processingLabel:r="PROCESSING...",successLabel:o,errorLabel:a="PAYMENT FAILED",successNote:l="You will be automatically redirected, do not close or navigate away from this window.",theme:d=md}){let u={fontSize:13,color:d.noteColor,fontWeight:400,maxWidth:260,lineHeight:1.4,margin:0};return(0,nn.jsx)("div",{"data-testid":"flopay-processing-overlay","data-status":e,role:"dialog","aria-modal":"true",style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.35)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3,backdropFilter:"blur(2px)"},children:(0,nn.jsxs)("div",{"data-testid":"flopay-processing-overlay-panel",style:{borderRadius:12,boxShadow:"0 8px 32px rgba(0,0,0,0.18)",...d.panel,padding:"2rem 2.5rem",textAlign:"center",minWidth:240,display:"flex",flexDirection:"column",alignItems:"center",gap:16},children:[(0,nn.jsxs)("div",{style:{width:48,height:48,position:"relative"},children:[e==="processing"&&(0,nn.jsxs)("svg",{"aria-hidden":"true",width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{animation:"flopay-spin 0.8s linear infinite"},children:[(0,nn.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:d.spinnerTrackColor,strokeWidth:"3"}),(0,nn.jsx)("path",{d:"M4 12a8 8 0 018-8v3a5 5 0 00-5 5H4z",fill:d.spinnerAccentColor})]}),e==="success"&&(0,nn.jsx)("div",{style:{animation:"flopay-pop 0.4s cubic-bezier(0.34,1.56,0.64,1)"},children:(0,nn.jsxs)("svg",{"aria-hidden":"true",width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,nn.jsx)("circle",{cx:"12",cy:"12",r:"11",fill:"#22c55e"}),(0,nn.jsx)("path",{d:"M7 12.5l3 3 7-7",stroke:"white",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",style:{strokeDasharray:20,strokeDashoffset:20,animation:"flopay-draw 0.4s 0.15s ease forwards"}})]})}),e==="error"&&(0,nn.jsx)("div",{style:{animation:"flopay-shake 0.4s ease"},children:(0,nn.jsxs)("svg",{"aria-hidden":"true",width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,nn.jsx)("circle",{cx:"12",cy:"12",r:"11",fill:"#ef4444"}),(0,nn.jsx)("path",{d:"M8 8l8 8M16 8l-8 8",stroke:"white",strokeWidth:"2.5",strokeLinecap:"round",style:{strokeDasharray:12,strokeDashoffset:12,animation:"flopay-draw 0.3s 0.1s ease forwards"}})]})})]}),(0,nn.jsxs)("span",{style:{fontSize:14,fontWeight:600,letterSpacing:"0.05em",color:d.labelColors[e]},children:[e==="processing"&&r,e==="success"&&(o??(n?"PAYMENT AUTHORISED":"PAYMENT SUCCESSFUL")),e==="error"&&a]}),e==="success"&&l!==null&&(0,nn.jsx)("p",{style:u,children:l}),e==="error"&&t&&(0,nn.jsx)("p",{style:u,children:t}),(0,nn.jsx)("style",{children:`
|
|
5
5
|
@keyframes flopay-spin { to { transform: rotate(360deg); } }
|
|
6
6
|
@keyframes flopay-pop { 0% { transform: scale(0); } 100% { transform: scale(1); } }
|
|
7
7
|
@keyframes flopay-draw { to { stroke-dashoffset: 0; } }
|
|
8
8
|
@keyframes flopay-shake { 0%,100% { transform: translateX(0); } 20%,60% { transform: translateX(-4px); } 40%,80% { transform: translateX(4px); } }
|
|
9
|
-
`})]})})}var Cl=require("@flopay/shared"),Pn=require("react");var Sl=require("react/jsx-runtime");function oa({flopay:e,paypalFlopay:t,options:n,onInstrument:r,children:o}){let[a,l]=(0,Pn.useState)(e instanceof Promise?null:e),[d,u]=(0,Pn.useState)(t instanceof Promise||!t?null:t),p=(0,Pn.useRef)(null),b=(0,Pn.useRef)(null),v=ko(r);(0,Pn.useEffect)(()=>{v({class:"lifecycle",name:"checkout.mount"})},[v]),(0,Pn.useEffect)(()=>{a&&v({class:"lifecycle",name:"sdk.initialize.ready"})},[v,a]),(0,Pn.useEffect)(()=>{if(a)return dn(a)?.subscribe?.(v)},[v,a]),(0,Pn.useEffect)(()=>{if(!(!d||d===a))return dn(d)?.subscribe?.(v)},[v,a,d]),(0,Pn.useEffect)(()=>{if(!a)return;let w=dn(a);return p.current=w?.beginCheckout()??w?.now()??0,w?.log({name:"checkout.mount",stage:"checkout_mount"}),()=>{w?.log({name:"checkout.unmount",stage:"unmount"})}},[a]),(0,Pn.useEffect)(()=>{let w=!1;return e instanceof Promise?e.then(h=>{w||l(h)},()=>{w||v({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED"})}):l(e),()=>{w=!0}},[v,e]),(0,Pn.useEffect)(()=>{let w=!1;if(!t){u(null);return}return t instanceof Promise?t.then(h=>{w||u(h)},()=>{w||v({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED",provider:"paypal"})}):u(t),()=>{w=!0}},[v,t]),(0,Pn.useEffect)(()=>{if(!a||b.current===a)return;b.current=a;let w=dn(a);w?.log({name:"checkout.rendered",stage:"checkout_render"}),v({class:"lifecycle",name:"checkout.rendered"}),w?.performance({stage:"checkout_render",durationMs:w.elapsed(p.current??0),durationMode:"machine"})},[v,a]);let M=(0,Cl.resolveBillingApiUrl)(n?.billingApiUrl),I=(0,Pn.useMemo)(()=>({flopay:a,paypalFlopay:d,billingApiUrl:M,emitInstrument:v}),[a,d,M,v]);return(0,Sl.jsx)(Zn.Provider,{value:I,children:o})}var Wa="flopay_recent_completion_";function Eo(e){if(!(!e||typeof window>"u"))try{let t={expiresAt:Date.now()+6e4};window.sessionStorage.setItem(Wa+e,JSON.stringify(t))}catch{}}function zi(e){if(!e||typeof window>"u")return!1;try{let t=window.sessionStorage.getItem(Wa+e);if(!t)return!1;let n=JSON.parse(t);return typeof n?.expiresAt!="number"||n.expiresAt<=Date.now()?(window.sessionStorage.removeItem(Wa+e),!1):!0}catch{return!1}}async function Ha(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)}}var Yr=require("@flopay/js"),je=require("@flopay/shared");var ia="card",md=1e3;async function yd(e,t,n){if(n){if(typeof e.retrieveSetupIntent!="function")return null;let{setupIntent:a,error:l}=await e.retrieveSetupIntent(t);return{error:l,intent:a??null}}if(typeof e.retrievePaymentIntent!="function")return null;let{paymentIntent:r,error:o}=await e.retrievePaymentIntent(t);return{error:o,intent:r??null}}async function fd(e,t,n,r){if(r){if(typeof e.confirmCardSetup!="function")return null;let{setupIntent:l,error:d}=await e.confirmCardSetup(t,n);return{error:d,intent:l??null}}if(typeof e.confirmCardPayment!="function")return null;let{paymentIntent:o,error:a}=await e.confirmCardPayment(t,n);return{error:a,intent:o??null}}function Xr(e){return new je.FloPayError("Card authentication was cancelled.","api_error",{code:"three_ds_aborted",cause:e})}function Ui(){return new je.FloPayError("Card authentication timed out.","api_error",{code:"three_ds_timeout"})}function $i(e,t){return Object.assign(e,{checkoutMethod:t})}function qr(e,t){let n=e instanceof je.FloPayError?e:new je.FloPayError(e instanceof Error?e.message:"Payment provider failed.","api_error",{code:"provider_runtime_failure"});return Object.assign(n,{checkoutMethod:t,telemetryFailureCategory:"provider_runtime",telemetryRequestCategory:"provider_sdk"})}async function aa(e,t){try{return await e()}catch(n){throw qr(n,t)}}function kl(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 gd(e){return e.status==="succeeded"||e.status==="authorized"||e.status==="declined"}async function ji(e){if(typeof document>"u"||typeof window>"u")throw new je.FloPayError("3DS challenge requires a browser environment.","api_error",{code:"three_ds_no_window"});if(e.signal?.aborted)throw Xr();let t=1e3,n=15e3,r=`${e.billingApiUrl.replace(/\/$/,"")}/v1/checkouts/sessions/${encodeURIComponent(e.sessionId)}/3ds/complete`,o=async()=>{let v=new AbortController,M=()=>v.abort();e.signal?.aborted?v.abort():e.signal?.addEventListener("abort",M);let I=window.setTimeout(()=>v.abort(),n);try{let w=await fetch(r,{method:"POST",headers:{"x-checkout-session-token":e.nonce,"content-type":"application/json"},body:"{}",signal:v.signal});if(!w.ok)return{status:"unknown"};let h=await w.json().catch(()=>null);return hd(h)}catch{return{status:"unknown"}}finally{window.clearTimeout(I),e.signal?.removeEventListener("abort",M)}},a,l=()=>e.pollCompletionEndpoint!==!1?o():(a??(a=o()),a),d=document.activeElement instanceof HTMLElement?document.activeElement:null,u=document.createElement("div");u.setAttribute("data-flopay-auto-3ds-overlay","1"),u.setAttribute("role","dialog"),u.setAttribute("aria-modal","true"),u.setAttribute("aria-label","Card authentication"),u.style.cssText=["position:fixed","inset:0","z-index:2147483647","background:rgba(15,23,42,0.6)","display:flex","align-items:center","justify-content:center","padding:16px"].join(";");let p=document.createElement("iframe");p.setAttribute("title","Card authentication"),p.setAttribute("allow","payment"),p.tabIndex=0,p.style.cssText=["width:min(100%,460px)","height:min(100%,640px)","border:0","border-radius:12px","background:#fff","box-shadow:0 12px 30px rgba(0,0,0,0.35)"].join(";");let b=null;try{b=new URL(e.billingApiUrl,window.location.href).origin}catch{b=null}try{let v=await new Promise((M,I)=>{let w=!1,h=0,O=0,G=0,T=!1,Y=()=>{window.clearTimeout(h),window.clearInterval(O),window.clearTimeout(G),window.removeEventListener("message",he),p.removeEventListener("load",de),e.signal?.removeEventListener("abort",X)},U=async()=>{if(!(w||T)){T=!0;try{let De=await l();if(w||!gd(De))return;w=!0,Y(),M(De)}finally{T=!1}}},de=()=>{e.pollCompletionEndpoint!==!1&&(window.clearTimeout(G),G=window.setTimeout(()=>{U()},250))},X=()=>{w||(w=!0,Y(),I(Xr()))},he=De=>{if(De.source!==p.contentWindow||b&&De.origin!==b)return;let re=De.data;!re||typeof re!="object"||re.source!=="flopay-vault-3ds-return"||w||(w=!0,Y(),M(null))};h=window.setTimeout(()=>{w||(w=!0,Y(),I(Ui()))},je.THREE_DS_CHALLENGE_WINDOW_MS),e.pollCompletionEndpoint!==!1&&(O=window.setInterval(()=>{U()},t)),p.addEventListener("load",de),window.addEventListener("message",he),e.signal?.addEventListener("abort",X),p.src=e.nextActionRedirectUrl,u.appendChild(p),document.body.appendChild(u),p.focus(),e.signal?.aborted&&X()});return v||await l()}finally{u.parentNode?.removeChild(u),d?.isConnected&&d.focus()}}async function To(e,t){let{billingApiUrl:n,sessionId:r,signal:o}=t,a=t.nonce??t.session.clientSecret,l=new Yr.PaymentAPI(n,{telemetry:!1}),d=`${n.replace(/\/+$/,"")}/v1/checkouts/sessions/${encodeURIComponent(r)}/status`,u=new AbortController,p=new AbortController,b=()=>{u.abort(o.reason),p.abort(o.reason)};o.aborted?b():o.addEventListener("abort",b,{once:!0});let v=ji({billingApiUrl:n,sessionId:r,nonce:a,nextActionRedirectUrl:e.nextActionRedirectUrl,signal:u.signal,pollCompletionEndpoint:!1}),M=l.waitForCheckoutSessionCompletion(r,{initialDelayMs:md,nonce:a,statusUrl:d,continueAfterActionRequired:!0,timeoutMs:je.THREE_DS_CHALLENGE_WINDOW_MS+15e3,signal:p.signal}),I;try{let h=await Promise.race([v,M]);if("data"in h)I=h;else{if(h.status==="declined")throw Er({type:h.declineReason??"authorization_declined",gatewayErrorCode:h.gatewayDeclineReason??void 0},"Card was declined.",{checkoutMethod:"card"});if(h.status==="timeout")throw Ui();I=await M}}catch(h){if(o.aborted||h instanceof Error&&h.name==="AbortError")throw Xr(h);if(!(h instanceof je.FloPayError)||h.code!=="three_ds_timeout"&&h.code!=="checkout_processing_timeout")throw h;try{I=await l.waitForCheckoutSessionCompletion(r,{initialDelayMs:0,nonce:a,statusUrl:d,timeoutMs:5e3,signal:o})}catch(G){if(o.aborted)throw Xr(G);if(!(G instanceof je.FloPayError)||G.code!=="checkout_processing_timeout")throw G}let O=I&&Kr(I,t.session);if(!Nr(O)&&O?.status!=="expired"){if(t.telemetry){let G=new Yr.PaymentAPI(n);try{G.reportThreeDsAbandoned(r)}finally{G.destroy()}}throw Ui()}}finally{o.removeEventListener("abort",b),u.abort(),p.abort()}let w=I&&Kr(I,t.session);if(!Nr(w))throw vo(w);return{...Lr(w,r),checkoutMethod:"card"}}function hd(e){if(!e||typeof e!="object")return{status:"unknown"};let t=typeof e.status=="string"?e.status:"unknown",n=typeof e.providerIntentId=="string"?e.providerIntentId:null;switch(t){case"succeeded":case"authorized":case"pending":case"timeout":return{status:t,providerIntentId:n};case"declined":return{status:"declined",providerIntentId:n,declineReason:typeof e.declineReason=="string"?e.declineReason:null,gatewayDeclineReason:typeof e.gatewayDeclineReason=="string"?e.gatewayDeclineReason:null};case"requires_action":return{status:"requires_action",providerIntentId:n,nextActionRedirectUrl:typeof e.nextActionRedirectUrl=="string"?e.nextActionRedirectUrl:null};case"no_attempt":return{status:"no_attempt"};default:return{status:"unknown"}}}function Er(e,t="Payment failed. Please try again.",n){let r=n?.checkoutMethod??e?.checkoutMethod??(e?.type==="paypal_redirect_required"?"paypal":"card"),o=e?.message??t,a=Hr(o)??o,l=$i(new je.FloPayError(a,"api_error",{code:e?.code??(0,je.normalizeCheckoutFailureOutcome)(e?.outcome)??(0,je.normalizeCheckoutFailureOutcome)(e?.type)??e?.gatewayErrorCode}),r);return e?.orderId&&(l.orderId=e.orderId),l}function qi(e){return typeof window<"u"&&window.location.href?window.location.href:e.successUrl||e.cancelUrl||void 0}function Ka(e){return typeof e=="string"&&e.startsWith("pi_")&&e.includes("_secret_")}function Il(e,t){let n=[e?.threeDSecureToken,e?.clientSecret,e?.stripeClientSecret];for(let o of n)if(typeof o=="string"&&o.length>0&&(!t?.requirePaymentIntentClientSecret||Ka(o)))return o;let r=e?.data;if(r&&typeof r=="object"){let o=r,a=[o.threeDSecureToken,o.clientSecret,o.stripeClientSecret,o.id];for(let d of a)if(typeof d=="string"&&d.length>0&&(!t?.requirePaymentIntentClientSecret||Ka(d)))return d;let l=o.gateways;if(l&&typeof l=="object"){let d=l.stripe;if(d&&typeof d=="object"){let u=d,p=[u.stripeClientSecret,u.clientSecret];for(let b of p)if(typeof b=="string"&&b.length>0&&(!t?.requirePaymentIntentClientSecret||Ka(b)))return b}}}}async function bd({billingApiUrl:e,sessionId:t,nonce:n,responseJson:r}){let o=Il(r,{requirePaymentIntentClientSecret:!0});if(typeof o=="string"&&o.length>0)return{type:"3ds_required",threeDSecureToken:o};if(!t)return null;try{let d=(await new Yr.PaymentAPI(e,{telemetry:!1}).getUnifiedCheckoutSession(t,n)).data.stripe?.clientSecret;if(Ka(d))return{type:"3ds_required",threeDSecureToken:d}}catch{}return null}async function Ao({billingApiUrl:e,sessionId:t,session:n,nonce:r,tokenizedData:o,returnUrl:a,telemetry:l}){let d=e.replace(/\/+$/,""),u=t??n.id,p=r??n.clientSecret,b=n.customer?.id??n.accountData?.userId??"",v=n.customer?.email??n.accountData?.email??"",M=n.customer?.firstName??n.accountData?.firstName??"",I=n.customer?.lastName??n.accountData?.lastName??"",w=n.customer?.country??n.accountData?.country??void 0,h=n.customer?.zip??n.accountData?.zip??void 0,G=await new Yr.PaymentAPI(d,l===!1?{telemetry:!1}:void 0).processPayment(b,{sessionId:u,nonce:p,paymentMethodCategory:"saved",tokenizedData:o,accountData:{userId:b,email:v,firstName:M,lastName:I,country:w,zip:h},returnUrl:a??qi(n)});if(G.ok){let U=typeof G.json=="function"?await G.json().catch(()=>null):null;if((0,je.isAuthorizationOnlySession)(n)||U?.status==="authorized")return{type:"success",result:{status:"authorized",paymentId:typeof U?.paymentId=="string"?U.paymentId:n.paymentId,sessionId:typeof U?.sessionId=="string"?U.sessionId:u,authorizationExpiresAt:typeof U?.authorizationExpiresAt=="string"?U.authorizationExpiresAt:n.authorizationExpiresAt,paymentMethodId:Xo(o),checkoutMethod:wl(o,n)}};let de=o?.threeDSecureActionResultTokenId;return{type:"success",result:{status:"succeeded",...de?{paymentIntentId:de}:{},paymentMethodId:Xo(o),checkoutMethod:wl(o,n)}}}let T;try{T=await G.json()}catch(U){throw new je.FloPayError("Payment failed. Please try again.","api_error",{code:"InvalidPaymentProcessResponse",statusCode:G.status,cause:U})}if(T?.type==="3ds_required"&&typeof T.nextActionRedirectUrl=="string")return{type:"next_action_required",nextActionRedirectUrl:T.nextActionRedirectUrl};if(T?.type==="paypal_redirect_required"||T?.type==="3ds_required"){let U=Il(T);if(!U)throw new je.FloPayError("Authentication is required but no redirect token was provided.","api_error",{code:"InvalidPaymentProcessResponse",statusCode:G.status});return{type:T.type,threeDSecureToken:U,paymentMethodId:T.paymentMethodId}}if(T?.gatewayErrorCode==="authentication_required"){let U=await bd({billingApiUrl:d,sessionId:u,nonce:p,responseJson:T});if(U)return U;throw $i(new je.FloPayError("Your card requires authentication. Please enter your payment details below.","api_error",{code:"authentication_required"}),"card")}let Y=new je.FloPayError(T?.message??"Payment failed. Please try again.","api_error",{code:T?.code??T?.gatewayErrorCode,declineCode:T?.declineCode??T?.gatewayDeclineReason,statusCode:G.status});throw Object.assign(Y,{telemetryOutcome:(0,je.classifyPaymentRejection)(G.status,T)})}async function Ga(e,{flopay:t,paypalFlopay:n,attempt3DS:r,billingApiUrl:o,sessionId:a,session:l,returnUrl:d,telemetry:u,signal:p}){let b=t?.getRawProvider();if(!b)throw qr(new je.FloPayError("Payment provider is not available.","api_error"),"card");if(e.type==="3ds_required"){if(!r||!e.threeDSecureToken)throw $i(new je.FloPayError("Your card requires authentication. Please enter your payment details below.","api_error",{code:"authentication_required"}),"card");let v=(0,je.isSetupIntentClientSecret)(e.threeDSecureToken),M=null,I=e.paymentMethodId,w=await aa(()=>yd(b,e.threeDSecureToken,v),"card");if(w){if(w.error)throw qr(new je.FloPayError(w.error.message??`Failed to retrieve 3DS ${v?"setup":"payment"} status.`,"api_error",{code:w.error.code}),"card");let O=w.intent;!I&&O?.payment_method&&(typeof O.payment_method=="string"?I=O.payment_method:"id"in O.payment_method&&(I=O.payment_method.id??void 0))}let h=I?await aa(()=>fd(b,e.threeDSecureToken,{payment_method:I,return_url:d??qi(l)??window.location.href},v),"card"):null;if(h){if(h.error)throw qr(new je.FloPayError(h.error.message??"3DS authentication failed.","api_error",{code:h.error.code}),"card");M=h.intent}else{let O=await aa(()=>b.handleNextAction({clientSecret:e.threeDSecureToken}),"card");if(O.error)throw qr(new je.FloPayError(O.error.message??"3DS authentication failed.","api_error",{code:O.error.code}),"card");M=(v?O.setupIntent:O.paymentIntent)??null}if(M&&(M.status==="requires_capture"||M.status==="succeeded"||M.status==="processing")){let O=await Ao({billingApiUrl:o,sessionId:a,session:l,telemetry:u,tokenizedData:{id:M.id,type:"card",threeDSecureActionResultTokenId:M.id},returnUrl:d});return O.type==="success"?{...O.result,paymentIntentId:O.result.paymentIntentId??M.id,paymentMethodId:O.result.paymentMethodId??I}:O.type==="next_action_required"?To(O,{billingApiUrl:o,sessionId:a??l.id,session:l,signal:p}):Ga(O,{flopay:t,paypalFlopay:n,attempt3DS:r,billingApiUrl:o,sessionId:a,session:l,returnUrl:d,telemetry:u,signal:p})}throw qr(new je.FloPayError("3DS authentication did not complete successfully.","api_error"),"card")}if(e.type==="paypal_redirect_required"){let v=(n??t)?.getRawProvider();if(!v)throw qr(new je.FloPayError("PayPal is not available.","api_error"),"paypal");if(e.paymentMethodId){let{error:I}=await aa(()=>v.handleNextAction({clientSecret:e.threeDSecureToken}),"paypal");if(I)throw qr(new je.FloPayError(I.message??"PayPal authorization failed.","api_error",{code:I.code}),"paypal");return{status:"succeeded",checkoutMethod:"paypal"}}let{error:M}=await aa(()=>v.confirmPayment({clientSecret:e.threeDSecureToken,confirmParams:{return_url:d??qi(l)??window.location.href,payment_method_data:{type:"paypal"}},redirect:"if_required"}),"paypal");if(M)throw qr(new je.FloPayError(M.message??"PayPal authorization failed.","api_error",{code:M.code}),"paypal");return{status:"succeeded",checkoutMethod:"paypal"}}throw new je.FloPayError("Unsupported payment redirect state.","api_error")}function sa(e){if(e instanceof je.FloPayError){let r=Hr(e.message);return r&&r!==e.message?Object.assign(new je.FloPayError(r,e.type,{code:e.code,declineCode:e.declineCode,param:e.param,statusCode:e.statusCode}),{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=Hr(t)??t;return new je.FloPayError(n,"api_error")}function Vi(e){let t=e.data.stripe?.publishableKey,n=!!e.data.paypal?.publishableKey,r=!!e.data.session?.vault?.html||Wr(e.data.session);if(!t&&!n&&!r)throw new je.FloPayError("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 wl(e,t){return e?e.isPaypal?"paypal":"card":t&&Wr(t)?"card":void 0}async function Wi({publishableKey:e,paypalPublishableKey:t,billingApiUrl:n,locale:r,telemetry:o}){if(!e)return{flopay:null,paypalFlopay:null};let a=t&&t!==e?t:void 0,[l,d]=await Promise.all([(0,Yr.loadFloPay)(e,{billingApiUrl:n,locale:r,telemetry:o}),a?(0,Yr.loadFloPay)(a,{billingApiUrl:n,locale:r,telemetry:o}).catch(p=>(console.warn("[FloPay] Failed to load PayPal Stripe instance:",p),null)):Promise.resolve(null)]);if(!l)throw new je.FloPayError("The payment provider did not initialize.","authentication_error");let u=null;return a?u=d:t&&(u=l),{flopay:l,paypalFlopay:u}}var fr=require("@flopay/js"),y=require("@flopay/shared"),Jt=require("@stripe/react-stripe-js"),i=Js(require("react"),1);function xo(e,t){return{...t,inAppBrowser:e.browser.inAppBrowser,appFamily:e.browser.appFamily,popupCapability:e.capability.current(),presentationMode:e.presentationMode}}function Ya(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()}}var Rl={alipay:"https://cdn.flopay.com/sdk-logos/v1/alipay.svg",bancontact:"https://cdn.flopay.com/sdk-logos/v1/bancontact.svg",blik:"https://cdn.flopay.com/sdk-logos/v1/blik.svg",eps:"https://cdn.flopay.com/sdk-logos/v1/eps.svg",giropay:"https://cdn.flopay.com/sdk-logos/v1/giropay.svg",ideal:"https://cdn.flopay.com/sdk-logos/v1/ideal.svg",klarna:"https://cdn.flopay.com/sdk-logos/v1/klarna.svg",p24:"https://cdn.flopay.com/sdk-logos/v1/p24.svg",sepa_debit:"https://cdn.flopay.com/sdk-logos/v1/sepa_debit.svg",wechat_pay:"https://cdn.flopay.com/sdk-logos/v1/wechat_pay.svg"};var $n=require("react");function _l(e,t){if(!e)return t;let n=t??{},r=Object.keys(n),o=r.some(l=>l.startsWith("background")),a={};for(let[l,d]of Object.entries(e))l in n||o&&l.startsWith("background")||(a[l]=d);for(let l of r)a[l]=n[l];return a}var Pd=new Set(["animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","scale","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth"]);function vd(e){let t=e.replace(/^(Webkit|Moz|ms)(?=[A-Z])/,"");return Pd.has(t.charAt(0).toLowerCase()+t.slice(1))}function Cd(e,t){return typeof t=="number"&&t!==0&&!vd(e)?`${t}px`:String(t).trim()}function El(e,t){if(e.style.cssText="",!!t){for(let[n,r]of Object.entries(t))if(!(r==null||r==="")){if(n.startsWith("--")){e.style.setProperty(n,String(r));continue}e.style[n]=Cd(n,r)}}}var Tl=require("react/jsx-runtime"),Hi=new WeakSet;function Mo({capture:e,html:t,messageToken:n,expectedOrigin:r,theme:o,submitLabel:a,containerStyle:l,onReady:d,onError:u,onValidation:p}){let b=(0,$n.useRef)(null),v=(0,$n.useRef)(d),M=(0,$n.useRef)(u),I=(0,$n.useRef)(p);v.current=d,M.current=u,I.current=p;let w=(0,$n.useRef)(o);w.current=o;let h=(0,$n.useRef)(null),O=a??void 0,G=(0,$n.useRef)(O);G.current=O;let T=(0,$n.useRef)(void 0);return(0,$n.useEffect)(()=>{let Y=b.current;if(!Y)return;let U=!0,de=!1,X=()=>{!U||de||(de=!0,v.current?.())},he=e.on("ready",()=>{X()}),De=e.on("error",te=>{M.current?.(te.message??"There was a problem loading the secure card form.")}),re=e.on("validation",te=>{I.current?.(te.message??null)}),Ve=G.current??(Hi.has(e)?null:void 0),yt={html:t,...n?{messageToken:n}:{},...r?{expectedOrigin:r}:{},...w.current?{theme:w.current}:{},...Ve===void 0?{}:{submitLabel:Ve}};return h.current=w.current??null,T.current=G.current,G.current!==void 0&&Hi.add(e),e.mount(Y,yt).then(()=>{X()}).catch(te=>{U&&M.current?.(te instanceof Error?te.message:"Failed to load the secure card form.")}),()=>{U=!1,he(),De(),re(),e.unmount()}},[e,t,n,r]),no(()=>{let Y=b.current;Y&&El(Y,l)},[l]),(0,$n.useEffect)(()=>{o!==void 0&&(o===null&&h.current===null||(h.current=o,e.applyTheme?.(o)))},[e,o]),(0,$n.useEffect)(()=>{O!==T.current&&(T.current=O,O!==void 0&&Hi.add(e),e.setSubmitLabel?.(O??null))},[e,O]),(0,Tl.jsx)("div",{ref:b,"data-testid":"flopay-vault-card-fields"})}var xl=/^#([0-9a-f]{6})$/i,Sd=/^#([0-9a-f]{3})$/i,Ml=/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/i,Bl=/^rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(0|1|0?\.\d+|1\.0+)\s*\)$/i,wd=/^linear-gradient\(\s*(-?\d+(?:\.\d+)?)deg\s*,\s*(.+)\)$/i,kd=/^(-?\d+(?:\.\d+)?)(?:px)?$/,Id=/^(-?\d+(?:\.\d+)?)em$/,Rd=/^blur\(\s*(\d+(?:\.\d+)?)(?:px)?\s*\)$/i,_d=/^[a-z][a-z0-9 -]{0,31}$/i,Ed=new Set(["none","uppercase","lowercase","capitalize"]);function Fl(e){if(typeof e!="string")return null;let t=e.trim(),n=xl.exec(t);if(n){let b=Number.parseInt(n[1],16);return{r:b>>16&255,g:b>>8&255,b:b&255,a:null}}let r=Sd.exec(t);if(r){let[b,v,M]=r[1].split("").map(I=>Number.parseInt(I+I,16));return{r:b,g:v,b:M,a:null}}let o=Ml.exec(t),a=o?null:Bl.exec(t),l=o??a;if(!l)return null;let d=Number(l[1]),u=Number(l[2]),p=Number(l[3]);return d>255||u>255||p>255?null:{r:d,g:u,b:p,a:a?Number(a[4]):null}}function Dl({r:e,g:t,b:n,a:r}){return r===null?`#${(1<<24|e<<16|t<<8|n).toString(16).slice(1)}`:`rgba(${e},${t},${n},${r})`}function la(e){if(typeof e!="string")return;let t=e.trim();if(xl.test(t)||Ml.test(t))return t;let n=Bl.exec(t);if(n&&/^\d/.test(n[4]))return t;let r=Fl(t);return r?Dl(r):void 0}function Xa(e,t=.12){let n=Fl(e);if(!n)return e;let r=Math.max(0,Math.min(1,1-t));return Dl({r:Math.round(n.r*r),g:Math.round(n.g*r),b:Math.round(n.b*r),a:n.a})}function ca(e,t){let n=[],r=0,o="";for(let a of e){if(a==="("&&(r+=1),a===")"&&(r-=1),a===t&&r===0){o.trim()&&n.push(o.trim()),o="";continue}o+=a}return o.trim()&&n.push(o.trim()),n}function oo(e,t,n){if(typeof e!="number"&&typeof e!="string")return;let r=kd.exec(String(e).trim());if(!r)return;let o=Number(r[1]);return Number.isFinite(o)&&o>=t&&o<=n?o:void 0}function Td(e,t,n){if(typeof e!="string")return;let r=Id.exec(e.trim());if(!r)return;let o=Number(r[1]);return Number.isFinite(o)&&o>=t&&o<=n?o:void 0}function Ad(e){let t=ca(e,",");if(t.length<2||t.length>5)return;let n=[];for(let[r,o]of t.entries()){let a=ca(o," "),l=la(a[0]);if(!l)return;let d=r/(t.length-1)*100,u=a[1]===void 0?d:Number(/^(\d+(?:\.\d+)?)%$/.exec(a[1])?.[1]),p=n[n.length-1]?.position??-1;if(!Number.isFinite(u)||u<0||u>100||u<p)return;n.push({color:l,position:u})}return{type:"linearGradient",angle:0,stops:n}}function xd(e){if(typeof e!="string")return;let t=e.trim(),n=la(t);if(n)return{type:"solid",color:n};let r=wd.exec(t);if(!r)return;let o=Number(r[1]);if(!Number.isFinite(o)||o<0||o>360)return;let a=Ad(r[2]);return a&&a.type==="linearGradient"?{...a,angle:o}:void 0}function Md(e){return e.type==="solid"?{type:"solid",color:Xa(e.color)}:{...e,stops:e.stops.map(t=>({...t,color:Xa(t.color)}))}}function Bd(e){let t=!1,n,r=[];for(let u of ca(e," ")){if(u.toLowerCase()==="inset"){t=!0;continue}let p=la(u);if(p){n=p;continue}let b=oo(u,-128,128);if(b===void 0)return;r.push(b)}if(!n||r.length<2||r.length>4)return;let[o,a,l=0,d=0]=r;if(!(Math.abs(o)>64||Math.abs(a)>64||l>128||Math.abs(d)>32))return{color:n,inset:t,offsetX:o,offsetY:a,blur:l,spread:d}}function Fd(e){if(typeof e!="string")return;let t=e.trim();if(t.toLowerCase()==="none")return[];let n=ca(t,",").map(Bd);if(!(n.length===0||n.length>4))return n.every(r=>r!==void 0)?n:void 0}function Al(e){if(typeof e!="string")return;let t=ca(e,",").map(n=>n.replace(/^['"]|['"]$/g,"").trim()).filter(n=>_d.test(n)).slice(0,4);return t.length>0?t:void 0}function Dd(e){let t=typeof e=="string"?e.trim().split(/\s+/):[e],n=oo(t[0],0,64),r=oo(t[1]??t[0],0,64);if(!(n===void 0||r===void 0))return{paddingBlock:n,paddingInline:r}}function Od(e){if(e==="bold")return 700;if(e==="normal")return 400;let t=Number(e);return Number.isInteger(t)&&t>=100&&t<=900?t:void 0}function Ol({appearance:e,buttonsStyles:t,fontFamily:n}){let r=t.submitButton;if(!r)return;let o=e?.variables,a=xd(r.background??r.backgroundColor),l=la(o?.colorPrimaryHover),d=l?{type:"solid",color:l}:a&&Md(a),u={fontFamilies:Al(r.fontFamily)??Al(n),fontSize:oo(r.fontSize??t.submitButtonFontSize,10,32)??16,fontWeight:Od(r.fontWeight)??600,letterSpacing:Td(r.letterSpacing,-.1,.5)??.01,lineHeight:oo(r.lineHeight,.8,2)??1,textTransform:Ed.has(String(r.textTransform))?r.textTransform:"uppercase"},p=Dd(r.padding),b=Fd(r.boxShadow),v=oo(r.borderRadius,0,9999),M=typeof r.backdropFilter=="string"?oo(Rd.exec(r.backdropFilter.trim())?.[1],0,40):void 0;return{foregroundColor:la(r.color)??"#FFFFFF",...a?{background:a,disabledBackground:a}:{},...d?{hoverBackground:d}:{},typography:u,...p?{spacing:p}:{},...b?{shadow:b}:{},...v===void 0?{}:{borderRadius:v},disabledOpacity:e?.theme==="night"?.8:.6,...M===void 0?{}:{backdropBlur:M}}}function Bo(e,t=.12){let n=e.trim(),r=/^[0-9a-fA-F]{6}$/.test(n)?`#${n}`:n;return/^#[0-9a-fA-F]{6}$/.test(r)?Xa(r,t):e}function Ki(e){if(typeof e=="number"||typeof e=="string")return e}function Ja({appearance:e,buttonsStyles:t,layout:n="default"}){let r=e?.variables,o=v=>typeof v=="string"&&v?v:void 0,a=t.submitButton,l=o(r?.colorPrimary)??o(a?.backgroundColor)??"#4A49FF",d=n==="buttons",u=t.nameInput,p=o(u?.fontFamily)??o(r?.fontFamily)??"Poppins, sans-serif",b=Ol({appearance:e,buttonsStyles:t,fontFamily:p});return{primaryColor:l,primaryHoverColor:o(r?.colorPrimaryHover)??Bo(l,.12),inputBackgroundColor:o(t.cardInputBackground)??o(r?.colorBackground)??"#ffffff",textColor:o(t.cardInputColor)??o(u?.color)??o(r?.colorText)??"#262833",borderColor:o(t.cardInputBorder)??(d?"#e5e7eb":"#A4A4FF"),placeholderColor:o(t.cardInputPlaceholderColor)??"#9ca3af",errorColor:o(r?.colorDanger)??"#dc2626",successColor:"#16a34a",fontFamily:p,fontSize:o(t.cardInputFontSize)??o(r?.fontSizeBase)??"16px",fontWeight:String(Ki(u?.fontWeight)??400),borderRadius:o(r?.borderRadius)??"8px",...b?{submitButton:b}:{}}}var c=require("react/jsx-runtime"),Tr="flopay_stripe_resume",Ll="flopay_wallet_resume",Yl="fw1",Ld="fw2",Xl=300*1e3,Nd=900,zd=25e3,Ud=25e3,qd=1e4,Jl=["payment_intent","payment_intent_client_secret","redirect_status"],yr={provider:"paypal",paymentMethodCategory:"paypal"},Za={},Gi={};function $t(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 ns(e){return`${Ld}:${e}`}function Qa(e){return $t(ns(e))}function ei(e,t){if(typeof window>"u")return null;let n=ns(e);try{let r=localStorage.getItem(n);if(!r)return null;let o=JSON.parse(r);return typeof o.createdAt!="number"||Date.now()-o.createdAt<0||Date.now()-o.createdAt>Xl||o.sessionId!==e||o.nonce!==t||typeof o.clientSecret!="string"||typeof o.providerObjectId!="string"||typeof o.paymentMethodType!="string"?(Qa(e),null):o}catch{return Qa(e),null}}function $d(e){return $t(ns(e.sessionId),e)}function Nl(e,t,n){let r=ei(e,t);return!r||r.clientSecret!==n?!1:Qa(e)}function Yi(e,t,n){if(typeof window>"u")return;ei(e,t)?.clientSecret===n&&Qa(e)}function jd(e){return typeof e.payment_method=="string"?e.payment_method:typeof e.payment_method?.id=="string"?e.payment_method.id:null}function Xi(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 r=n?e.status==="succeeded":Yo(e.status),o=jd(e);return!r||!o?{kind:"ambiguous"}:{kind:"confirmed",intentId:e.id,paymentMethodId:o}}async function zl(e,t,n){let r=null;try{return await Promise.race([al(e,t),new Promise(o=>{r=window.setTimeout(()=>{r!==null&&n?.delete(r),o(null)},qd),n?.add(r)})])}finally{r!==null&&(window.clearTimeout(r),n?.delete(r))}}function Vd(e){return e==="provider_sdk"?"PROVIDER_RUNTIME_FAILED":"REQUEST_TIMEOUT"}function Zl(e){return e instanceof y.FloPayError&&(e.type==="validation_error"||e.statusCode===400||e.statusCode===422)}async function ti(e,t,...n){let r=n[2].provider;t?.({class:"lifecycle",name:"payment.intent.started",provider:r});try{return await new fr.PaymentAPI(e,{telemetry:!1}).createSessionIntent(...n)}catch(o){throw Zl(o)||t?.({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:"intent_create",provider:r}),o}}var ua="flopay_paypal_resume",da=new Map;function Ql(e){if(!e||typeof window>"u")return null;try{let t=window.localStorage.getItem(ua);if(!t)return null;let n=JSON.parse(t);return n?.clientSecret===e?n:null}catch{return null}}function Wd(){if(typeof window>"u")return!1;let[e,t]=rs();return e?Ql(t)!==null:!1}function rs(){let e=new URLSearchParams(window.location.search);return Jl.map(t=>e.get(t))}function os(){let e=new URL(window.location.href);for(let t of Jl)e.searchParams.delete(t);return e.toString()}function Hd(){$t(ua),window.history.replaceState({},"",os())}var Kd=250,Ul="Just a moment \u2014 we are finalizing your order. Please press pay again.",Gd="We are still confirming your last payment with your bank. Please wait a moment before trying again.";function as(e,t,n,r){e?.error({errorCode:"PROVIDER_LOAD_FAILED",failureCategory:"provider_runtime",stage:"provider_load",provider:t,paymentMethodCategory:n,requestCategory:"provider_sdk",...r?{terminalReason:r}:{}})}async function ni({billingApiUrl:e,sessionId:t,nonce:n,request:r}){if(!(!t||!n))try{await new fr.PaymentAPI(e,{telemetry:!1}).reportSessionIntentDecline(t,n,r)}catch{}}function Yd(e){return e instanceof y.FloPayError&&typeof e.statusCode=="number"&&e.statusCode>=400&&e.statusCode<500}function Ji(e){return e?.html?{html:e.html,...e.messageToken?{messageToken:e.messageToken}:{},...e.expectedOrigin?{expectedOrigin:e.expectedOrigin}:{}}:null}function ec({event:e,fallbackEmail:t,fallbackName:n}){let r=e.billingDetails,o=t?.trim(),a=eo(n),l=a.firstName?a:eo(r?.name);return Bn({email:(0,y.isValidEmail)(o)?o:r?.email?.trim(),firstName:l.firstName,lastName:l.lastName})}async function Xd({event:e,prepared:t,email:n,billingName:r,methodLabel:o,collect:a}){let l=ec({event:e,fallbackEmail:t?.accountPatch?.email??n,fallbackName:[t?.accountPatch?.firstName,t?.accountPatch?.lastName].join(" ").trim()||r});return(0,y.isValidEmail)(l.email)?l:a(o,l)}var Jd=`
|
|
9
|
+
`})]})})}var Sl=require("@flopay/shared"),Pn=require("react");var wl=require("react/jsx-runtime");function aa({flopay:e,paypalFlopay:t,options:n,onInstrument:r,children:o}){let[a,l]=(0,Pn.useState)(e instanceof Promise?null:e),[d,u]=(0,Pn.useState)(t instanceof Promise||!t?null:t),p=(0,Pn.useRef)(null),b=(0,Pn.useRef)(null),v=Io(r);(0,Pn.useEffect)(()=>{v({class:"lifecycle",name:"checkout.mount"})},[v]),(0,Pn.useEffect)(()=>{a&&v({class:"lifecycle",name:"sdk.initialize.ready"})},[v,a]),(0,Pn.useEffect)(()=>{if(a)return dn(a)?.subscribe?.(v)},[v,a]),(0,Pn.useEffect)(()=>{if(!(!d||d===a))return dn(d)?.subscribe?.(v)},[v,a,d]),(0,Pn.useEffect)(()=>{if(!a)return;let w=dn(a);return p.current=w?.beginCheckout()??w?.now()??0,w?.log({name:"checkout.mount",stage:"checkout_mount"}),()=>{w?.log({name:"checkout.unmount",stage:"unmount"})}},[a]),(0,Pn.useEffect)(()=>{let w=!1;return e instanceof Promise?e.then(h=>{w||l(h)},()=>{w||v({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED"})}):l(e),()=>{w=!0}},[v,e]),(0,Pn.useEffect)(()=>{let w=!1;if(!t){u(null);return}return t instanceof Promise?t.then(h=>{w||u(h)},()=>{w||v({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED",provider:"paypal"})}):u(t),()=>{w=!0}},[v,t]),(0,Pn.useEffect)(()=>{if(!a||b.current===a)return;b.current=a;let w=dn(a);w?.log({name:"checkout.rendered",stage:"checkout_render"}),v({class:"lifecycle",name:"checkout.rendered"}),w?.performance({stage:"checkout_render",durationMs:w.elapsed(p.current??0),durationMode:"machine"})},[v,a]);let B=(0,Sl.resolveBillingApiUrl)(n?.billingApiUrl),I=(0,Pn.useMemo)(()=>({flopay:a,paypalFlopay:d,billingApiUrl:B,emitInstrument:v}),[a,d,B,v]);return(0,wl.jsx)(Zn.Provider,{value:I,children:o})}var Ha="flopay_recent_completion_";function To(e){if(!(!e||typeof window>"u"))try{let t={expiresAt:Date.now()+6e4};window.sessionStorage.setItem(Ha+e,JSON.stringify(t))}catch{}}function Ui(e){if(!e||typeof window>"u")return!1;try{let t=window.sessionStorage.getItem(Ha+e);if(!t)return!1;let n=JSON.parse(t);return typeof n?.expiresAt!="number"||n.expiresAt<=Date.now()?(window.sessionStorage.removeItem(Ha+e),!1):!0}catch{return!1}}async function Ka(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)}}var Xr=require("@flopay/js"),$e=require("@flopay/shared");var sa="card",yd=1e3;async function fd(e,t,n){if(n){if(typeof e.retrieveSetupIntent!="function")return null;let{setupIntent:a,error:l}=await e.retrieveSetupIntent(t);return{error:l,intent:a??null}}if(typeof e.retrievePaymentIntent!="function")return null;let{paymentIntent:r,error:o}=await e.retrievePaymentIntent(t);return{error:o,intent:r??null}}async function gd(e,t,n,r){if(r){if(typeof e.confirmCardSetup!="function")return null;let{setupIntent:l,error:d}=await e.confirmCardSetup(t,n);return{error:d,intent:l??null}}if(typeof e.confirmCardPayment!="function")return null;let{paymentIntent:o,error:a}=await e.confirmCardPayment(t,n);return{error:a,intent:o??null}}function Jr(e){return new $e.FloPayError("Card authentication was cancelled.","api_error",{code:"three_ds_aborted",cause:e})}function qi(){return new $e.FloPayError("Card authentication timed out.","api_error",{code:"three_ds_timeout"})}function ji(e,t){return Object.assign(e,{checkoutMethod:t})}function qr(e,t){let n=e instanceof $e.FloPayError?e:new $e.FloPayError(e instanceof Error?e.message:"Payment provider failed.","api_error",{code:"provider_runtime_failure"});return Object.assign(n,{checkoutMethod:t,telemetryFailureCategory:"provider_runtime",telemetryRequestCategory:"provider_sdk"})}async function ia(e,t){try{return await e()}catch(n){throw qr(n,t)}}function Il(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 hd(e){return e.status==="succeeded"||e.status==="authorized"||e.status==="declined"}async function Vi(e){if(typeof document>"u"||typeof window>"u")throw new $e.FloPayError("3DS challenge requires a browser environment.","api_error",{code:"three_ds_no_window"});if(e.signal?.aborted)throw Jr();let t=1e3,n=15e3,r=`${e.billingApiUrl.replace(/\/$/,"")}/v1/checkouts/sessions/${encodeURIComponent(e.sessionId)}/3ds/complete`,o=async()=>{let v=new AbortController,B=()=>v.abort();e.signal?.aborted?v.abort():e.signal?.addEventListener("abort",B);let I=window.setTimeout(()=>v.abort(),n);try{let w=await fetch(r,{method:"POST",headers:{"x-checkout-session-token":e.nonce,"content-type":"application/json"},body:"{}",signal:v.signal});if(!w.ok)return{status:"unknown"};let h=await w.json().catch(()=>null);return bd(h)}catch{return{status:"unknown"}}finally{window.clearTimeout(I),e.signal?.removeEventListener("abort",B)}},a,l=()=>e.pollCompletionEndpoint!==!1?o():(a??(a=o()),a),d=document.activeElement instanceof HTMLElement?document.activeElement:null,u=document.createElement("div");u.setAttribute("data-flopay-auto-3ds-overlay","1"),u.setAttribute("role","dialog"),u.setAttribute("aria-modal","true"),u.setAttribute("aria-label","Card authentication"),u.style.cssText=["position:fixed","inset:0","z-index:2147483647","background:rgba(15,23,42,0.6)","display:flex","align-items:center","justify-content:center","padding:16px"].join(";");let p=document.createElement("iframe");p.setAttribute("title","Card authentication"),p.setAttribute("allow","payment"),p.tabIndex=0,p.style.cssText=["width:min(100%,460px)","height:min(100%,640px)","border:0","border-radius:12px","background:#fff","box-shadow:0 12px 30px rgba(0,0,0,0.35)"].join(";");let b=null;try{b=new URL(e.billingApiUrl,window.location.href).origin}catch{b=null}try{let v=await new Promise((B,I)=>{let w=!1,h=0,O=0,G=0,T=!1,Y=()=>{window.clearTimeout(h),window.clearInterval(O),window.clearTimeout(G),window.removeEventListener("message",he),p.removeEventListener("load",de),e.signal?.removeEventListener("abort",X)},U=async()=>{if(!(w||T)){T=!0;try{let Fe=await l();if(w||!hd(Fe))return;w=!0,Y(),B(Fe)}finally{T=!1}}},de=()=>{e.pollCompletionEndpoint!==!1&&(window.clearTimeout(G),G=window.setTimeout(()=>{U()},250))},X=()=>{w||(w=!0,Y(),I(Jr()))},he=Fe=>{if(Fe.source!==p.contentWindow||b&&Fe.origin!==b)return;let oe=Fe.data;!oe||typeof oe!="object"||oe.source!=="flopay-vault-3ds-return"||w||(w=!0,Y(),B(null))};h=window.setTimeout(()=>{w||(w=!0,Y(),I(qi()))},$e.THREE_DS_CHALLENGE_WINDOW_MS),e.pollCompletionEndpoint!==!1&&(O=window.setInterval(()=>{U()},t)),p.addEventListener("load",de),window.addEventListener("message",he),e.signal?.addEventListener("abort",X),p.src=e.nextActionRedirectUrl,u.appendChild(p),document.body.appendChild(u),p.focus(),e.signal?.aborted&&X()});return v||await l()}finally{u.parentNode?.removeChild(u),d?.isConnected&&d.focus()}}async function Ao(e,t){let{billingApiUrl:n,sessionId:r,signal:o}=t,a=t.nonce??t.session.clientSecret,l=new Xr.PaymentAPI(n,{telemetry:!1}),d=`${n.replace(/\/+$/,"")}/v1/checkouts/sessions/${encodeURIComponent(r)}/status`,u=new AbortController,p=new AbortController,b=()=>{u.abort(o.reason),p.abort(o.reason)};o.aborted?b():o.addEventListener("abort",b,{once:!0});let v=Vi({billingApiUrl:n,sessionId:r,nonce:a,nextActionRedirectUrl:e.nextActionRedirectUrl,signal:u.signal,pollCompletionEndpoint:!1}),B=l.waitForCheckoutSessionCompletion(r,{initialDelayMs:yd,nonce:a,statusUrl:d,continueAfterActionRequired:!0,timeoutMs:$e.THREE_DS_CHALLENGE_WINDOW_MS+15e3,signal:p.signal}),I;try{let h=await Promise.race([v,B]);if("data"in h)I=h;else{if(h.status==="declined")throw Er({type:h.declineReason??"authorization_declined",gatewayErrorCode:h.gatewayDeclineReason??void 0},"Card was declined.",{checkoutMethod:"card"});if(h.status==="timeout")throw qi();I=await B}}catch(h){if(o.aborted||h instanceof Error&&h.name==="AbortError")throw Jr(h);if(!(h instanceof $e.FloPayError)||h.code!=="three_ds_timeout"&&h.code!=="checkout_processing_timeout")throw h;try{I=await l.waitForCheckoutSessionCompletion(r,{initialDelayMs:0,nonce:a,statusUrl:d,timeoutMs:5e3,signal:o})}catch(G){if(o.aborted)throw Jr(G);if(!(G instanceof $e.FloPayError)||G.code!=="checkout_processing_timeout")throw G}let O=I&&Gr(I,t.session);if(!Nr(O)&&O?.status!=="expired"){if(t.telemetry){let G=new Xr.PaymentAPI(n);try{G.reportThreeDsAbandoned(r)}finally{G.destroy()}}throw qi()}}finally{o.removeEventListener("abort",b),u.abort(),p.abort()}let w=I&&Gr(I,t.session);if(!Nr(w))throw Co(w);return{...Lr(w,r),checkoutMethod:"card"}}function bd(e){if(!e||typeof e!="object")return{status:"unknown"};let t=typeof e.status=="string"?e.status:"unknown",n=typeof e.providerIntentId=="string"?e.providerIntentId:null;switch(t){case"succeeded":case"authorized":case"pending":case"timeout":return{status:t,providerIntentId:n};case"declined":return{status:"declined",providerIntentId:n,declineReason:typeof e.declineReason=="string"?e.declineReason:null,gatewayDeclineReason:typeof e.gatewayDeclineReason=="string"?e.gatewayDeclineReason:null};case"requires_action":return{status:"requires_action",providerIntentId:n,nextActionRedirectUrl:typeof e.nextActionRedirectUrl=="string"?e.nextActionRedirectUrl:null};case"no_attempt":return{status:"no_attempt"};default:return{status:"unknown"}}}function Er(e,t="Payment failed. Please try again.",n){let r=n?.checkoutMethod??e?.checkoutMethod??(e?.type==="paypal_redirect_required"?"paypal":"card"),o=e?.message??t,a=Kr(o)??o,l=ji(new $e.FloPayError(a,"api_error",{code:e?.code??(0,$e.normalizeCheckoutFailureOutcome)(e?.outcome)??(0,$e.normalizeCheckoutFailureOutcome)(e?.type)??e?.gatewayErrorCode}),r);return e?.orderId&&(l.orderId=e.orderId),l}function $i(e){return typeof window<"u"&&window.location.href?window.location.href:e.successUrl||e.cancelUrl||void 0}function Ga(e){return typeof e=="string"&&e.startsWith("pi_")&&e.includes("_secret_")}function Rl(e,t){let n=[e?.threeDSecureToken,e?.clientSecret,e?.stripeClientSecret];for(let o of n)if(typeof o=="string"&&o.length>0&&(!t?.requirePaymentIntentClientSecret||Ga(o)))return o;let r=e?.data;if(r&&typeof r=="object"){let o=r,a=[o.threeDSecureToken,o.clientSecret,o.stripeClientSecret,o.id];for(let d of a)if(typeof d=="string"&&d.length>0&&(!t?.requirePaymentIntentClientSecret||Ga(d)))return d;let l=o.gateways;if(l&&typeof l=="object"){let d=l.stripe;if(d&&typeof d=="object"){let u=d,p=[u.stripeClientSecret,u.clientSecret];for(let b of p)if(typeof b=="string"&&b.length>0&&(!t?.requirePaymentIntentClientSecret||Ga(b)))return b}}}}async function Pd({billingApiUrl:e,sessionId:t,nonce:n,responseJson:r}){let o=Rl(r,{requirePaymentIntentClientSecret:!0});if(typeof o=="string"&&o.length>0)return{type:"3ds_required",threeDSecureToken:o};if(!t)return null;try{let d=(await new Xr.PaymentAPI(e,{telemetry:!1}).getUnifiedCheckoutSession(t,n)).data.stripe?.clientSecret;if(Ga(d))return{type:"3ds_required",threeDSecureToken:d}}catch{}return null}async function xo({billingApiUrl:e,sessionId:t,session:n,nonce:r,tokenizedData:o,returnUrl:a,telemetry:l}){let d=e.replace(/\/+$/,""),u=t??n.id,p=r??n.clientSecret,b=n.customer?.id??n.accountData?.userId??"",v=n.customer?.email??n.accountData?.email??"",B=n.customer?.firstName??n.accountData?.firstName??"",I=n.customer?.lastName??n.accountData?.lastName??"",w=n.customer?.country??n.accountData?.country??void 0,h=n.customer?.zip??n.accountData?.zip??void 0,G=await new Xr.PaymentAPI(d,l===!1?{telemetry:!1}:void 0).processPayment(b,{sessionId:u,nonce:p,paymentMethodCategory:"saved",tokenizedData:o,accountData:{userId:b,email:v,firstName:B,lastName:I,country:w,zip:h},returnUrl:a??$i(n)});if(G.ok){let U=typeof G.json=="function"?await G.json().catch(()=>null):null;if((0,$e.isAuthorizationOnlySession)(n)||U?.status==="authorized")return{type:"success",result:{status:"authorized",paymentId:typeof U?.paymentId=="string"?U.paymentId:n.paymentId,sessionId:typeof U?.sessionId=="string"?U.sessionId:u,authorizationExpiresAt:typeof U?.authorizationExpiresAt=="string"?U.authorizationExpiresAt:n.authorizationExpiresAt,paymentMethodId:Jo(o),checkoutMethod:kl(o,n)}};let de=o?.threeDSecureActionResultTokenId;return{type:"success",result:{status:"succeeded",...de?{paymentIntentId:de}:{},paymentMethodId:Jo(o),checkoutMethod:kl(o,n)}}}let T;try{T=await G.json()}catch(U){throw new $e.FloPayError("Payment failed. Please try again.","api_error",{code:"InvalidPaymentProcessResponse",statusCode:G.status,cause:U})}if(T?.type==="3ds_required"&&typeof T.nextActionRedirectUrl=="string")return{type:"next_action_required",nextActionRedirectUrl:T.nextActionRedirectUrl};if(T?.type==="paypal_redirect_required"||T?.type==="3ds_required"){let U=Rl(T);if(!U)throw new $e.FloPayError("Authentication is required but no redirect token was provided.","api_error",{code:"InvalidPaymentProcessResponse",statusCode:G.status});return{type:T.type,threeDSecureToken:U,paymentMethodId:T.paymentMethodId}}if(T?.gatewayErrorCode==="authentication_required"){let U=await Pd({billingApiUrl:d,sessionId:u,nonce:p,responseJson:T});if(U)return U;throw ji(new $e.FloPayError("Your card requires authentication. Please enter your payment details below.","api_error",{code:"authentication_required"}),"card")}let Y=new $e.FloPayError(T?.message??"Payment failed. Please try again.","api_error",{code:T?.code??T?.gatewayErrorCode,declineCode:T?.declineCode??T?.gatewayDeclineReason,statusCode:G.status});throw Object.assign(Y,{telemetryOutcome:(0,$e.classifyPaymentRejection)(G.status,T)})}async function Ya(e,{flopay:t,paypalFlopay:n,attempt3DS:r,billingApiUrl:o,sessionId:a,session:l,returnUrl:d,telemetry:u,signal:p}){let b=t?.getRawProvider();if(!b)throw qr(new $e.FloPayError("Payment provider is not available.","api_error"),"card");if(e.type==="3ds_required"){if(!r||!e.threeDSecureToken)throw ji(new $e.FloPayError("Your card requires authentication. Please enter your payment details below.","api_error",{code:"authentication_required"}),"card");let v=(0,$e.isSetupIntentClientSecret)(e.threeDSecureToken),B=null,I=e.paymentMethodId,w=await ia(()=>fd(b,e.threeDSecureToken,v),"card");if(w){if(w.error)throw qr(new $e.FloPayError(w.error.message??`Failed to retrieve 3DS ${v?"setup":"payment"} status.`,"api_error",{code:w.error.code}),"card");let O=w.intent;!I&&O?.payment_method&&(typeof O.payment_method=="string"?I=O.payment_method:"id"in O.payment_method&&(I=O.payment_method.id??void 0))}let h=I?await ia(()=>gd(b,e.threeDSecureToken,{payment_method:I,return_url:d??$i(l)??window.location.href},v),"card"):null;if(h){if(h.error)throw qr(new $e.FloPayError(h.error.message??"3DS authentication failed.","api_error",{code:h.error.code}),"card");B=h.intent}else{let O=await ia(()=>b.handleNextAction({clientSecret:e.threeDSecureToken}),"card");if(O.error)throw qr(new $e.FloPayError(O.error.message??"3DS authentication failed.","api_error",{code:O.error.code}),"card");B=(v?O.setupIntent:O.paymentIntent)??null}if(B&&(B.status==="requires_capture"||B.status==="succeeded"||B.status==="processing")){let O=await xo({billingApiUrl:o,sessionId:a,session:l,telemetry:u,tokenizedData:{id:B.id,type:"card",threeDSecureActionResultTokenId:B.id},returnUrl:d});return O.type==="success"?{...O.result,paymentIntentId:O.result.paymentIntentId??B.id,paymentMethodId:O.result.paymentMethodId??I}:O.type==="next_action_required"?Ao(O,{billingApiUrl:o,sessionId:a??l.id,session:l,signal:p}):Ya(O,{flopay:t,paypalFlopay:n,attempt3DS:r,billingApiUrl:o,sessionId:a,session:l,returnUrl:d,telemetry:u,signal:p})}throw qr(new $e.FloPayError("3DS authentication did not complete successfully.","api_error"),"card")}if(e.type==="paypal_redirect_required"){let v=(n??t)?.getRawProvider();if(!v)throw qr(new $e.FloPayError("PayPal is not available.","api_error"),"paypal");if(e.paymentMethodId){let{error:I}=await ia(()=>v.handleNextAction({clientSecret:e.threeDSecureToken}),"paypal");if(I)throw qr(new $e.FloPayError(I.message??"PayPal authorization failed.","api_error",{code:I.code}),"paypal");return{status:"succeeded",checkoutMethod:"paypal"}}let{error:B}=await ia(()=>v.confirmPayment({clientSecret:e.threeDSecureToken,confirmParams:{return_url:d??$i(l)??window.location.href,payment_method_data:{type:"paypal"}},redirect:"if_required"}),"paypal");if(B)throw qr(new $e.FloPayError(B.message??"PayPal authorization failed.","api_error",{code:B.code}),"paypal");return{status:"succeeded",checkoutMethod:"paypal"}}throw new $e.FloPayError("Unsupported payment redirect state.","api_error")}function la(e){if(e instanceof $e.FloPayError){let r=Kr(e.message);return r&&r!==e.message?Object.assign(new $e.FloPayError(r,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=Kr(t)??t;return new $e.FloPayError(n,"api_error")}function Wi(e){let t=e.data.stripe?.publishableKey,n=!!e.data.paypal?.publishableKey,r=!!e.data.session?.vault?.html||Wr(e.data.session);if(!t&&!n&&!r)throw new $e.FloPayError("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 kl(e,t){return e?e.isPaypal?"paypal":"card":t&&Wr(t)?"card":void 0}async function Hi({publishableKey:e,paypalPublishableKey:t,billingApiUrl:n,locale:r,telemetry:o}){if(!e)return{flopay:null,paypalFlopay:null};let a=t&&t!==e?t:void 0,[l,d]=await Promise.all([(0,Xr.loadFloPay)(e,{billingApiUrl:n,locale:r,telemetry:o}),a?(0,Xr.loadFloPay)(a,{billingApiUrl:n,locale:r,telemetry:o}).catch(p=>(console.warn("[FloPay] Failed to load PayPal Stripe instance:",p),null)):Promise.resolve(null)]);if(!l)throw new $e.FloPayError("The payment provider did not initialize.","authentication_error");let u=null;return a?u=d:t&&(u=l),{flopay:l,paypalFlopay:u}}var fr=require("@flopay/js"),y=require("@flopay/shared"),Jt=require("@stripe/react-stripe-js"),i=Zs(require("react"),1);function Mo(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(Mo(t,n)),log:n=>e.log(Mo(t,n)),performance:n=>e.performance(Mo(t,n)),terminal:n=>e.terminal(Mo(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()}}var _l={alipay:"https://cdn.flopay.com/sdk-logos/v1/alipay.svg",bancontact:"https://cdn.flopay.com/sdk-logos/v1/bancontact.svg",blik:"https://cdn.flopay.com/sdk-logos/v1/blik.svg",eps:"https://cdn.flopay.com/sdk-logos/v1/eps.svg",giropay:"https://cdn.flopay.com/sdk-logos/v1/giropay.svg",ideal:"https://cdn.flopay.com/sdk-logos/v1/ideal.svg",klarna:"https://cdn.flopay.com/sdk-logos/v1/klarna.svg",p24:"https://cdn.flopay.com/sdk-logos/v1/p24.svg",sepa_debit:"https://cdn.flopay.com/sdk-logos/v1/sepa_debit.svg",wechat_pay:"https://cdn.flopay.com/sdk-logos/v1/wechat_pay.svg"};var $n=require("react");function El(e,t){if(!e)return t;let n=t??{},r=Object.keys(n),o=r.some(l=>l.startsWith("background")),a={};for(let[l,d]of Object.entries(e))l in n||o&&l.startsWith("background")||(a[l]=d);for(let l of r)a[l]=n[l];return a}var vd=new Set(["animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","scale","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth"]);function Cd(e){let t=e.replace(/^(Webkit|Moz|ms)(?=[A-Z])/,"");return vd.has(t.charAt(0).toLowerCase()+t.slice(1))}function Sd(e,t){return typeof t=="number"&&t!==0&&!Cd(e)?`${t}px`:String(t).trim()}function Tl(e,t){if(e.style.cssText="",!!t){for(let[n,r]of Object.entries(t))if(!(r==null||r==="")){if(n.startsWith("--")){e.style.setProperty(n,String(r));continue}e.style[n]=Sd(n,r)}}}var Al=require("react/jsx-runtime"),Ki=new WeakSet;function Bo({capture:e,html:t,messageToken:n,expectedOrigin:r,theme:o,submitLabel:a,containerStyle:l,onReady:d,onError:u,onValidation:p}){let b=(0,$n.useRef)(null),v=(0,$n.useRef)(d),B=(0,$n.useRef)(u),I=(0,$n.useRef)(p);v.current=d,B.current=u,I.current=p;let w=(0,$n.useRef)(o);w.current=o;let h=(0,$n.useRef)(null),O=a??void 0,G=(0,$n.useRef)(O);G.current=O;let T=(0,$n.useRef)(void 0);return(0,$n.useEffect)(()=>{let Y=b.current;if(!Y)return;let U=!0,de=!1,X=()=>{!U||de||(de=!0,v.current?.())},he=e.on("ready",()=>{X()}),Fe=e.on("error",re=>{B.current?.(re.message??"There was a problem loading the secure card form.")}),oe=e.on("validation",re=>{I.current?.(re.message??null)}),je=G.current??(Ki.has(e)?null:void 0),yt={html:t,...n?{messageToken:n}:{},...r?{expectedOrigin:r}:{},...w.current?{theme:w.current}:{},...je===void 0?{}:{submitLabel:je}};return h.current=w.current??null,T.current=G.current,G.current!==void 0&&Ki.add(e),e.mount(Y,yt).then(()=>{X()}).catch(re=>{U&&B.current?.(re instanceof Error?re.message:"Failed to load the secure card form.")}),()=>{U=!1,he(),Fe(),oe(),e.unmount()}},[e,t,n,r]),ro(()=>{let Y=b.current;Y&&Tl(Y,l)},[l]),(0,$n.useEffect)(()=>{o!==void 0&&(o===null&&h.current===null||(h.current=o,e.applyTheme?.(o)))},[e,o]),(0,$n.useEffect)(()=>{O!==T.current&&(T.current=O,O!==void 0&&Ki.add(e),e.setSubmitLabel?.(O??null))},[e,O]),(0,Al.jsx)("div",{ref:b,"data-testid":"flopay-vault-card-fields"})}var Ml=/^#([0-9a-f]{6})$/i,wd=/^#([0-9a-f]{3})$/i,Bl=/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/i,Fl=/^rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(0|1|0?\.\d+|1\.0+)\s*\)$/i,kd=/^linear-gradient\(\s*(-?\d+(?:\.\d+)?)deg\s*,\s*(.+)\)$/i,Id=/^(-?\d+(?:\.\d+)?)(?:px)?$/,Rd=/^(-?\d+(?:\.\d+)?)em$/,_d=/^blur\(\s*(\d+(?:\.\d+)?)(?:px)?\s*\)$/i,Ed=/^[a-z][a-z0-9 -]{0,31}$/i,Td=new Set(["none","uppercase","lowercase","capitalize"]);function Dl(e){if(typeof e!="string")return null;let t=e.trim(),n=Ml.exec(t);if(n){let b=Number.parseInt(n[1],16);return{r:b>>16&255,g:b>>8&255,b:b&255,a:null}}let r=wd.exec(t);if(r){let[b,v,B]=r[1].split("").map(I=>Number.parseInt(I+I,16));return{r:b,g:v,b:B,a:null}}let o=Bl.exec(t),a=o?null:Fl.exec(t),l=o??a;if(!l)return null;let d=Number(l[1]),u=Number(l[2]),p=Number(l[3]);return d>255||u>255||p>255?null:{r:d,g:u,b:p,a:a?Number(a[4]):null}}function Ol({r:e,g:t,b:n,a:r}){return r===null?`#${(1<<24|e<<16|t<<8|n).toString(16).slice(1)}`:`rgba(${e},${t},${n},${r})`}function ca(e){if(typeof e!="string")return;let t=e.trim();if(Ml.test(t)||Bl.test(t))return t;let n=Fl.exec(t);if(n&&/^\d/.test(n[4]))return t;let r=Dl(t);return r?Ol(r):void 0}function Ja(e,t=.12){let n=Dl(e);if(!n)return e;let r=Math.max(0,Math.min(1,1-t));return Ol({r:Math.round(n.r*r),g:Math.round(n.g*r),b:Math.round(n.b*r),a:n.a})}function da(e,t){let n=[],r=0,o="";for(let a of e){if(a==="("&&(r+=1),a===")"&&(r-=1),a===t&&r===0){o.trim()&&n.push(o.trim()),o="";continue}o+=a}return o.trim()&&n.push(o.trim()),n}function ao(e,t,n){if(typeof e!="number"&&typeof e!="string")return;let r=Id.exec(String(e).trim());if(!r)return;let o=Number(r[1]);return Number.isFinite(o)&&o>=t&&o<=n?o:void 0}function Ad(e,t,n){if(typeof e!="string")return;let r=Rd.exec(e.trim());if(!r)return;let o=Number(r[1]);return Number.isFinite(o)&&o>=t&&o<=n?o:void 0}function xd(e){let t=da(e,",");if(t.length<2||t.length>5)return;let n=[];for(let[r,o]of t.entries()){let a=da(o," "),l=ca(a[0]);if(!l)return;let d=r/(t.length-1)*100,u=a[1]===void 0?d:Number(/^(\d+(?:\.\d+)?)%$/.exec(a[1])?.[1]),p=n[n.length-1]?.position??-1;if(!Number.isFinite(u)||u<0||u>100||u<p)return;n.push({color:l,position:u})}return{type:"linearGradient",angle:0,stops:n}}function Md(e){if(typeof e!="string")return;let t=e.trim(),n=ca(t);if(n)return{type:"solid",color:n};let r=kd.exec(t);if(!r)return;let o=Number(r[1]);if(!Number.isFinite(o)||o<0||o>360)return;let a=xd(r[2]);return a&&a.type==="linearGradient"?{...a,angle:o}:void 0}function Bd(e){return e.type==="solid"?{type:"solid",color:Ja(e.color)}:{...e,stops:e.stops.map(t=>({...t,color:Ja(t.color)}))}}function Fd(e){let t=!1,n,r=[];for(let u of da(e," ")){if(u.toLowerCase()==="inset"){t=!0;continue}let p=ca(u);if(p){n=p;continue}let b=ao(u,-128,128);if(b===void 0)return;r.push(b)}if(!n||r.length<2||r.length>4)return;let[o,a,l=0,d=0]=r;if(!(Math.abs(o)>64||Math.abs(a)>64||l>128||Math.abs(d)>32))return{color:n,inset:t,offsetX:o,offsetY:a,blur:l,spread:d}}function Dd(e){if(typeof e!="string")return;let t=e.trim();if(t.toLowerCase()==="none")return[];let n=da(t,",").map(Fd);if(!(n.length===0||n.length>4))return n.every(r=>r!==void 0)?n:void 0}function xl(e){if(typeof e!="string")return;let t=da(e,",").map(n=>n.replace(/^['"]|['"]$/g,"").trim()).filter(n=>Ed.test(n)).slice(0,4);return t.length>0?t:void 0}function Od(e){let t=typeof e=="string"?e.trim().split(/\s+/):[e],n=ao(t[0],0,64),r=ao(t[1]??t[0],0,64);if(!(n===void 0||r===void 0))return{paddingBlock:n,paddingInline:r}}function Ld(e){if(e==="bold")return 700;if(e==="normal")return 400;let t=Number(e);return Number.isInteger(t)&&t>=100&&t<=900?t:void 0}function Ll({appearance:e,buttonsStyles:t,fontFamily:n}){let r=t.submitButton;if(!r)return;let o=e?.variables,a=Md(r.background??r.backgroundColor),l=ca(o?.colorPrimaryHover),d=l?{type:"solid",color:l}:a&&Bd(a),u={fontFamilies:xl(r.fontFamily)??xl(n),fontSize:ao(r.fontSize??t.submitButtonFontSize,10,32)??16,fontWeight:Ld(r.fontWeight)??600,letterSpacing:Ad(r.letterSpacing,-.1,.5)??.01,lineHeight:ao(r.lineHeight,.8,2)??1,textTransform:Td.has(String(r.textTransform))?r.textTransform:"uppercase"},p=Od(r.padding),b=Dd(r.boxShadow),v=ao(r.borderRadius,0,9999),B=typeof r.backdropFilter=="string"?ao(_d.exec(r.backdropFilter.trim())?.[1],0,40):void 0;return{foregroundColor:ca(r.color)??"#FFFFFF",...a?{background:a,disabledBackground:a}:{},...d?{hoverBackground:d}:{},typography:u,...p?{spacing:p}:{},...b?{shadow:b}:{},...v===void 0?{}:{borderRadius:v},disabledOpacity:e?.theme==="night"?.8:.6,...B===void 0?{}:{backdropBlur:B}}}function Fo(e,t=.12){let n=e.trim(),r=/^[0-9a-fA-F]{6}$/.test(n)?`#${n}`:n;return/^#[0-9a-fA-F]{6}$/.test(r)?Ja(r,t):e}function Gi(e){if(typeof e=="number"||typeof e=="string")return e}function Za({appearance:e,buttonsStyles:t,layout:n="default"}){let r=e?.variables,o=v=>typeof v=="string"&&v?v:void 0,a=t.submitButton,l=o(r?.colorPrimary)??o(a?.backgroundColor)??"#4A49FF",d=n==="buttons",u=t.nameInput,p=o(u?.fontFamily)??o(r?.fontFamily)??"Poppins, sans-serif",b=Ll({appearance:e,buttonsStyles:t,fontFamily:p});return{primaryColor:l,primaryHoverColor:o(r?.colorPrimaryHover)??Fo(l,.12),inputBackgroundColor:o(t.cardInputBackground)??o(r?.colorBackground)??"#ffffff",textColor:o(t.cardInputColor)??o(u?.color)??o(r?.colorText)??"#262833",borderColor:o(t.cardInputBorder)??(d?"#e5e7eb":"#A4A4FF"),placeholderColor:o(t.cardInputPlaceholderColor)??"#9ca3af",errorColor:o(r?.colorDanger)??"#dc2626",successColor:"#16a34a",fontFamily:p,fontSize:o(t.cardInputFontSize)??o(r?.fontSizeBase)??"16px",fontWeight:String(Gi(u?.fontWeight)??400),borderRadius:o(r?.borderRadius)??"8px",...b?{submitButton:b}:{}}}var c=require("react/jsx-runtime"),Tr="flopay_stripe_resume",Nl="flopay_wallet_resume",Xl="fw1",Nd="fw2",Jl=300*1e3,zd=900,Ud=25e3,qd=25e3,$d=1e4,Zl=["payment_intent","payment_intent_client_secret","redirect_status"],yr={provider:"paypal",paymentMethodCategory:"paypal"},Qa={},Yi={};function $t(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 rs(e){return`${Nd}:${e}`}function ei(e){return $t(rs(e))}function ti(e,t){if(typeof window>"u")return null;let n=rs(e);try{let r=localStorage.getItem(n);if(!r)return null;let o=JSON.parse(r);return typeof o.createdAt!="number"||Date.now()-o.createdAt<0||Date.now()-o.createdAt>Jl||o.sessionId!==e||o.nonce!==t||typeof o.clientSecret!="string"||typeof o.providerObjectId!="string"||typeof o.paymentMethodType!="string"?(ei(e),null):o}catch{return ei(e),null}}function jd(e){return $t(rs(e.sessionId),e)}function zl(e,t,n){let r=ti(e,t);return!r||r.clientSecret!==n?!1:ei(e)}function Xi(e,t,n){if(typeof window>"u")return;ti(e,t)?.clientSecret===n&&ei(e)}function Vd(e){return typeof e.payment_method=="string"?e.payment_method:typeof e.payment_method?.id=="string"?e.payment_method.id:null}function Ji(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 r=n?e.status==="succeeded":Xo(e.status),o=Vd(e);return!r||!o?{kind:"ambiguous"}:{kind:"confirmed",intentId:e.id,paymentMethodId:o}}async function Ul(e,t,n){let r=null;try{return await Promise.race([il(e,t),new Promise(o=>{r=window.setTimeout(()=>{r!==null&&n?.delete(r),o(null)},$d),n?.add(r)})])}finally{r!==null&&(window.clearTimeout(r),n?.delete(r))}}function Wd(e){return e==="provider_sdk"?"PROVIDER_RUNTIME_FAILED":"REQUEST_TIMEOUT"}function Ql(e){return e instanceof y.FloPayError&&(e.type==="validation_error"||e.statusCode===400||e.statusCode===422)}async function ni(e,t,...n){let r=n[2].provider;t?.({class:"lifecycle",name:"payment.intent.started",provider:r});try{return await new fr.PaymentAPI(e,{telemetry:!1}).createSessionIntent(...n)}catch(o){throw Ql(o)||t?.({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:"intent_create",provider:r}),o}}var pa="flopay_paypal_resume",ua=new Map;function ec(e){if(!e||typeof window>"u")return null;try{let t=window.localStorage.getItem(pa);if(!t)return null;let n=JSON.parse(t);return n?.clientSecret===e?n:null}catch{return null}}function Hd(){if(typeof window>"u")return!1;let[e,t]=os();return e?ec(t)!==null:!1}function os(){let e=new URLSearchParams(window.location.search);return Zl.map(t=>e.get(t))}function as(){let e=new URL(window.location.href);for(let t of Zl)e.searchParams.delete(t);return e.toString()}function Kd(){$t(pa),window.history.replaceState({},"",as())}var Gd=250,ql="Just a moment \u2014 we are finalizing your order. Please press pay again.",Yd="We are still confirming your last payment with your bank. Please wait a moment before trying again.";function is(e,t,n,r){e?.error({errorCode:"PROVIDER_LOAD_FAILED",failureCategory:"provider_runtime",stage:"provider_load",provider:t,paymentMethodCategory:n,requestCategory:"provider_sdk",...r?{terminalReason:r}:{}})}async function ri({billingApiUrl:e,sessionId:t,nonce:n,request:r}){if(!(!t||!n))try{await new fr.PaymentAPI(e,{telemetry:!1}).reportSessionIntentDecline(t,n,r)}catch{}}function Xd(e){return e instanceof y.FloPayError&&typeof e.statusCode=="number"&&e.statusCode>=400&&e.statusCode<500}function Zi(e){return e?.html?{html:e.html,...e.messageToken?{messageToken:e.messageToken}:{},...e.expectedOrigin?{expectedOrigin:e.expectedOrigin}:{}}:null}function tc({event:e,fallbackEmail:t,fallbackName:n}){let r=e.billingDetails,o=t?.trim(),a=to(n),l=a.firstName?a:to(r?.name);return Bn({email:(0,y.isValidEmail)(o)?o:r?.email?.trim(),firstName:l.firstName,lastName:l.lastName})}async function Jd({event:e,prepared:t,email:n,billingName:r,methodLabel:o,collect:a}){let l=tc({event:e,fallbackEmail:t?.accountPatch?.email??n,fallbackName:[t?.accountPatch?.firstName,t?.accountPatch?.lastName].join(" ").trim()||r});return(0,y.isValidEmail)(l.email)?l:a(o,l)}var Zd=`
|
|
10
10
|
.paypal-buttons { margin: 0 !important; vertical-align: top !important; }
|
|
11
11
|
@keyframes flopay-spin { to { transform: rotate(360deg); } }
|
|
12
12
|
@keyframes flopay-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }
|
|
@@ -27,7 +27,7 @@ ${ze.join(`
|
|
|
27
27
|
0% { opacity: 1; transform: translateX(0) scale(1); }
|
|
28
28
|
100% { opacity: 0; transform: translateX(16px) scale(0.97); }
|
|
29
29
|
}
|
|
30
|
-
`,pa=44,ma=180,ql=`flopay-card-enter ${ma}ms cubic-bezier(0, 0, 0.2, 1) both`,$l=`flopay-card-exit ${ma}ms cubic-bezier(0.4, 0, 0.2, 1) both`,Zd=`flopay-buttons-enter ${ma}ms cubic-bezier(0, 0, 0.2, 1) both`,Qd=`flopay-buttons-exit ${ma}ms cubic-bezier(0.4, 0, 0.2, 1) both`;function eu(e){return e.gateway==="stripe"?"stripe":e.gateway==="paypal"||e.isPaypal?"paypal":void 0}function is(e){if(!e.themeBundle&&!e.explicitPrimaryColor)return{backgroundColor:"white",color:"#262833",border:"1px solid #d1d5db",borderRadius:e.resolvedBorderRadius,boxShadow:"0 1px 2px rgba(0,0,0,0.04)"};let t=e.themeBundle?e.submitButtonStyle??{}:{};return{backgroundColor:e.resolvedPrimaryColor,color:t.color??"white",border:t.border??"none",borderRadius:t.borderRadius??e.resolvedBorderRadius,boxShadow:t.boxShadow}}var tu={visibility:"hidden",position:"absolute",pointerEvents:"none",width:"100%",height:0,overflow:"hidden"};function nu(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 Qi={width:"100%",minHeight:pa,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 ru(e){switch(e){case"paypal":return"PayPal";case"apple_pay":return"Apple Pay";case"google_pay":return"Google Pay";default:return"Card"}}function jl(e){return e==="paypal"?"paypal":e==="apple_pay"?"apple_pay":"google_pay"}function es(e){return e==="paypal"?"PayPal":(0,y.getStripeMethodDisplayName)(e)}function ou(e){let t=(0,y.getPostalCodeExample)(e);return`Enter a valid ${(0,y.getPostalCodeLabel)(e)}${t?` (e.g. ${t})`:""}`}function au(e,t,n){let r=(0,y.isPostalCodeSupported)(e),o=t.trim(),a=n&&r,l=a&&!o,d=a&&!!o&&!(0,y.isValidPostalCode)(e,o);return{visible:n,supported:r,required:a,empty:l,malformed:d}}function iu(e,t){let n=e.trim(),r=t&&!n,o=t&&!!n&&!(0,y.isValidEmail)(n);return{required:t,empty:r,malformed:o,value:n}}function Vl(e,t){return t instanceof y.FloPayError?t:new y.FloPayError(t instanceof Error?t.message:`${ru(e)} before-click hook failed.`,"validation_error")}function Zi(){return(0,c.jsx)("style",{children:Jd})}function su(e){return typeof e=="number"?`${e}px`:e}function tc(e,t){let n=e.availablePaymentMethods;return n&&t.some(r=>n[r])?"ready":"unavailable"}function nc({state:e,placeholderTestId:t,borderRadius:n=8,children:r}){return e==="unavailable"||e==="load_error"?null:(0,c.jsxs)("div",{style:{position:"relative",minHeight:44},children:[(0,c.jsx)("div",{"data-testid":t,"aria-hidden":e==="ready",style:{position:"absolute",inset:0,height:44,borderRadius:n,background:"#e5e7eb",animation:e==="ready"?void 0:"flopay-pulse 1.5s ease-in-out infinite",opacity:e==="ready"?0:1,transform:e==="ready"?"scale(0.985)":"scale(1)",transition:"opacity 140ms ease-out, transform 140ms ease-out",pointerEvents:"none"}}),(0,c.jsx)("div",{style:{minHeight:44,opacity:e==="ready"?1:0,transform:e==="ready"?"translateY(0)":"translateY(2px)",transition:"opacity 140ms ease-out, transform 140ms ease-out",pointerEvents:e==="ready"?"auto":"none"},children:r})]})}function Wl(e){return e!=="unavailable"&&e!=="load_error"}function ri(e){return(0,c.jsx)(cu,{...e})}function Hl({sessionId:e,nonce:t,email:n,billingApiUrl:r,onTokenizedBody:o,onErrorChange:a,isProcessing:l=!1,onButtonClick:d,onDecline:u,onTechnicalFailure:p,runBeforeButtonClick:b,billingName:v,onBuyerIdentityReady:M,onLoadStateChange:I,placeholderBorderRadius:w,popupCapabilityOwner:h,externalTelemetryContext:O,presentationMode:G}){let T=Ur(),{emitInstrument:Y}=(0,i.useContext)(Zn),U=(0,Jt.useStripe)(),de=(0,Jt.useElements)(),X=(0,i.useMemo)(()=>Ya(dn(T),O),[O,T]),[he,De]=(0,i.useState)("loading");(0,i.useEffect)(()=>{I?.(he)},[he,I]);let[re,Ve]=(0,i.useState)(!1),yt=(0,i.useRef)(!1),te=!(0,y.isValidEmail)(n?.trim())||!v?.trim(),{request:Oe,collect:ft,finish:ke}=Co(),Le=(0,i.useRef)(!1),be=(0,i.useRef)(null),me=(0,i.useRef)(null),[Ie,We]=(0,i.useState)(0),[rt,R]=(0,i.useState)(!1),He=(0,i.useRef)(!1),ye=(0,i.useRef)(new Map),{startAttempt:N,finishAttempt:ve,invalidateAttempt:ue,isAttemptInvalidated:Ke,isAttemptCurrent:Z,generationRef:ot}=ta((q,fe,et)=>{p?.(q,fe,{...et,popupBlocked:et?.popupBlocked??Gr(fe),provider:"stripe",paymentMethodCategory:"paypal",presentationMode:G,terminalReason:"overlay_timeout"}),R(!0),We(V=>V+1)},{onHandoffObserved:()=>{h.markAvailable(),X?.log({name:"provider.popup.opened",stage:"overlay_open",...yr,attempt:ot.current})}});(0,i.useEffect)(()=>{rt&&me.current?.focus()},[rt,Ie]);let lt=(0,i.useCallback)(()=>{We(q=>q+1)},[]),Ae=(0,i.useCallback)((q,fe,et)=>{ue(et),p?.("paypal",q,{code:fe,popupBlocked:Gr(q),provider:"stripe",paymentMethodCategory:"paypal",presentationMode:G}),R(!0),lt()},[ue,p,G,lt]),Ne=(0,i.useCallback)(()=>{window.setTimeout(()=>{(be.current?.querySelector("iframe")??be.current)?.focus()},0)},[]);(0,i.useEffect)(()=>{He.current&&(He.current=!1,Ne())},[Ne,Ie]);let ct=(0,i.useCallback)(()=>{R(!1),a?.(null),Ne()},[Ne,a]);(0,i.useEffect)(()=>{if(!U||Le.current)return;let[q,fe,et]=rs();if(!q||!fe)return;let V=Ql(fe);if(!V)return;Le.current=!0;let Me=!0,bt=da.get(fe);bt||(bt=et==="failed"?Promise.resolve(null):Promise.resolve().then(()=>U.retrievePaymentIntent(fe)),da.set(fe,bt));let Ge={accountPatch:V.accountPatch,sessionId:V.sessionId,nonce:V.nonce},$=()=>{X?.error({errorCode:"REDIRECT_RESUME_FAILED",stage:"redirect_resume",...yr,requestCategory:"provider_sdk"})};return X?.log({name:"provider.redirect.resumed",stage:"redirect_resume",...yr}),(async()=>{try{Ve(!0);let f=await bt;if(!Me)return;if(f?.error){da.delete(fe),$(),a?.(f.error.message??"Failed to retrieve PayPal payment status.");return}if(Hd(),da.delete(fe),et==="failed"){let H="PayPal payment was declined. Please try again.";X?.terminal({outcome:"payment_declined",...yr,terminalReason:"provider_declined"}),a?.(H),u?.(cn("paypal",H));return}let P=f?.paymentIntent;if(P&&P.id!==q){$(),a?.("Failed to match the returned PayPal payment.");return}if(P&&(P.status==="requires_capture"||P.status==="succeeded")){let H=typeof P.payment_method=="string"?P.payment_method:P.payment_method?.id;o({id:H??P.id,type:"card",threeDSecureActionResultTokenId:P.id,isPaypal:!0},{...Ge,presentationMode:"redirect"})}else{let H="PayPal payment was not completed. Please try again.";X?.terminal({outcome:P?.status==="canceled"?"payment_cancelled":"payment_declined",...yr,terminalReason:P?.status==="canceled"?"cancelled":"provider_declined"}),a?.(H),u?.(cn("paypal",H))}}catch(f){if(!Me)return;da.delete(fe),$(),a?.(f instanceof Error?f.message:"Failed to complete PayPal payment.")}finally{Me&&Ve(!1)}})(),()=>{Me=!1,Le.current=!1}},[U,o,a,u,X]);let at=(0,i.useCallback)(async(q=!1)=>{let fe=b?await b("paypal"):{proceed:!0};if(!fe.proceed)return ye.current.delete(Ie),!1;let et=N("paypal");return ye.current.set(Ie,{generation:et,accountPatch:fe.accountPatch,sessionId:fe.sessionId,nonce:fe.nonce}),R(!1),X?.log({name:`provider.${q?"redirect.started":"handoff.requested"}`,stage:q?"redirect":"overlay_open",...yr,attempt:et}),d?.("paypal"),!0},[d,X,b,N,Ie]),xe=(0,i.useCallback)(async q=>{if(l||re||!await at()){q.reject();return}q.resolve()},[l,at,re]),jt=(0,i.useCallback)(async q=>{if(!U||!de)return;let fe=ye.current.get(Ie);if(fe&&!Z(fe.generation)){ye.current.delete(Ie);return}if(!fe&&Ke()||fe&&!ve(fe.generation))return;fe||ve();let et=fe??null;if(ye.current.delete(Ie),!et&&b){let Je=await b("paypal");if(!Je.proceed){q.paymentFailed({reason:"fail",message:"PayPal checkout was cancelled."});return}et={accountPatch:Je.accountPatch,sessionId:Je.sessionId,nonce:Je.nonce}}let V=et?.sessionId??e,Me=et?.nonce??t,bt=await Xd({event:q,prepared:et,email:n,billingName:v,methodLabel:"PayPal",collect:ft});if(!bt){q.paymentFailed({reason:"fail",message:"Buyer details are required."});return}let Ge=bt.email,$={...et?.accountPatch,...Bn(bt,!0)};try{if(Ve(!0),a?.(null),!V||!(0,y.isValidEmail)(Ge))throw new Error("Missing sessionId or email for PayPal payment");await M?.(bt);let Je=U.createPaymentMethod,{error:f,paymentMethod:P}=await Je({type:"paypal"});if(f){Ae(f,"stripe_paypal_create_payment_method_failed",fe?.generation),q.paymentFailed({reason:"fail"});return}let H=await ti(r,Y,V,Me??"",{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:"paypal",paymentMethodId:P?.id??null,intentKind:"payment"});if(H.provider!=="stripe")throw new Error("Invalid provider returned for PayPal intent");let ne=H.clientSecret,$e={return_url:os()};if(P?.id&&($e.payment_method=P.id),!$t(ua,{clientSecret:ne,sessionId:V,nonce:Me,accountPatch:$})&&G==="redirect")throw new Error("Unable to save PayPal checkout progress. Please try again.");let{error:Re,paymentIntent:ae}=await U.confirmPayment({clientSecret:ne,confirmParams:$e,redirect:"if_required"});if(Re){if($t(ua),Jo(Re)){let Ct=Re.message??"Your payment was declined.";X?.terminal({outcome:"payment_declined",...yr,terminalReason:"provider_declined"}),a?.(Ct),u?.(cn("paypal",Ct,{code:_r(Re),declineCode:wo(Re)})),await ni({billingApiUrl:r,sessionId:V,nonce:Me,request:{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:"paypal",providerDeclineReason:_r(Re)??"provider_declined"}})}else Ae(Re,"stripe_paypal_confirm_failed",fe?.generation);return}$t(ua);let it=typeof ae?.payment_method=="string"?ae.payment_method:ae?.payment_method?.id;o({id:it??ae?.id,type:"card",threeDSecureActionResultTokenId:ae?.id,isPaypal:!0},{accountPatch:$,paymentMethodCategory:"paypal",presentationMode:G,sessionId:V,nonce:Me});return}catch(Je){Ae(Je,"stripe_paypal_failed",fe?.generation)}finally{Ve(!1)}},[U,de,e,t,n,v,ft,M,r,Y,o,a,u,b,Ae,ve,Z,Ke,X,G,Ie]),Vt=(0,i.useCallback)(async()=>{if(!(yt.current||l||re||!U||!de)){yt.current=!0,Ve(!0);try{if(!await at(!0))return;await jt({expressPaymentType:"paypal",paymentFailed:()=>{}})}finally{yt.current=!1,Ve(!1)}}},[de,jt,l,at,U,re]),ut=G==="redirect"?(0,c.jsx)("button",{type:"button",disabled:l||re,onClick:()=>{Vt()},style:{width:"100%",minHeight:pa,border:"1px solid #d1d5db",borderRadius:w??8,background:"#ffc439",color:"#111827",cursor:l||re?"not-allowed":"pointer",fontSize:"1rem",fontWeight:700},children:"Pay with PayPal"}):(0,c.jsx)(Jt.ExpressCheckoutElement,{onReady:q=>De(tc(q,["paypal"])),onLoadError:()=>{De("load_error"),as(X,"paypal","paypal","provider_error")},onClick:xe,onConfirm:jt,onCancel:()=>{let q=ye.current.get(Ie);ye.current.delete(Ie),X?.terminal({outcome:"payment_cancelled",...yr,terminalReason:"cancelled",...q?{attempt:q.generation}:{}}),ue(q?.generation),R(!1),He.current=!0,lt()},options:{buttonType:{paypal:"paypal"},billingAddressRequired:te,emailRequired:te,phoneNumberRequired:!1,shippingAddressRequired:!1,paymentMethods:{applePay:"never",googlePay:"never",paypal:"auto",link:"never"}}},Ie),Et=(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("div",{ref:be,tabIndex:-1,"data-testid":"flopay-paypal-focus-target",role:"group","aria-label":"PayPal payment method",style:{borderRadius:8,outlineOffset:4},children:[rt&&(0,c.jsx)("button",{ref:me,type:"button","data-testid":"flopay-paypal-retry-button",onClick:ct,style:Qi,children:"Try PayPal again"}),Oe&&(0,c.jsx)(So,{identity:Oe.identity,methodLabel:Oe.methodLabel,onComplete:ke,onCancel:()=>ke(null)},Oe.id),(0,c.jsx)("div",{style:{display:Oe?"none":void 0},children:ut})]}),re&&!Oe&&(0,c.jsx)(er,{status:"processing"})]});return G==="redirect"?Et:(0,c.jsx)(nc,{state:he,placeholderTestId:"flopay-paypal-placeholder",borderRadius:w,children:Et})}function Kl({sessionId:e,nonce:t,email:n,billingApiUrl:r,intentKind:o,expressMethods:a,onTokenizedBody:l,onErrorChange:d,onButtonClick:u,onDecline:p,onTechnicalFailure:b,runBeforeButtonClick:v,billingName:M,onBuyerIdentityReady:I,onLoadStateChange:w,placeholderBorderRadius:h,popupCapabilityOwner:O,externalTelemetryContext:G}){let T=Ur(),{emitInstrument:Y}=(0,i.useContext)(Zn),U=(0,Jt.useStripe)(),de=(0,Jt.useElements)(),X=(0,i.useMemo)(()=>Ya(dn(T),G),[G,T]),[he,De]=(0,i.useState)("loading");(0,i.useEffect)(()=>{w?.(he)},[he,w]);let[re,Ve]=(0,i.useState)(!1),yt=(0,i.useRef)(!(0,y.isValidEmail)(n?.trim())||!M?.trim()).current,{request:te,collect:Oe,finish:ft}=Co(),ke=(0,i.useRef)(null),Le=(0,i.useRef)(null),[be,me]=(0,i.useState)(0),[Ie,We]=(0,i.useState)(!1),[rt,R]=(0,i.useState)(()=>ei(e,t)?"blocked":"idle"),[He,ye]=(0,i.useState)("google_pay"),N=(0,i.useRef)(null),ve=(0,i.useRef)(!0),ue=(0,i.useRef)(!1),Ke=(0,i.useRef)("google_pay"),Z=(0,i.useRef)("google_pay"),ot=(0,i.useRef)(null),lt=(0,i.useRef)(null),Ae=(0,i.useRef)(new Set);(0,i.useEffect)(()=>(ve.current=!0,()=>{ve.current=!1;for(let $ of Ae.current)window.clearTimeout($);Ae.current.clear()}),[]);let Ne=(0,i.useRef)(new Map),{startAttempt:ct,finishAttempt:at,invalidateAttempt:xe,isAttemptInvalidated:jt,isAttemptCurrent:Vt,generationRef:ut}=ta(($,Je,f)=>{b?.($,Je,{...f,popupBlocked:f?.popupBlocked??Gr(Je),provider:"stripe",paymentMethodCategory:"wallet",presentationMode:"popup",terminalReason:"overlay_timeout"}),ye($),We(!0),me(P=>P+1)},{onHandoffObserved:$=>{O.markAvailable(),X?.log({name:"provider.popup.opened",stage:"overlay_open",provider:"stripe",paymentMethodCategory:"wallet",attempt:ut.current,...$==="apple_pay"||$==="google_pay"?{walletType:$}:{}})}});(0,i.useEffect)(()=>{Ie&&Le.current?.focus()},[Ie,be]);let Et=(0,i.useCallback)(()=>{me($=>$+1)},[]),q=(0,i.useCallback)(($,Je,f,P,H=!1)=>{xe(P),b?.($,Je,{code:f,popupBlocked:Gr(Je),telemetryReported:H,provider:"stripe",paymentMethodCategory:"wallet",presentationMode:"popup"}),ye($),We(!0),Et()},[xe,b,Et]),fe=(0,i.useCallback)(()=>{window.setTimeout(()=>{(ke.current?.querySelector("iframe")??ke.current)?.focus()},0)},[]);(0,i.useEffect)(()=>{ue.current&&(ue.current=!1,fe())},[fe,be]);let et=(0,i.useCallback)(()=>{We(!1),d?.(null),fe()},[fe,d]),V=(0,i.useCallback)(()=>{N.current?.()},[]);(0,i.useEffect)(()=>{let $=ei(e,t);if(!$)return;let Je=!1,f=!1,P=async()=>{if(!f){f=!0,Je||R("checking");try{let H=await zl(U,$.clientSecret,Ae.current);if(Je)return;let ne=Xi(H,$.providerObjectId,(0,y.isSetupIntentClientSecret)($.clientSecret));if(ne.kind==="confirmed"){if(!Nl(e,t,$.clientSecret))return;N.current=null,R("idle"),l({id:ne.paymentMethodId,type:"card",threeDSecureActionResultTokenId:ne.intentId},{...$.accountPatch?{accountPatch:$.accountPatch}:{},paymentMethodCategory:"wallet",sessionId:e,nonce:t});return}if(ne.kind==="terminal"){Yi(e,t,$.clientSecret),N.current=null,R("idle"),ye($.paymentMethodType),We(!0),Et();return}R("blocked")}catch{Je||R("blocked")}finally{f=!1}}};return N.current=P,R("blocked"),()=>{Je=!0,N.current===P&&(N.current=null)}},[t,l,Et,e,U]);let Me=(0,i.useCallback)(async $=>{let Je=!1,f=Ce=>{Je||(Je=!0,$.paymentFailed({reason:"fail",...Ce?{message:Ce}:{}}))};if(!U||!de){f();return}let P=Ne.current.get(be);if(P&&!Vt(P.generation)){Ne.current.delete(be),f();return}if(!P&&jt()){f();return}if(P&&!at(P.generation)){f();return}P||at();let H=$.expressPaymentType??P?.method??Ke.current,ne=P??null,$e=jl(H),vt;H==="apple_pay"?vt="apple_pay":H==="google_pay"&&(vt="google_pay");let Re=P?.generation??ut.current,ae=X,it=ae?.now()??globalThis.performance?.now()??Date.now(),Ct=new AbortController,Nt=!1,ze=!1,Ft=null,Ue=e,Fn="processing",Rn="other",Mt="provider_runtime",wn,Dn=new Promise((Ce,St)=>{wn=St}),On=window.setTimeout(()=>{Nt=!0,Ct.abort(),wn(Za)},zd),rn=async(Ce,St,Tt)=>{Fn=Ce,Rn=St,Mt=St==="intent_create"||St==="session_claim"?"transport_error":"provider_runtime";let vn=ae?.now()??globalThis.performance?.now()??Date.now();try{return await Promise.race([Tt,Dn])}finally{let Bt=ae?.now()??globalThis.performance?.now()??Date.now();ae?.performance({stage:Ce,durationMs:Math.max(0,Bt-vn),durationMode:"machine",requestCategory:St,paymentMethodCategory:"wallet",provider:"stripe",...Nt?{statusClass:"timeout"}:{}})}};try{if(Ve(!0),d?.(null),!ne&&v){let _e=await rn("processing","other",v($e));if(!_e.proceed){f();return}ne={accountPatch:_e.accountPatch,sessionId:_e.sessionId,nonce:_e.nonce}}let Ce=ne?.sessionId??e;Ue=Ce;let St=ne?.nonce??t,Tt=ot.current??ne?.accountPatch,vn=ec({event:$,fallbackEmail:Tt?.email??n,fallbackName:[Tt?.firstName,Tt?.lastName].join(" ").trim()||M});if(!(0,y.isValidEmail)(vn.email)){f("Buyer details are required."),Oe(es(H),vn).then(_e=>{_e&&(ot.current=_e)});return}ot.current=null;let Bt={...ne?.accountPatch,...Bn(vn,!0)};await rn("processing","session_claim",Promise.resolve(I?.(vn)));let{error:Vn}=await rn("tokenization","provider_sdk",de.submit());if(Vn){f(),q(H,Vn,"stripe_wallet_submit_failed",P?.generation);return}if(!Ce)throw new Error("Missing sessionId or email for payment.");let pn={provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:H,paymentMethodId:null,intentKind:o},Wt=JSON.stringify({sessionId:Ce,nonce:St??"",request:pn}),an=lt.current,Wn=an?.retryIdentity===Wt?an.authorizationAttemptId:(0,y.randomUuidV4)();lt.current={authorizationAttemptId:Wn,retryIdentity:Wt};let mn=await rn("processing","intent_create",ti(r,Y,Ce,St??"",{...pn,authorizationAttemptId:Wn},{signal:Ct.signal}));if(mn.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let wt=mn.clientSecret,Zt=$d({createdAt:Date.now(),sessionId:Ce,...St?{nonce:St}:{},clientSecret:wt,providerObjectId:mn.providerObjectId,paymentMethodType:H,accountPatch:Bt});window.clearTimeout(On),ze=!0,ae?.performance({stage:"callback",durationMs:Math.max(0,(ae?.now()??globalThis.performance?.now()??Date.now())-it),durationMode:"machine",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",provider:"stripe"});let yn=ae?.now()??globalThis.performance?.now()??Date.now(),Dt={stage:"provider_confirmation",provider:"stripe",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",...vt?{walletType:vt}:{},attempt:Re},Qt=!1,Ht=null;ae?.log({name:"payment.provider_confirmation.started",...Dt}),Ft=window.setTimeout(()=>{Ft!==null&&Ae.current.delete(Ft),Qt=!0;let _e=ae?.now()??globalThis.performance?.now()??Date.now();ae?.error({errorCode:"PROVIDER_RUNTIME_FAILED",...Dt,operationOutcome:"watchdog_expired",durationMs:Math.max(0,_e-yn),statusClass:"timeout",failureCategory:"provider_runtime",terminalReason:"provider_error"}),ae?.flush?.().catch(()=>{}),Ht?.()},Ud),Ae.current.add(Ft);let fn=(_e,ht)=>{Ft!==null&&(window.clearTimeout(Ft),Ae.current.delete(Ft),Ft=null);let ie=ae?.now()??globalThis.performance?.now()??Date.now(),F=Math.max(0,ie-yn),Ze=_e;Qt&&(_e==="resolved"?Ze="resolved_late":_e==="returned_error"?Ze="returned_error_late":Ze="rejected_late");let se=ht??(_e==="resolved"?"approved":"provider_error");return ae?.log({name:"payment.provider_confirmation.returned",...Dt,operationOutcome:Ze,terminalReason:se}),ae?.performance({...Dt,durationMs:F,durationMode:"buyer",operationOutcome:Ze,terminalReason:se}),{durationMs:F,operationOutcome:Ze,terminalReason:se}},gt=!1,Q=!1,Ln=_e=>{if(!_e||typeof _e!="object")return null;let ht=_e;if(ht.error)return null;let ie=ht.setupIntent??ht.paymentIntent,F=Xi(ie??null,void 0,!!ht.setupIntent);return F.kind==="confirmed"?F:null},Nn=_e=>{if(gt||P&&ut.current!==P.generation)return;let ht=Ln(_e);if(!ht)return;if(Zt&&!Nl(Ce,St,wt)){gt=!0;return}let{intentId:ie,paymentMethodId:F}=ht;gt=!0,Q=!0,lt.current=null,N.current=null,ve.current&&(R("idle"),Ve(!1));let Ze=`${Yl}:${Ce}`;$t(Ze,{createdAt:Date.now(),sessionId:Ce,nonce:St,accountPatch:Bt,paymentMethodId:F,providerIntentId:ie,paymentMethodType:H});try{l({id:F,type:"card",threeDSecureActionResultTokenId:ie},{accountPatch:Bt,paymentMethodCategory:"wallet",sessionId:Ce,nonce:St})}finally{$t(Ze)}},hr=!1;Ht=async()=>{if(!(hr||gt||Q)){hr=!0,ve.current&&R("checking");try{let _e=await zl(U,wt,Ae.current);if(gt||Q)return;let ht=(0,y.isSetupIntentClientSecret)(wt),ie=Xi(_e,mn.providerObjectId,ht);if(ie.kind==="confirmed"){Nn(ht?{setupIntent:_e}:{paymentIntent:_e});return}if(ie.kind==="terminal"){if(Q=!0,Yi(Ce,St,wt),lt.current=null,N.current=null,!ve.current)return;R("idle"),f(),q(H,new Error("Wallet confirmation did not complete."),"stripe_wallet_confirmation_terminal",P?.generation,!0);return}ve.current&&!Q&&(R("blocked"),Ve(!1))}catch{ve.current&&!Q&&(R("blocked"),Ve(!1))}finally{hr=!1}}},N.current=Ht;let Cn,sn;try{let _e=await((0,y.isSetupIntentClientSecret)(wt)?U.confirmSetup({elements:de,clientSecret:wt,redirect:"if_required"}):U.confirmPayment({elements:de,clientSecret:wt,redirect:"if_required"}));if(!_e||typeof _e!="object"||(Cn=_e,!Cn.error&&!Ln(Cn)))throw Gi;sn=fn(Cn.error?"returned_error":"resolved",Cn.error&&Jo(Cn.error)?"provider_declined":void 0)}catch(_e){let ht=_e===Gi,ie=fn(ht?"returned_error":"rejected");if(ae?.error({...ht?{errorCode:"CONFIGURATION_INVALID",failureCategory:"invalid_response"}:xi(_e),...Dt,operationOutcome:ie.operationOutcome,durationMs:ie.durationMs,statusClass:"unknown",terminalReason:ie.terminalReason}),!ve.current||gt)return;await Ht?.();return}let _n=Cn.error;if(_n){if(!ve.current||gt)return;if(Jo(_n)){Q=!0,Yi(Ce,St,wt),lt.current=null,N.current=null,R("idle");let _e=_n.message??"Your payment was declined.";f(_e),d?.(_e),p?.(cn($e,_e,{code:_r(_n),declineCode:wo(_n)})),ni({billingApiUrl:r,sessionId:Ce,nonce:St,request:{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:H,providerDeclineReason:_r(_n)??"provider_declined",...mn.intentKind==="payment"&&mn.providerObjectId.startsWith("pi_")?{providerIntentId:mn.providerObjectId}:{}}})}else ae?.error({...xi(_n),...Dt,operationOutcome:sn.operationOutcome,durationMs:sn.durationMs,statusClass:"unknown",terminalReason:sn.terminalReason}),await Ht?.();return}if(Nn(Cn),!gt)throw new Error("Invalid provider returned for APM intent")}catch(Ce){if(Ce===Za){let St=ae?.now()??globalThis.performance?.now()??Date.now();ae?.error({errorCode:Vd(Rn),stage:Fn,requestCategory:Rn,paymentMethodCategory:"wallet",provider:"stripe",...vt?{walletType:vt}:{},operationOutcome:"watchdog_expired",checkoutSessionId:Ue,durationMs:Math.max(0,St-it),statusClass:"timeout",failureCategory:Mt,attempt:Re,terminalReason:"provider_error"}),ae?.flush?.().catch(()=>{})}f(),q(H,Ce,Ce===Za?"stripe_wallet_authorization_timeout":"stripe_wallet_failed",P?.generation,Ce===Za)}finally{if(window.clearTimeout(On),Ft!==null&&(window.clearTimeout(Ft),Ae.current.delete(Ft)),!ze){let Ce=ae?.now()??globalThis.performance?.now()??Date.now();ae?.performance({stage:"callback",durationMs:Math.max(0,Ce-it),durationMode:"machine",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",provider:"stripe",...Nt?{statusClass:"timeout"}:{}})}ve.current&&Ve(!1)}},[U,de,e,t,n,M,Oe,I,r,Y,o,l,d,p,v,q,at,Vt,jt,ut,X,be]),bt=(0,i.useMemo)(()=>{let $=["applePay","googlePay","paypal","link","amazonPay","klarna"],Je=new Set(["applePay","googlePay"]),f=new Set(a.map(y.stripeExpressMethodToOptionKey)),P={};for(let H of $)f.has(H)?P[H]=Je.has(H)?"always":"auto":P[H]="never";return P},[a]),Ge=(0,i.useMemo)(()=>a.map(y.stripeExpressMethodToOptionKey),[a]);return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(nc,{state:he,placeholderTestId:"flopay-wallet-placeholder",borderRadius:h,children:(0,c.jsxs)("div",{ref:ke,tabIndex:-1,"data-testid":"flopay-wallet-focus-target",role:"group","aria-label":"Wallet payment methods",style:{borderRadius:8,outlineOffset:4},children:[Ie&&(0,c.jsxs)("button",{ref:Le,type:"button","data-testid":"flopay-wallet-retry-button",onClick:et,style:Qi,children:["Try ",es(He)," again"]}),rt!=="idle"&&(0,c.jsxs)("div",{role:"status","aria-live":"polite",children:[(0,c.jsx)("p",{children:"We are still confirming your payment. Check its status before trying again."}),(0,c.jsx)("button",{type:"button",onClick:V,disabled:rt==="checking",style:Qi,children:rt==="checking"?"Checking payment status\u2026":"Check payment status"})]}),te&&(0,c.jsx)(So,{identity:te.identity,methodLabel:te.methodLabel,onComplete:ft,onCancel:()=>ft(null)},te.id),rt==="idle"&&(0,c.jsx)("div",{style:{display:te?"none":void 0},children:(0,c.jsx)(Jt.ExpressCheckoutElement,{onReady:$=>{De(tc($,Ge))},onLoadError:$=>{De("load_error"),as(X,"stripe","wallet","provider_error")},onClick:async $=>{Ke.current=$.expressPaymentType,Z.current=jl($.expressPaymentType);let Je=!0,f=window.setTimeout(()=>{Je=!1,$.reject()},Nd),P=v?await v(Z.current):{proceed:!0};if(window.clearTimeout(f),!Je)return;if(!P.proceed){Ne.current.delete(be),$.reject();return}let H=ct($.expressPaymentType);Ne.current.set(be,{generation:H,method:$.expressPaymentType,accountPatch:P.accountPatch,sessionId:P.sessionId,nonce:P.nonce}),We(!1),X?.log({name:"provider.handoff.requested",stage:"overlay_open",provider:"stripe",paymentMethodCategory:"wallet",attempt:H,...$.expressPaymentType==="apple_pay"||$.expressPaymentType==="google_pay"?{walletType:$.expressPaymentType}:{}}),u?.(Z.current),$.resolve()},onConfirm:Me,onCancel:()=>{let $=Ne.current.get(be);Ne.current.delete(be),X?.terminal({outcome:"payment_cancelled",provider:"stripe",paymentMethodCategory:"wallet",terminalReason:"cancelled",...$?{attempt:$.generation}:{}}),xe($?.generation),lt.current=null,We(!1),ue.current=!0,Et()},options:{buttonType:{applePay:"plain",googlePay:"plain"},paymentMethods:bt,emailRequired:yt,billingAddressRequired:yt,layout:{maxColumns:1,overflow:"never"}}},be)})]})}),re&&(0,c.jsx)(er,{status:"processing"})]})}function rc(e,t){return{...e,paymentMethodTypes:[t],...t==="revolut_pay"||t==="sepa_debit"||t==="us_bank_account"?{setupFutureUsage:"off_session"}:null}}function lu({method:e,themeId:t,submitting:n=!1,disabled:r=!1,highlighted:o=!1,hasNextStep:a=!1,onClick:l,backgroundColor:d,borderColor:u,textColor:p,borderRadius:b,fontFamily:v}){let M=(0,y.resolveStripeMethodBrandVariant)(e,t),I=Rl[e],[w,h]=(0,i.useState)(!1),O=!!I&&!w,G=M?.backgroundColor??d??"#ffffff",T=M?.borderColor??u??"#d1d5db",Y=M?.textColor??p??"#262833";return(0,c.jsx)("button",{type:"button","data-testid":`flopay-stripe-method-button-${e}`,"data-method":e,onClick:()=>{!n&&!r&&l()},disabled:n||r,"aria-busy":n||void 0,style:{position:"relative",width:"100%",boxSizing:"border-box",height:pa,padding:"0 1rem",backgroundColor:G,color:Y,border:`1px solid ${T}`,borderRadius:b??8,fontSize:"0.95rem",fontWeight:600,fontFamily:v,cursor:n||r?"not-allowed":"pointer",opacity:r&&!n?.55:1,animation:n?"flopay-pulse 1.5s ease-in-out infinite":void 0,display:"flex",alignItems:"center",justifyContent:"center",gap:8,transition:"transform 0.1s, opacity 140ms ease-out, border-color 140ms ease-out",boxShadow:o?"0 0 0 2px rgba(74, 73, 255, 0.15)":void 0},children:n?(0,c.jsx)("span",{style:{margin:"0 auto"},children:`Connecting to ${(0,y.getStripeMethodDisplayName)(e)}\u2026`}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:(0,y.hasVendoredStripeMethodLogo)(e)?8:0},children:[O?(0,c.jsx)("img",{src:I,alt:"","aria-hidden":"true",onError:()=>h(!0),loading:"lazy",decoding:"async",width:30,height:20,style:{width:30,height:20,flexShrink:0,borderRadius:3,objectFit:"contain",display:"inline-flex"}}):null,!O&&M?.logoSvg?(0,c.jsx)("span",{"aria-hidden":"true",style:{width:30,height:20,flexShrink:0,display:"inline-flex",borderRadius:3,overflow:"hidden"},dangerouslySetInnerHTML:{__html:M.logoSvg}}):null,(0,c.jsx)("span",{children:(0,y.getStripeMethodDisplayName)(e)})]}),a&&(0,c.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:Y,strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",style:{position:"absolute",right:"1rem",top:"50%",transform:"translateY(-50%)",flexShrink:0,opacity:.7},"aria-hidden":"true",children:(0,c.jsx)("path",{d:"M9 18l6-6-6-6"})})]})})}function ts({method:e,sessionId:t,nonce:n,email:r,billingName:o,onBuyerIdentityReady:a,billingApiUrl:l,onTokenizedBody:d,onErrorChange:u,onDecline:p,onCancel:b,runBeforeButtonClick:v,onButtonClick:M,isProcessing:I,submitButtonColor:w,submitButtonBorderRadius:h,submitButtonStyle:O,errorText:G}){let T=Ur(),{emitInstrument:Y}=(0,i.useContext)(Zn),U=(0,Jt.useStripe)(),de=(0,Jt.useElements)(),[X,he]=(0,i.useState)(!1),De=(0,i.useRef)(!1),[re,Ve]=(0,i.useState)(!1),[yt,te]=(0,i.useState)("loading"),[Oe,ft]=(0,i.useState)(""),ke=!(0,y.isValidEmail)(r?.trim()),Le=!ke||(0,y.isValidEmail)(Oe.trim()),be=(0,i.useCallback)(async()=>{if(!U||!de||I||De.current||!re)return;De.current=!0,he(!0);let me=v?await v("card"):{proceed:!0};if(!me.proceed){De.current=!1,he(!1);return}M?.("card");let Ie=me.sessionId??t,We=me.nonce??n,rt=eo(o?.trim()),R=Bn({email:me.accountPatch?.email?.trim()||r?.trim()||Oe.trim(),firstName:me.accountPatch?.firstName?.trim()||rt.firstName,lastName:me.accountPatch?.lastName?.trim()||rt.lastName}),He=R.email,ye=Bn({...me.accountPatch,...R});try{if(u?.(null),!(0,y.isValidEmail)(He))throw new Error("A valid email address is required for payment.");await a?.(R);let N=await de.submit();if(N.error){u?.(N.error.message??"Payment failed.");return}let ve=[R.firstName,R.lastName].filter(Boolean).join(" "),ue=await U.createPaymentMethod({elements:de,params:{billing_details:{email:He,...ve?{name:ve}:{}}}});if(ue.error||!ue.paymentMethod){u?.(ue.error?.message??"Failed to create payment method.");return}let Ke=ue.paymentMethod;if(!Ie||!He)throw new Error("Missing sessionId or email for payment.");let Z=Ke.type||e,ot=await ti(l,Y,Ie,We??"",{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:Z,paymentMethodId:null,intentKind:"payment"});if(ot.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let lt=ot.clientSecret;$t(Tr,{clientSecret:lt,sessionId:Ie,nonce:We,accountPatch:ye,paymentMethodId:Ke.id,paymentMethodType:Ke.type??e,gateway:"stripe"});let{error:Ae,paymentIntent:Ne}=await U.confirmPayment({clientSecret:lt,confirmParams:{return_url:window.location.href,payment_method:Ke.id},redirect:"if_required"});if(Ae){$t(Tr);let xe=Ae.message??"Payment failed.";u?.(xe),p?.(cn("card",xe,{code:Ae.code})),await ni({billingApiUrl:l,sessionId:Ie,nonce:We,request:{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:e,providerDeclineReason:Ae.code??"provider_declined"}});return}let ct=Ne?.status;if(!Yo(ct)){$t(Tr);let xe=ct==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";u?.(xe),p?.(cn("card",xe,{code:ct??"missing_payment_intent"}));return}$t(Tr);let at=typeof Ne?.payment_method=="string"?Ne.payment_method:Ne?.payment_method?.id;d({id:at??Ke.id,type:"card",threeDSecureActionResultTokenId:Ne?.id,gateway:"stripe",paymentMethodType:Ke.type??e},{accountPatch:ye,paymentMethodCategory:"apm",sessionId:Ie,nonce:We})}catch(N){u?.(N instanceof Error?N.message:"Payment failed. Please try again.")}finally{De.current=!1,he(!1)}},[U,de,I,re,v,M,t,n,r,o,Oe,a,l,Y,e,d,u,p]);return(0,c.jsxs)("div",{"data-testid":`flopay-stripe-method-form-${e}`,style:{display:"flex",flexDirection:"column"},children:[ke&&(0,c.jsx)("div",{"data-testid":"flopay-apm-identity-fields",style:{display:"flex",flexDirection:"column",gap:"0.75rem",marginBottom:"0.75rem"},children:ke&&(0,c.jsxs)("label",{style:{display:"flex",flexDirection:"column",gap:"0.375rem"},children:["Email address",(0,c.jsx)("input",{type:"email",autoComplete:"email",required:!0,value:Oe,onChange:me=>ft(me.target.value),style:{minHeight:42,padding:"0 0.75rem",border:"1px solid #d1d5db",borderRadius:6}})]})}),(0,c.jsx)(Jt.PaymentElement,{onReady:()=>te("ready"),onLoadError:()=>{te("load_error"),as(dn(T),"stripe","apm")},onChange:me=>{Ve(!!me.complete)},options:{layout:{type:"accordion",defaultCollapsed:!1,radios:"never"},fields:{billingDetails:{email:"never"}},defaultValues:{billingDetails:{...o?.trim()?{name:o.trim()}:{},...(0,y.isValidEmail)(r?.trim())?{email:r?.trim()}:{}}}}}),(0,c.jsx)("button",{type:"button","data-testid":`flopay-stripe-method-pay-${e}`,onClick:()=>{be()},disabled:!re||!Le||X||I||yt!=="ready",style:{width:"100%",marginTop:"0.75rem",padding:"0.875rem",backgroundColor:w,color:"white",border:"none",borderRadius:h,fontSize:"1rem",fontWeight:600,cursor:!re||!Le||X||I||yt!=="ready"?"not-allowed":"pointer",opacity:!re||!Le||X||I||yt!=="ready"?.5:1,transition:"opacity 120ms ease-out",...O??{}},children:X?"Processing\u2026":`Pay with ${(0,y.getStripeMethodDisplayName)(e)}`}),G&&(0,c.jsx)(Io,{margin:"0.75rem 0 0",children:G})]})}function Gl({sessionId:e,nonce:t,email:n,billingName:r,onBuyerIdentityReady:o,billingApiUrl:a,paymentElementMethods:l,stripeInstance:d,paymentElementBaseOptions:u,onTokenizedBody:p,onErrorChange:b,onButtonClick:v,onDecline:M,runBeforeButtonClick:I,onLoadStateChange:w,isProcessing:h=!1,submitButtonColor:O="#4A49FF",submitButtonBorderRadius:G=8,submitButtonStyle:T,buttonAppearance:Y,themeId:U,onExpandApm:de,expandedApmMethod:X}){let{emitInstrument:he}=(0,i.useContext)(Zn),[De,re]=(0,i.useState)(null),[Ve,yt]=(0,i.useState)(null),te=(0,i.useRef)(!1),{request:Oe,collect:ft,finish:ke}=Co();(0,i.useEffect)(()=>{l.length>0&&d?w?.("ready"):d||w?.("loading")},[l.length,d,w]);let Le=(0,i.useCallback)(async R=>{if(!d||te.current||h)return;te.current=!0,yt(R);let He=I?await I("card"):{proceed:!0};if(!He.proceed){te.current=!1,yt(null);return}v?.("card");let ye=He.sessionId??e,N=He.nonce??t,ve=eo([He.accountPatch?.firstName,He.accountPatch?.lastName].filter(Boolean).join(" ")||r),ue=Bn({email:He.accountPatch?.email?.trim()||n?.trim(),firstName:He.accountPatch?.firstName?.trim()||ve.firstName,lastName:He.accountPatch?.lastName?.trim()||ve.lastName});if(!(0,y.isValidEmail)(ue.email)){yt(null);let ot=await ft((0,y.getStripeMethodDisplayName)(R),ue);if(!ot){te.current=!1;return}ue=ot,yt(R)}let Ke=ue.email,Z=Bn({...He.accountPatch,...ue});try{if(b?.(null),!ye||!(0,y.isValidEmail)(Ke))throw new Error("Missing sessionId or email for payment.");await o?.(ue);let ot=await ti(a,he,ye,N??"",{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:R,paymentMethodId:null,intentKind:"payment"});if(ot.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let lt=ot.clientSecret;$t(Tr,{clientSecret:lt,sessionId:ye,nonce:N,accountPatch:Z,paymentMethodType:R,gateway:"stripe"});let{error:Ae,paymentIntent:Ne}=await d.confirmPayment({clientSecret:lt,confirmParams:{return_url:window.location.href,payment_method_data:{type:R,billing_details:{name:[ue.firstName,ue.lastName].filter(Boolean).join(" "),...Ke?{email:Ke}:{}}}},redirect:"if_required"});if(Ae){$t(Tr);let xe=Ae.message??"Payment failed.";b?.(xe),M?.(cn("card",xe,{code:Ae.code})),await ni({billingApiUrl:a,sessionId:ye,nonce:N,request:{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:R,providerDeclineReason:Ae.code??"provider_declined"}});return}let ct=Ne?.status;if(!Yo(ct)){$t(Tr);let xe=ct==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";b?.(xe),M?.(cn("card",xe,{code:ct??"missing_payment_intent"}));return}$t(Tr);let at=typeof Ne?.payment_method=="string"?Ne.payment_method:Ne?.payment_method?.id;p({id:at??Ne?.id,type:"card",threeDSecureActionResultTokenId:Ne?.id,gateway:"stripe",paymentMethodType:R},{accountPatch:Z,paymentMethodCategory:"apm",sessionId:ye,nonce:N})}catch(ot){b?.(ot instanceof Error?ot.message:"Payment failed. Please try again.")}finally{te.current=!1,yt(null)}},[d,h,I,v,e,t,n,ft,a,he,r,o,p,b,M]),[be,me]=(0,i.useState)(null),Ie=de?X??null:be,We=(0,i.useCallback)(R=>{te.current||h||Ie&&Ie!==R||((0,y.needsStripeMethodExplicitConfirm)(R)?de?de(R):me(R):Le(R))},[Ie,h,Le,de]),rt=(0,i.useMemo)(()=>be?rc(u,be):null,[be,u]);return(0,c.jsx)("div",{"data-testid":"flopay-stripe-payment-element-region",style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:Oe?(0,c.jsx)(So,{identity:Oe.identity,methodLabel:Oe.methodLabel,onComplete:ke,onCancel:()=>ke(null)},Oe.id):l.map(R=>{let He=X===R,ye=Ve===R,N=Ve!==null&&Ve!==R||X!=null&&X!==R;return(0,c.jsxs)(i.default.Fragment,{children:[(0,c.jsx)(lu,{method:R,themeId:U,submitting:ye,disabled:N,highlighted:He,hasNextStep:(0,y.needsStripeMethodExplicitConfirm)(R),onClick:()=>We(R),backgroundColor:Y?.backgroundColor,borderColor:Y?.borderColor,textColor:Y?.textColor,borderRadius:Y?.borderRadius,fontFamily:Y?.fontFamily}),!de&&be===R&&rt&&d&&(0,c.jsx)(Jt.Elements,{stripe:d,options:rt,children:(0,c.jsx)(ts,{method:R,sessionId:e,nonce:t,email:n,billingName:r,onBuyerIdentityReady:o,billingApiUrl:a,onTokenizedBody:p,onErrorChange:b,onDecline:M,onCancel:()=>me(null),runBeforeButtonClick:I,onButtonClick:v,isProcessing:h,submitButtonColor:O,submitButtonBorderRadius:G,submitButtonStyle:T})},R)]},R)})})}function cu({sessionId:e,nonce:t,billingApiUrl:n,telemetry:r,email:o,userId:a,onComplete:l,onError:d,onDecline:u,onTokenizedBody:p,firstName:b,lastName:v,chv:M,className:I,submitLabel:w,isProcessing:h,error:O,onErrorChange:G,showPayPal:T=!0,showStripe:Y=!0,walletPresentation:U="auto",enabledPaymentMethods:de,enabledPaymentMethodCountries:X,showApplePay:he=!0,showGooglePay:De=!0,layout:re="default",theme:Ve,buttonsTheme:yt,buttonsStyles:te,appearance:Oe,cardButtonContent:ft,cardBackButtonContent:ke,cardTitleContent:Le,showSecurityFooter:be,onButtonClick:me,onBeforeButtonClick:Ie,onBuyerIdentityReady:We,enableAVS:rt,cardFieldOrder:R,cardPreFormSlot:He,avsLayout:ye="row",country:N,zip:ve,addressLine1:ue,addressLine2:Ke,city:Z,state:ot,onCountryChange:lt,onZipChange:Ae,avsCheck:Ne,checkoutType:ct,checkoutLayout:at,totalAmount:xe=0,currency:jt="usd",initialCardOpen:Vt=!1,directPaypal:ut,isSubscription:Et=!1,session:q,dataAttachmentPending:fe=!1,dataAttachmentRequiresIdentity:et=!1,debug:V=!1}){let Me=Ur(),bt=Ba(),Ge=(0,i.useContext)(pr),{emitInstrument:$}=(0,i.useContext)(Zn),Je=(0,i.useRef)(null);Je.current||(Je.current=Oa());let f=Je.current,[,P]=(0,i.useState)(0),H=(0,i.useRef)(null);H.current||(H.current=Qo());let ne=H.current,$e=(0,i.useMemo)(()=>({browser:ne,capability:f,presentationMode:"popup"}),[ne,f]),vt=q??Ge.session,Re=vt?.gateways?.paypal?.providerObjectType??ut?.providerObjectType,ae=fe||Ge.claimPending===!0,it=et||Ge.claimRequiresIdentity===!0,Ct=ae&&!it,Nt=ul(),ze=n||Nt,[Ft,Ue]=(0,i.useState)(!1),[Fn,Rn]=(0,i.useState)(null),[Mt,wn]=(0,i.useState)(N??""),[Dn,On]=(0,i.useState)(ve??""),[rn,Ce]=(0,i.useState)(ue??""),[St,Tt]=(0,i.useState)(Ke??""),[vn,Bt]=(0,i.useState)(Z??""),[Vn,pn]=(0,i.useState)(ot??""),[Wt,an]=(0,i.useState)(""),[Wn,mn]=(0,i.useState)({}),wt=(0,i.useRef)(ve??""),Zt=(0,i.useRef)(N??""),yn=(0,i.useRef)(ue??""),Dt=(0,i.useRef)(Ke??""),Qt=(0,i.useRef)(Z??""),Ht=(0,i.useRef)(ot??""),fn=(0,i.useRef)(""),gt=(0,i.useRef)({});(0,i.useEffect)(()=>{let s=(S,K,Te,ee,Se)=>{if(gt.current[S])return;let Xt=K?.trim();!Xt||Xt===Te.current||(Te.current=Xt,ee(Xt),Se?.(Xt))};s("country",N,Zt,wn,lt),s("zip",ve,wt,On,Ae),s("addressLine1",ue,yn,Ce),s("addressLine2",Ke,Dt,Tt),s("city",Z,Qt,Bt),s("state",ot,Ht,pn)},[N,ve,ue,Ke,Z,ot,lt,Ae]);let Q=(0,i.useMemo)(()=>(0,y.resolveAVSConfig)(rt),[rt]),Ln=Q!==null,Nn=(0,i.useMemo)(()=>(0,y.isAuthorizationOnlySession)(q),[q]),hr=!!q?.vault?.html,Cn=!!q?.gateways?.pcivault,sn=Ei(q),_e=!!(q?.gateways?.stripe?.enabledPaymentMethods??de)?.includes("card")||Wr(q),ht=hr||_e||Cn,ie=!!(Y&&ht&&e),[F,Ze]=(0,i.useState)(()=>re!=="buttons"||Vt?e??null:null),[se,Hn]=(0,i.useState)(0),gn=re!=="buttons"||Vt||!!e&&F===e,Kt=q?.captureMethod,Kn=(0,i.useRef)(Me);(0,i.useEffect)(()=>{Kn.current=Me},[Me]);let[nt,jr]=(0,i.useState)(null);(0,i.useEffect)(()=>{if(!ie||!e||!gn){jr(null);return}let s=Kn.current?Kn.current.cardCapture({sessionId:e,captureMethod:Kt}):new fr.PciVaultCardCapture({sessionId:e,captureMethod:Kt,billingApiUrl:ze,telemetry:r});return jr({sessionId:e,captureMethod:Kt,billingApiUrl:ze,telemetry:r,capture:s}),()=>{s.unmount()}},[ie,e,gn,Kt,ze,r]);let Gt=ie&&e&&gn&&nt?.sessionId===e&&nt.captureMethod===Kt&&nt.billingApiUrl===ze&&nt.telemetry===r?nt.capture:null,hn=(0,i.useMemo)(()=>{let s=Mt,S=Q?(0,y.isAVSFieldVisible)(Q.postal_code,s):!1;return au(s,Dn,S)},[Q,Mt,Dn]),{avsInvalid:Mr,invalidAvsFields:Br}=(0,i.useMemo)(()=>{let s={line1:!1,city:!1,state:!1,zip:!1};if(!ie||!Q)return{avsInvalid:!1,invalidAvsFields:s};let S=Mt,K=(Se,Xt)=>(0,y.isAVSFieldVisible)(Se,S)&&!Xt.trim(),Te={line1:K(Q.address_line_1,rn),city:K(Q.city,vn),state:K(Q.state,Vn),zip:hn.empty||hn.malformed};return{avsInvalid:Te.line1||Te.city||Te.state||Te.zip,invalidAvsFields:Te}},[ie,Q,Mt,rn,vn,Vn,hn]),[En,en]=(0,i.useState)(!1),[br,Tn]=(0,i.useState)(!1),[Fr,An]=(0,i.useState)(!1),[Pr,vr]=(0,i.useState)({line1:!1,city:!1,state:!1}),rr=(0,i.useRef)(!1),Gn=(0,i.useRef)({email:!1,line1:!1,city:!1,state:!1,zip:!1}),Yn=(0,i.useRef)(!1),xt=(0,i.useCallback)(s=>{Gn.current[s]=!0,Yn.current=!0},[]),or=(0,i.useCallback)(s=>!rr.current&&Gn.current[s],[]),kn=(0,i.useCallback)(s=>{or(s)&&vr(S=>S[s]?S:{...S,[s]:!0})},[or]),[Xn,Cr]=(0,i.useState)(()=>Ji(q?.vault)),[dt,on]=(0,i.useState)(Vt&&ht?"card":"buttons"),[tn,Dr]=(0,i.useState)(null),zn=dt==="expanding"||dt==="card",Vr=q?.gateways?.stripe&&!sn?"stripe":void 0,ar=(0,i.useCallback)(()=>{$?.({class:"card_surface",provider:Vr})},[Vr,$]),ir=(0,i.useRef)(null),bn=(0,i.useCallback)(s=>{ir.current&&clearTimeout(ir.current),ir.current=setTimeout(()=>{ir.current=null,s()},ma)},[]);(0,i.useEffect)(()=>()=>{ir.current&&clearTimeout(ir.current)},[]);let sr=(0,i.useCallback)(()=>{ar(),Ze(e??null),Hn(s=>s+1),on("expanding"),bn(()=>on("card"))},[bn,ar,e]),Or=(0,i.useCallback)(()=>{on("collapsing"),bn(()=>on("buttons"))},[bn]),In=(0,i.useCallback)(s=>{Dr(s),on("apm-expanding"),bn(()=>on("apm-form"))},[bn]),A=(0,i.useCallback)(()=>{on("apm-collapsing"),bn(()=>{on("buttons"),Dr(null)})},[bn]);(0,i.useEffect)(()=>{re==="buttons"&&Vt&&ht&&(Ze(e??null),on("card"))},[re,Vt,ht,e]);let[L,B]=(0,i.useState)(null),le=(0,i.useRef)(!1),Be=(0,i.useRef)(null),pt=(0,i.useRef)("idle"),[pe,Fe]=(0,i.useState)(!1),W=(0,i.useRef)(pe);W.current=pe;let[m,g]=(0,i.useState)(()=>ut?.existingOrderId?{orderId:ut.existingOrderId,attempts:1}:null),D=(0,i.useRef)(m);(0,i.useEffect)(()=>{D.current=m},[m]);let z=(0,i.useRef)(null),ce=(0,i.useMemo)(()=>{if(We||Ge.claimBuyerIdentity||q?.buyerIdentified!==!1||!e||!t)return;let s=`${ze}|${e}|${t}`;z.current?.key!==s&&(z.current={key:s,claim:Po(new fr.PaymentAPI(ze,{telemetry:!1}),e,t,{...a?{userId:a}:{},...b?{firstName:b}:{},...v?{lastName:v}:{}})});let S=z.current.claim;return async K=>{await S(K)}},[We,Ge.claimBuyerIdentity,q?.buyerIdentified,e,t,ze,a,b,v]),J=We??Ge.claimBuyerIdentity??ce,Ye=O??Fn,It=(0,i.useMemo)(()=>(0,y.resolveTheme)(Ve),[Ve]),E=(0,i.useMemo)(()=>{let s=It?.buttonsLayout??(0,y.resolveButtonsLayoutTheme)(yt);return te?{...s,...te,cardButton:{...s.cardButton,...te.cardButton},cardFormContainer:{...s.cardFormContainer,...te.cardFormContainer},backButton:{...s.backButton,...te.backButton},backButtonIcon:{...s.backButtonIcon,...te.backButtonIcon},submitButton:{...s.submitButton,...te.submitButton},title:{...s.title,...te.title}}:s},[It,yt,te]),Pe=Oe??It?.appearance,At=(0,i.useMemo)(()=>Ja({appearance:Pe,buttonsStyles:E,layout:re}),[Pe,E,re]),ge=Ge.inlineSessionPatchProcessing??!1,j=(h??Ft)||ge,oe=ze.replace(/\/+$/,""),_=(0,i.useMemo)(()=>Ai({userId:a,email:o,firstName:b,lastName:v,country:N,zip:ve},Wn),[a,o,b,v,N,ve,Wn]),qe=[_.firstName,_.lastName].filter(s=>!!s?.trim()).join(" "),Rt=!(0,y.isValidEmail)(_.email?.trim()),Ee=(0,i.useRef)(null);ie&&Ee.current===null&&(Ee.current=Rt);let Sn=ie&&(Ee.current??Rt),Sr=(0,i.useMemo)(()=>iu(Wt,Sn),[Wt,Sn]),ao=Sr.empty||Sr.malformed,Un=(0,i.useMemo)(()=>Me?Me.getRawProvider():null,[Me]),ys=(0,i.useMemo)(()=>bt?bt.getRawProvider():null,[bt]),Do=xe||100,io=jt.toLowerCase(),di=(0,i.useMemo)(()=>Pe?(0,fr.toStripeAppearance)(Pe):null,[Pe]),so=di,fs=(0,i.useMemo)(()=>{let s=di??{},S=s.rules??{};return{...s,rules:{...S,".AccordionItem":{padding:"10px 14px",boxShadow:"none",...S[".AccordionItem"]??{}},".AccordionItemContents":{padding:"6px 14px 12px",boxShadow:"none",...S[".AccordionItemContents"]??{}}}}},[di]),gs=(0,i.useMemo)(()=>({...il(xe,q?.captureMethod),currency:io,...so?{appearance:so}:null}),[xe,io,q?.captureMethod,so]),hs=(0,i.useMemo)(()=>({mode:"payment",amount:Do,currency:io,captureMethod:"manual",setupFutureUsage:"off_session",...so?{appearance:so}:null}),[Do,io,so]),we=(0,i.useCallback)(s=>{Rn(s),G?.(s)},[G]),ui=(0,i.useRef)(""),[bs,bc]=(0,i.useState)(!1),pi=(0,i.useCallback)(()=>{bc(!0)},[]);(0,i.useEffect)(()=>{if(!ie||!Sn||!J||!bs||ao||ui.current)return;let s=Bn({email:(0,y.isValidEmail)(_.email?.trim())?_.email?.trim():fn.current.trim(),firstName:_.firstName?.trim(),lastName:_.lastName?.trim()});ui.current=JSON.stringify(s),mn(S=>({...S,...s})),Promise.resolve(J(s)).catch(S=>{ui.current="",we(S instanceof Error?S.message:"Failed to attach buyer details.")})},[ie,Sn,J,bs,ao,_.email,_.firstName,_.lastName,we]),(0,i.useEffect)(()=>{!ie||!Gt||Gt.setCardFieldOrder?.(R??null,Q==null&&!Sn)},[ie,Gt,R,Q,Sn]),(0,i.useEffect)(()=>{(dt==="expanding"||dt==="collapsing"||dt==="apm-expanding"||dt==="apm-collapsing")&&we(null)},[dt,we]);let wr=(0,i.useCallback)((s,S,K)=>{u?.(cn(s,S,K))},[u]),lo=(0,i.useCallback)((s,S,K)=>{let Te=K?.popupBlocked??Gr(S);Te&&f.markBlocked()&&P(tt=>tt+1);let ee=xa(es(s),Te,ne.inAppBrowser),Se=_r(S),Xt=(Se?.toLowerCase()==="error"?void 0:Se)??to(K?.code)??"external_payment_method_failed",dr=new y.FloPayError(ee,"api_error",{code:"external_payment_method_failed",param:s,details:{providerCode:Xt,popupBlocked:Te,inAppBrowser:ne.inAppBrowser,appFamily:ne.appFamily,popupCapability:f.current(),presentationMode:K?.presentationMode??"popup"}});K?.telemetryReported||dn(Me)?.error(xo({...$e,presentationMode:K?.presentationMode??"popup"},{errorCode:Te?"POPUP_BLOCKED":"PROVIDER_RUNTIME_FAILED",failureCategory:"provider_runtime",stage:"provider_ready",provider:K?.provider??(s==="paypal"?"paypal":"stripe"),paymentMethodCategory:K?.paymentMethodCategory??(s==="paypal"?"paypal":"wallet"),requestCategory:"provider_sdk",terminalReason:K?.terminalReason??(Te?"popup_blocked":"provider_error")})),B(null),re==="buttons"&&(on("buttons"),Dr(null)),we(ee),d?.(dr),console.error("[FloPay] External payment method failed:",{method:s,code:Xt,popupBlocked:Te})},[ne,$e,Me,re,d,f,we]);(0,i.useEffect)(()=>{if(!ie||!e){Cr(null);return}let s=Ji(q?.vault);if(s){Cr(s);return}if(!gn){Cr(null);return}Cr(null);let S=!0;return new fr.PaymentAPI(oe).getVaultCapture(e,t).then(K=>{if(!S)return;let Te=Ji(K);Te?Cr(Te):we("Failed to load the secure card form.")}).catch(K=>{S&&we(K instanceof Error?K.message:"Failed to load the secure card form.")}),()=>{S=!1}},[ie,gn,se,e,q?.vault,oe,t,we]);let lr=(0,i.useRef)({onComplete:l,onError:d,updateError:we,emitDecline:wr,resolvedAccount:_,avsConfig:Q,avsCheckProp:Ne,sessionId:e,nonce:t,baseUrl:oe,captureMethod:q?.captureMethod,paymentId:q?.paymentId,authorizationExpiresAt:q?.authorizationExpiresAt,serverSideCardGateway:sn});lr.current={onComplete:l,onError:d,updateError:we,emitDecline:wr,resolvedAccount:_,avsConfig:Q,avsCheckProp:Ne,sessionId:e,nonce:t,baseUrl:oe,captureMethod:q?.captureMethod,paymentId:q?.paymentId,authorizationExpiresAt:q?.authorizationExpiresAt,serverSideCardGateway:sn};let mi=(0,i.useRef)(!1),Ps=(0,i.useCallback)(()=>{let s=lr.current,S=s.resolvedAccount.email?.trim(),K=(0,y.isValidEmail)(S)?S:fn.current.trim();if(!(0,y.isValidEmail)(K))return null;let Te=s.resolvedAccount.firstName?.trim(),ee=s.resolvedAccount.lastName?.trim(),Se=Zt.current.trim()||s.resolvedAccount.country?.trim()||"",Xt=s.avsConfig?(0,y.isAVSFieldVisible)(s.avsConfig.state,Se):!1,dr=s.avsConfig?(0,y.isAVSFieldVisible)(s.avsConfig.address_line_1,Se):!1,tt=s.avsConfig?(0,y.isAVSFieldVisible)(s.avsConfig.postal_code,Se):!1,mt=s.avsConfig?(0,y.isAVSFieldVisible)(s.avsConfig.city,Se):!1,kt=s.avsConfig?(0,y.isAVSFieldVisible)(s.avsConfig.address_line_2,Se):!1,Ut=dr&&!Xt&&tt?(0,y.getStateFromPostalCode)(Se,(wt.current??"").trim()):null,ln=Xt?Ht.current:Ut;return{accountData:{userId:s.resolvedAccount.userId??"",email:K,...Te?{firstName:Te}:{},...ee?{lastName:ee}:{},...tt&&wt.current?{zip:wt.current}:{},...mt&&Qt.current?{city:Qt.current}:{},...ln?{state:ln}:{},...dr&&yn.current?{addressLine1:yn.current}:{},...kt&&Dt.current?{addressLine2:Dt.current}:{},...Se?{country:Se}:{}},...s.avsCheckProp===void 0?{}:{avsCheck:s.avsCheckProp},...s.avsConfig?{avsConfig:{country:(0,y.isAVSFieldVisible)(s.avsConfig.country,Se),postal_code:tt,address_line_1:dr,address_line_2:kt,city:mt,state:Xt}}:{}}},[]),vs=(0,i.useRef)(ae);vs.current=ae,(0,i.useEffect)(()=>{ae||Ye!==Ul||lr.current.updateError(null)},[ae,Ye]),(0,i.useEffect)(()=>{!ie||!Gt||Gt.setSubmitGate?.(Mr||ae||ao||pe)},[ie,Gt,Mr,ae,ao,pe]),(0,i.useEffect)(()=>{if(!ie||!Gt)return;mi.current=!1;let s=null,S=()=>{s&&clearTimeout(s),s=setTimeout(()=>{s=null,pt.current="idle",B(null)},400)},K=Gt.on("submitting",()=>{en(!0),Be.current&&clearTimeout(Be.current),pt.current="validation-window",Be.current=setTimeout(()=>{Be.current=null,pt.current==="validation-window"&&(pt.current="processing")},Kd),B("processing");let tt=lr.current;if(!tt.sessionId||!tt.nonce)return;let mt=Ps();if(!mt){tt.updateError("Enter a valid email address."),pt.current="idle",B(null);return}new fr.PaymentAPI(tt.baseUrl).patchAccountSnapshot(tt.sessionId,tt.nonce,mt,{telemetryMode:"best_effort"}).catch(kt=>{if(!Yd(kt))return;let Ut=kt instanceof Error?kt.message:"Please check your billing address and try again.";tt.updateError(Ut),pt.current="idle",B(null),tt.onError?.(kt instanceof y.FloPayError?kt:new y.FloPayError(Ut,"api_error"))})}),Te=Gt.on("complete",async tt=>{if(Eo(tt.sessionId??lr.current.sessionId),pt.current="terminal",Fe(!1),B("success"),await new Promise(ln=>setTimeout(ln,600)),mi.current)return;mi.current=!0;let mt=lr.current,kt=(0,y.isAuthorizationOnlySession)(mt)||tt.outcome==="authorized",Ut=mt.serverSideCardGateway?{}:{paymentIntentId:tt.intentId};lr.current.onComplete?.(kt?{status:"authorized",...Ut,paymentId:tt.paymentId??mt.paymentId,sessionId:tt.sessionId??mt.sessionId,authorizationExpiresAt:tt.authorizationExpiresAt??mt.authorizationExpiresAt,checkoutMethod:"card"}:{status:"succeeded",...Ut,checkoutMethod:"card"})}),ee=Gt.on("decline",tt=>{let mt=lr.current,kt=tt.message??"Your payment was declined. Please try another card or contact your bank.";pt.current="terminal",Fe(!1),mt.updateError(kt),B("error");let Ut=tt.failureOutcome??(0,y.normalizeCheckoutFailureOutcome)(tt.declineReason)??"authorization_declined";mt.emitDecline("card",kt,{code:Ut,declineCode:Ut}),S()}),Se=Gt.on("error",tt=>{let mt=lr.current,kt=tt.message??"There was a problem processing your payment. Please try again.";pt.current="terminal",Fe(!1),mt.updateError(kt),B("error"),mt.onError?.(new y.FloPayError(kt,"api_error",{code:tt.failureOutcome??"capture_failed"})),S()}),Xt=Gt.on("challenge_dismissed",()=>{Be.current&&(clearTimeout(Be.current),Be.current=null),pt.current="processing",Fe(!0),B(null)}),dr=Gt.on("blocked",()=>{if(W.current){lr.current.updateError(Gd);return}if(!vs.current){en(!0);return}pi(),lr.current.updateError(Ul)});return()=>{s&&(clearTimeout(s),s=null),Be.current&&(clearTimeout(Be.current),Be.current=null),pt.current="idle",Fe(!1),B(null),K(),Te(),ee(),Se(),Xt(),dr()}},[ie,Gt,pi,Ps]);let kr=!!ut?.clientId,Oo=Array.isArray(de),ha=Oo&&de.length>0,Cs=Oo&&de.includes("paypal"),ba=(0,i.useRef)(null);ba.current===null&&(ba.current=Wd());let co=ba.current?"redirect":pl(ne,U,f.current()),{expressMethods:Pa,paymentElementMethods:Lo}=(0,i.useMemo)(()=>(0,y.partitionStripeMethods)(de,{excludePaypal:kr}),[de,kr]),Ss=kr||!!bt||Cs&&co==="redirect",Pc=(0,i.useMemo)(()=>Ss?Pa.filter(s=>s!=="paypal"):Pa,[Pa,Ss]),vc=(0,i.useMemo)(()=>{let s=[];return he&&s.push("apple_pay"),De&&s.push("google_pay"),s},[he,De]),uo=Oo?Pc:vc,Cc=Y&&uo.length>0,yi=Ln?Mt:N,va=(0,i.useMemo)(()=>{let s=yi?.trim().toUpperCase();return s?X?Lo.filter(S=>{let K=X[S];return!K||K.length===0||K.includes(s)}):(0,y.filterStripeMethodsByCountry)(Lo,yi):Lo},[Lo,yi,X]),fi=(0,i.useMemo)(()=>({mode:"payment",amount:Do,currency:io,paymentMethodCreation:"manual",appearance:fs}),[Do,io,fs]),[ws,ks]=(0,i.useState)("loading"),[Is,Rs]=(0,i.useState)("loading"),[_s,Es]=(0,i.useState)("loading"),[Sc,gi]=(0,i.useState)(!1),[Ts,hi]=(0,i.useState)("loading"),[bi,wc]=(0,i.useState)();(0,i.useEffect)(()=>{wc(Qo())},[]);let Ca=bi?.inAppBrowser,Sa=bi?Fa(bi,ut?.approvalPresentation,Re??(Et?"subscription":"order")):"popup",As=T&&(kr||(Oo?Cs:Ca===!1)),xs=Y&&Cc,No=(!Ct||!!Ge.waitForDataAttachment)&&As&&kr,Ms=Ts==="retrying"||Ts==="exhausted",zo=null;Y&&(bt?zo=ys:co==="redirect"&&(zo=Un));let Bs=(0,i.useMemo)(()=>({...$e,presentationMode:co}),[$e,co]),Uo=!Ct&&As&&!!zo&&(!kr||Ms),po=!Ct&&xs&&!!Un,qo=!Ct&&Y&&ha&&va.length>0&&!!Un,kc=No&&!Ms?Sc:Uo&&Wl(ws),Ic=po&&Wl(Is),Rc=qo&&_s!=="load_error",Fs=s=>s==="loading"||s==="ready",Ds=No||Uo&&Fs(ws)||po&&Fs(Is)||qo&&_s!=="load_error",wa=(0,i.useRef)(!1);(0,i.useEffect)(()=>{if(!wa.current){if(!Y&&!T){wa.current=!0;let s=new y.FloPayError("FloPay: both `showStripe` and `showPayPal` are false \u2014 nothing to render.","validation_error");d?.(s),we(s.message)}else if(!Y&&T&&!kr){wa.current=!0;let s=new y.FloPayError("FloPay: `showStripe` is false and no PayPal gateway is configured for this session \u2014 nothing to render.","validation_error");d?.(s),we(s.message)}else if(Ca!==void 0&&!Ct&&!ht&&!Ds){wa.current=!0;let s=new y.FloPayError("FloPay: this checkout session has no vault card capability and no usable supported non-card payment methods. Upgrade the billing backend integration.","api_error",{code:"UnsupportedBackendVaultCapability"});d?.(s),we(s.message)}}},[Y,T,kr,Ca,Ct,ht,Ds,d,we]);let Os=(0,i.useRef)(!1);(0,i.useEffect)(()=>{if(Os.current||!ha)return;let s=[];he!==!0&&s.push("showApplePay"),De!==!0&&s.push("showGooglePay"),s.length!==0&&(Os.current=!0,console.warn(`[FloPay] ${s.join(" / ")} ${s.length===1?"is":"are"} deprecated: the Apple Pay / Google Pay surface is now driven by \`gateways.stripe.enabledPaymentMethods\` on the session response. Remove the legacy prop(s) to silence this warning.`))},[ha,he,De]);let Ls=(0,i.useCallback)((s,S)=>Ge.applyInlineSessionPatch?Ge.applyInlineSessionPatch(s).then(K=>({error:null,sessionId:K.sessionId||e,nonce:K.session?.clientSecret||t})).catch(K=>{let Te=Vl(S,K);return we(Te.message),d?.(Te),{error:Te,sessionId:e,nonce:t}}):Promise.resolve({error:null,sessionId:e,nonce:t}),[Ge.applyInlineSessionPatch,t,d,e,we]),cr=(0,i.useCallback)(async s=>{if(s!=="card"&&Ct&&await Ge.waitForDataAttachment?.(),!Ie)return{proceed:!0};try{let S=await Ie({method:s,sessionId:e||void 0,createSession:Ge.inlineSessionDraft});if(S===!1)return{proceed:!1};if(S&&typeof S=="object"){S.account&&mn(Te=>({...Te??{},...S.account}));let K=await Ls(S,s);return K.error?{proceed:!1,accountPatch:S.account}:{proceed:!0,accountPatch:S.account,sessionId:K.sessionId,nonce:K.nonce}}return{proceed:!0}}catch(S){let K=Vl(s,S);return we(K.message),d?.(K),{proceed:!1}}},[Ls,Ge.inlineSessionDraft,Ge.waitForDataAttachment,Ct,Ie,d,e,we]),Ns=(0,i.useCallback)(async(s,S)=>{if(le.current)return;le.current=!0,Ue(!0),B("processing"),we(null);let K=S?.sessionId??e,Te=S?.nonce??t,ee=Ai(_,S?.accountPatch),Se=S?.completionPaymentMethodId??Xo(s),Xt=s.originalPaymentMethodId?{...s,originalPaymentMethodId:void 0}:s,dr=eu(s),tt=S?.presentationMode?Ya(dn(Me),{...$e,presentationMode:S.presentationMode}):void 0,mt=()=>{$?.({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:"process_payment",provider:dr}),tt?.error({errorCode:"PAYMENT_PROCESSING_FAILED",stage:"processing",...yr,requestCategory:"process_payment"})};try{let Ut=await new fr.PaymentAPI(oe).processPayment(ee.userId??"",{sessionId:K,nonce:Te,paymentMethodCategory:S?.paymentMethodCategory??nu(s),tokenizedData:Xt,accountData:{...S?.accountPatch,userId:ee.userId??"",email:ee.email??"",firstName:ee.firstName||void 0,lastName:ee.lastName||void 0,...Q?(()=>{let Ot=Zt.current,Ir=(0,y.isAVSFieldVisible)(Q.state,Ot),qn=(0,y.isAVSFieldVisible)(Q.address_line_1,Ot),Rr=(0,y.isAVSFieldVisible)(Q.postal_code,Ot),Qr=qn&&!Ir&&Rr?(0,y.getStateFromPostalCode)(Ot,(wt.current??"").trim()):null,Ko=Ir?Ht.current:Qr;return{country:Ot,...Rr&&wt.current?{zip:wt.current}:{},...(0,y.isAVSFieldVisible)(Q.city,Ot)&&Qt.current?{city:Qt.current}:{},...Ko?{state:Ko}:{},...qn&&yn.current?{addressLine1:yn.current}:{},...(0,y.isAVSFieldVisible)(Q.address_line_2,Ot)&&Dt.current?{addressLine2:Dt.current}:{}}})():{}},chv:M,avsCheck:Ne??!1,checkoutType:ct,checkoutLayout:at,avsConfig:Q?{country:(0,y.isAVSFieldVisible)(Q.country,Zt.current),postal_code:(0,y.isAVSFieldVisible)(Q.postal_code,Zt.current),address_line_1:(0,y.isAVSFieldVisible)(Q.address_line_1,Zt.current),address_line_2:(0,y.isAVSFieldVisible)(Q.address_line_2,Zt.current),city:(0,y.isAVSFieldVisible)(Q.city,Zt.current),state:(0,y.isAVSFieldVisible)(Q.state,Zt.current)}:void 0});if(Ut.ok){let Ot=Ut.status===204?null:await Ut.json().catch(()=>null),Ir=(0,y.isAuthorizationOnlySession)(q)||Ot?.status==="authorized";Eo(K),tt?.terminal({outcome:"payment_succeeded",...yr}),B("success"),g(null),await new Promise(Qr=>setTimeout(Qr,600));let qn;typeof Ot?.paymentId=="string"?qn=Ot.paymentId:q?.paymentId&&(qn=q.paymentId);let Rr;typeof Ot?.authorizationExpiresAt=="string"?Rr=Ot.authorizationExpiresAt:q?.authorizationExpiresAt&&(Rr=q.authorizationExpiresAt),l?.(Ir?{status:"authorized",...qn===void 0?{}:{paymentId:qn},sessionId:typeof Ot?.sessionId=="string"?Ot.sessionId:K,...Rr===void 0?{}:{authorizationExpiresAt:Rr},paymentIntentId:s.threeDSecureActionResultTokenId,paymentMethodId:Se,checkoutMethod:s.isPaypal?"paypal":"card"}:{status:"succeeded",paymentIntentId:s.threeDSecureActionResultTokenId,paymentMethodId:Se,checkoutMethod:s.isPaypal?"paypal":"card"});return}let ln=await Ut.json().catch(()=>null);if(ln?.type==="paypal_redirect_required"){let Ot=ln.threeDSecureToken,Ir=ln.paymentMethodId||s.id||"";if(!Me||!Ot){B("error"),we("PayPal authorization required but no token provided.");return}try{let qn=bt?.getRawProvider();if(!qn){we("PayPal is not available.");return}let Rr={return_url:window.location.href};Ir&&(Rr.payment_method=Ir);let{error:Qr}=await qn.confirmPayment({clientSecret:Ot,confirmParams:Rr,redirect:"if_required"});if(Qr){B("error");let Ko=Qr.message??"PayPal payment failed.";we(Ko),wr("paypal",Ko,{code:Qr.code})}}catch(qn){B("error"),we(qn instanceof Error?qn.message:"PayPal authorization failed.")}return}if(ln?.type==="paypal_direct_required"){let Ot=ln.orderId;if(!Ot){B("error"),we("PayPal retry required but no order id provided.");return}let Ir=D.current?.attempts??0;if(Ir>=2){B("error"),we("PayPal payment could not be completed after multiple attempts."),wr("paypal","paypal_direct_required retry limit exceeded");return}gi(!1),hi("loading"),g({orderId:Ot,attempts:Ir+1}),B(null);return}(0,y.classifyPaymentRejection)(Ut.status,ln)?tt?.terminal({outcome:"payment_declined",...yr,terminalReason:"provider_declined"}):mt(),B("error");let ur=ln?.message??"Payment failed. Please try again.";we(ur),wr(s.isPaypal?"paypal":"card",ur,{code:ln?.code??ln?.gatewayErrorCode,declineCode:ln?.declineCode??ln?.gatewayDeclineReason}),await new Promise(Ot=>setTimeout(Ot,400))}catch(kt){Zl(kt)||mt(),B("error"),we(kt instanceof Error?kt.message:"An unexpected error occurred"),await new Promise(Ut=>setTimeout(Ut,400))}finally{Ue(!1),B(null),le.current=!1}},[oe,e,t,_,Q,Ne,ct,at,M,Me,bt,q,l,we,wr,$,$e]),xn=(0,i.useCallback)((s,S)=>{p?p(s):Ns(s,S)},[p,Ns]),$o=`${Yl}:${e}`;(0,i.useEffect)(()=>{if(typeof window>"u")return;let s=localStorage.getItem($o);if(!s)return;let S;try{S=JSON.parse(s)}catch{$t($o);return}if(!S||typeof S.createdAt!="number"||Date.now()-S.createdAt<0||Date.now()-S.createdAt>Xl||typeof S.paymentMethodId!="string"||typeof S.providerIntentId!="string"||typeof S.paymentMethodType!="string"||S.sessionId!==e||!t||S.nonce!==t||!uo.includes(S.paymentMethodType)){$t($o);return}$t($o),xn({id:S.paymentMethodId,type:"card",threeDSecureActionResultTokenId:S.providerIntentId,gateway:"stripe",paymentMethodType:S.paymentMethodType},{...S.accountPatch?{accountPatch:S.accountPatch}:{},paymentMethodCategory:"wallet",sessionId:e,nonce:t})},[xn,t,e,$o,uo]);let zs=(0,i.useRef)(!1);(0,i.useEffect)(()=>{if(typeof window>"u"||zs.current)return;let[s,S,K]=rs();if(!s||!S||ba.current||!Me)return;let Te=Me.getRawProvider();if(!Te)return;let ee=mt=>{let kt=localStorage.getItem(mt);if(!kt)return null;try{return JSON.parse(kt)}catch{return $t(mt),null}},Se=ee(Tr)??ee(Ll),Xt;if(Se?.clientSecret){if(Se.clientSecret!==S)return;Xt={...Se.accountPatch?{accountPatch:Se.accountPatch}:{},...Se.sessionId?{sessionId:Se.sessionId}:{},...Se.nonce?{nonce:Se.nonce}:{}}}else if(Se?.sessionId&&Se.sessionId!==e)return;zs.current=!0,$t(Tr),$t(Ll),window.history.replaceState({},"",os());let dr=Se?.paymentMethodType??Se?.tokenType??"card",tt="card";(async()=>{if(K==="failed"){let ur="Payment was declined. Please try again.";we(ur),wr(tt,ur);return}let{paymentIntent:mt,error:kt}=await Te.retrievePaymentIntent(S);if(kt){let ur=kt.message??"Failed to retrieve payment status.";we(ur),wr(tt,ur,{code:kt.code});return}let Ut=mt?.status,ln=Yo(Ut);if(!mt||!ln){let ur=Ut==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";we(ur),wr(tt,ur,{code:Ut??"missing_payment_intent"});return}let Ys=typeof mt.payment_method=="string"?mt.payment_method:mt.payment_method?.id;xn({id:Ys??Se?.paymentMethodId??Se?.tokenId??mt.id,type:"card",threeDSecureActionResultTokenId:mt.id,gateway:Se?.gateway??"stripe",paymentMethodType:dr},Xt)})()},[e,xn,Me,we,wr]);let Pi=(0,i.useCallback)(s=>{s.preventDefault()},[]);if(!(ie||Me!==null))return(0,c.jsx)("div",{"data-testid":"flopay-loading","aria-busy":"true",children:"Loading payment form..."});let jo=re==="buttons",Mn=Pe?.variables,_c=new Set(["#FFFFFF","#ffffff","#fff","#FFF","white"]),vi=Mn?.colorBackground,Ec=vi&&!_c.has(vi)?vi:void 0,Vo=E.cardInputBorder??(jo?"#e5e7eb":"#A4A4FF"),Us=Mn?.colorDanger??"#dc2626",zt=s=>Br[s]&&(Pr[s]||En),ka=ao&&(Fr||En),Jn=s=>s?Us:Vo,Ia=(hn.malformed||hn.empty)&&(br||En),Tc=Jn(Ia),Ci=E.cardFormContainer?.backgroundColor??Ec??(jo?"white":"#EDEDFF"),mo=E.cardInputBackground??Mn?.colorBackground??"white",Si=go(ke),qs=go(Le),yo=E.nameInput,$s=E.cardInputFontSize??su(yo?.fontSize)??Mn?.fontSizeBase??"16px",js=typeof yo?.fontFamily=="string"?yo.fontFamily:Mn?.fontFamily??"Poppins, sans-serif",Vs=Ki(yo?.fontWeight)??400,Ac=E.cardInputColor??(typeof yo?.color=="string"?yo.color:void 0)??Mn?.colorText??"#262833",xc=E.cardInputPlaceholderColor??"#9ca3af",Yt=Mn?.borderRadius??"8px",Jr=Mn?.borderRadius??E.cardButton?.borderRadius??Yt,Zr=Mn?.colorPrimary??"#4A49FF",Mc=Mn?.colorPrimaryHover??Bo(Zr,.12),wi=Mn?.colorText??"#262833",ki={fontSize:$s,fontFamily:js,fontWeight:Vs,color:Ac,WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},Wo={marginTop:"0.375rem",...ki,fontSize:"0.75rem",lineHeight:1.4,color:Us},Bc={"--flopay-input-placeholder-color":xc,"--flopay-input-font-size":$s,"--flopay-input-font-family":js,"--flopay-input-font-weight":String(Vs)},Ho=E.cardFormContainer??{},Ii=Ho.padding??(jo?"0":"1rem"),Ri=Ho.borderRadius??Yt,Fc=Gt&&Xn?(0,c.jsx)(Mo,{capture:Gt,html:Xn.html,messageToken:Xn.messageToken,expectedOrigin:Xn.expectedOrigin,theme:At,submitLabel:w,onReady:()=>{if(!Sn&&!Q||typeof document>"u")return;let s=()=>{let K=(document.querySelector('[data-testid="flopay-vault-identity-fields"]')??document.querySelector('[data-testid="flopay-avs-fields"]'))?.querySelector("input:not([disabled]), select:not([disabled])");if(K){rr.current=!0;try{K.focus()}finally{rr.current=!1}}};Yn.current||s()},onError:s=>we(s),onValidation:s=>{let S=pt.current;(S==="idle"||S==="validation-window")&&(we(s),s&&pt.current==="validation-window"&&(Be.current&&(clearTimeout(Be.current),Be.current=null),pt.current="idle",B(null)))}}):(0,c.jsx)("div",{"data-testid":"flopay-vault-loading",style:{minHeight:120,display:"flex",alignItems:"center",justifyContent:"center",color:"#6b7280",fontSize:14},children:"Loading secure card form\u2026"}),Ws=(0,c.jsxs)("div",{onFocusCapture:s=>{["INPUT","SELECT","TEXTAREA","IFRAME"].includes(s.target.tagName)&&ar()},style:{backgroundColor:Ci,borderRadius:Ri,...Ho,padding:Ii,...Bc,display:"flex",flexDirection:"column"},children:[(0,c.jsx)("style",{children:`
|
|
30
|
+
`,ma=44,ya=180,$l=`flopay-card-enter ${ya}ms cubic-bezier(0, 0, 0.2, 1) both`,jl=`flopay-card-exit ${ya}ms cubic-bezier(0.4, 0, 0.2, 1) both`,Qd=`flopay-buttons-enter ${ya}ms cubic-bezier(0, 0, 0.2, 1) both`,eu=`flopay-buttons-exit ${ya}ms cubic-bezier(0.4, 0, 0.2, 1) both`;function tu(e){return e.gateway==="stripe"?"stripe":e.gateway==="paypal"||e.isPaypal?"paypal":void 0}function ss(e){if(!e.themeBundle&&!e.explicitPrimaryColor)return{backgroundColor:"white",color:"#262833",border:"1px solid #d1d5db",borderRadius:e.resolvedBorderRadius,boxShadow:"0 1px 2px rgba(0,0,0,0.04)"};let t=e.themeBundle?e.submitButtonStyle??{}:{};return{backgroundColor:e.resolvedPrimaryColor,color:t.color??"white",border:t.border??"none",borderRadius:t.borderRadius??e.resolvedBorderRadius,boxShadow:t.boxShadow}}var nu={visibility:"hidden",position:"absolute",pointerEvents:"none",width:"100%",height:0,overflow:"hidden"};function ru(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 es={width:"100%",minHeight:ma,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 ou(e){switch(e){case"paypal":return"PayPal";case"apple_pay":return"Apple Pay";case"google_pay":return"Google Pay";default:return"Card"}}function Vl(e){return e==="paypal"?"paypal":e==="apple_pay"?"apple_pay":"google_pay"}function ts(e){return e==="paypal"?"PayPal":(0,y.getStripeMethodDisplayName)(e)}function au(e){let t=(0,y.getPostalCodeExample)(e);return`Enter a valid ${(0,y.getPostalCodeLabel)(e)}${t?` (e.g. ${t})`:""}`}function iu(e,t,n){let r=(0,y.isPostalCodeSupported)(e),o=t.trim(),a=n&&r,l=a&&!o,d=a&&!!o&&!(0,y.isValidPostalCode)(e,o);return{visible:n,supported:r,required:a,empty:l,malformed:d}}function su(e,t){let n=e.trim(),r=t&&!n,o=t&&!!n&&!(0,y.isValidEmail)(n);return{required:t,empty:r,malformed:o,value:n}}function Wl(e,t){return t instanceof y.FloPayError?t:new y.FloPayError(t instanceof Error?t.message:`${ou(e)} before-click hook failed.`,"validation_error")}function Qi(){return(0,c.jsx)("style",{children:Zd})}function lu(e){return typeof e=="number"?`${e}px`:e}function nc(e,t){let n=e.availablePaymentMethods;return n&&t.some(r=>n[r])?"ready":"unavailable"}function rc({state:e,placeholderTestId:t,borderRadius:n=8,children:r}){return e==="unavailable"||e==="load_error"?null:(0,c.jsxs)("div",{style:{position:"relative",minHeight:44},children:[(0,c.jsx)("div",{"data-testid":t,"aria-hidden":e==="ready",style:{position:"absolute",inset:0,height:44,borderRadius:n,background:"#e5e7eb",animation:e==="ready"?void 0:"flopay-pulse 1.5s ease-in-out infinite",opacity:e==="ready"?0:1,transform:e==="ready"?"scale(0.985)":"scale(1)",transition:"opacity 140ms ease-out, transform 140ms ease-out",pointerEvents:"none"}}),(0,c.jsx)("div",{style:{minHeight:44,opacity:e==="ready"?1:0,transform:e==="ready"?"translateY(0)":"translateY(2px)",transition:"opacity 140ms ease-out, transform 140ms ease-out",pointerEvents:e==="ready"?"auto":"none"},children:r})]})}function Hl(e){return e!=="unavailable"&&e!=="load_error"}function oi(e){return(0,c.jsx)(du,{...e})}function Kl({sessionId:e,nonce:t,email:n,billingApiUrl:r,onTokenizedBody:o,onErrorChange:a,isProcessing:l=!1,onButtonClick:d,onDecline:u,onTechnicalFailure:p,runBeforeButtonClick:b,billingName:v,onBuyerIdentityReady:B,onLoadStateChange:I,placeholderBorderRadius:w,popupCapabilityOwner:h,externalTelemetryContext:O,presentationMode:G}){let T=Ur(),{emitInstrument:Y}=(0,i.useContext)(Zn),U=(0,Jt.useStripe)(),de=(0,Jt.useElements)(),X=(0,i.useMemo)(()=>Xa(dn(T),O),[O,T]),[he,Fe]=(0,i.useState)("loading");(0,i.useEffect)(()=>{I?.(he)},[he,I]);let[oe,je]=(0,i.useState)(!1),yt=(0,i.useRef)(!1),re=!(0,y.isValidEmail)(n?.trim())||!v?.trim(),{request:De,collect:ft,finish:ke}=So(),Oe=(0,i.useRef)(!1),be=(0,i.useRef)(null),me=(0,i.useRef)(null),[Ie,Ve]=(0,i.useState)(0),[rt,R]=(0,i.useState)(!1),We=(0,i.useRef)(!1),ye=(0,i.useRef)(new Map),{startAttempt:N,finishAttempt:ve,invalidateAttempt:ue,isAttemptInvalidated:He,isAttemptCurrent:Q,generationRef:ot}=na((q,fe,et)=>{p?.(q,fe,{...et,popupBlocked:et?.popupBlocked??Yr(fe),provider:"stripe",paymentMethodCategory:"paypal",presentationMode:G,terminalReason:"overlay_timeout"}),R(!0),Ve(V=>V+1)},{onHandoffObserved:()=>{h.markAvailable(),X?.log({name:"provider.popup.opened",stage:"overlay_open",...yr,attempt:ot.current})}});(0,i.useEffect)(()=>{rt&&me.current?.focus()},[rt,Ie]);let lt=(0,i.useCallback)(()=>{Ve(q=>q+1)},[]),Te=(0,i.useCallback)((q,fe,et)=>{ue(et),p?.("paypal",q,{code:fe,popupBlocked:Yr(q),provider:"stripe",paymentMethodCategory:"paypal",presentationMode:G}),R(!0),lt()},[ue,p,G,lt]),Le=(0,i.useCallback)(()=>{window.setTimeout(()=>{(be.current?.querySelector("iframe")??be.current)?.focus()},0)},[]);(0,i.useEffect)(()=>{We.current&&(We.current=!1,Le())},[Le,Ie]);let ct=(0,i.useCallback)(()=>{R(!1),a?.(null),Le()},[Le,a]);(0,i.useEffect)(()=>{if(!U||Oe.current)return;let[q,fe,et]=os();if(!q||!fe)return;let V=ec(fe);if(!V)return;Oe.current=!0;let xe=!0,bt=ua.get(fe);bt||(bt=et==="failed"?Promise.resolve(null):Promise.resolve().then(()=>U.retrievePaymentIntent(fe)),ua.set(fe,bt));let Ke={accountPatch:V.accountPatch,sessionId:V.sessionId,nonce:V.nonce},$=()=>{X?.error({errorCode:"REDIRECT_RESUME_FAILED",stage:"redirect_resume",...yr,requestCategory:"provider_sdk"})};return X?.log({name:"provider.redirect.resumed",stage:"redirect_resume",...yr}),(async()=>{try{je(!0);let f=await bt;if(!xe)return;if(f?.error){ua.delete(fe),$(),a?.(f.error.message??"Failed to retrieve PayPal payment status.");return}if(Kd(),ua.delete(fe),et==="failed"){let H="PayPal payment was declined. Please try again.";X?.terminal({outcome:"payment_declined",...yr,terminalReason:"provider_declined"}),a?.(H),u?.(cn("paypal",H));return}let P=f?.paymentIntent;if(P&&P.id!==q){$(),a?.("Failed to match the returned PayPal payment.");return}if(P&&(P.status==="requires_capture"||P.status==="succeeded")){let H=typeof P.payment_method=="string"?P.payment_method:P.payment_method?.id;o({id:H??P.id,type:"card",threeDSecureActionResultTokenId:P.id,isPaypal:!0},{...Ke,presentationMode:"redirect"})}else{let H="PayPal payment was not completed. Please try again.";X?.terminal({outcome:P?.status==="canceled"?"payment_cancelled":"payment_declined",...yr,terminalReason:P?.status==="canceled"?"cancelled":"provider_declined"}),a?.(H),u?.(cn("paypal",H))}}catch(f){if(!xe)return;ua.delete(fe),$(),a?.(f instanceof Error?f.message:"Failed to complete PayPal payment.")}finally{xe&&je(!1)}})(),()=>{xe=!1,Oe.current=!1}},[U,o,a,u,X]);let at=(0,i.useCallback)(async(q=!1)=>{let fe=b?await b("paypal"):{proceed:!0};if(!fe.proceed)return ye.current.delete(Ie),!1;let et=N("paypal");return ye.current.set(Ie,{generation:et,accountPatch:fe.accountPatch,sessionId:fe.sessionId,nonce:fe.nonce}),R(!1),X?.log({name:`provider.${q?"redirect.started":"handoff.requested"}`,stage:q?"redirect":"overlay_open",...yr,attempt:et}),d?.("paypal"),!0},[d,X,b,N,Ie]),Ae=(0,i.useCallback)(async q=>{if(l||oe||!await at()){q.reject();return}q.resolve()},[l,at,oe]),jt=(0,i.useCallback)(async q=>{if(!U||!de)return;let fe=ye.current.get(Ie);if(fe&&!Q(fe.generation)){ye.current.delete(Ie);return}if(!fe&&He()||fe&&!ve(fe.generation))return;fe||ve();let et=fe??null;if(ye.current.delete(Ie),!et&&b){let Je=await b("paypal");if(!Je.proceed){q.paymentFailed({reason:"fail",message:"PayPal checkout was cancelled."});return}et={accountPatch:Je.accountPatch,sessionId:Je.sessionId,nonce:Je.nonce}}let V=et?.sessionId??e,xe=et?.nonce??t,bt=await Jd({event:q,prepared:et,email:n,billingName:v,methodLabel:"PayPal",collect:ft});if(!bt){q.paymentFailed({reason:"fail",message:"Buyer details are required."});return}let Ke=bt.email,$={...et?.accountPatch,...Bn(bt,!0)};try{if(je(!0),a?.(null),!V||!(0,y.isValidEmail)(Ke))throw new Error("Missing sessionId or email for PayPal payment");await B?.(bt);let Je=U.createPaymentMethod,{error:f,paymentMethod:P}=await Je({type:"paypal"});if(f){Te(f,"stripe_paypal_create_payment_method_failed",fe?.generation),q.paymentFailed({reason:"fail"});return}let H=await ni(r,Y,V,xe??"",{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:"paypal",paymentMethodId:P?.id??null,intentKind:"payment"});if(H.provider!=="stripe")throw new Error("Invalid provider returned for PayPal intent");let ee=H.clientSecret,qe={return_url:as()};if(P?.id&&(qe.payment_method=P.id),!$t(pa,{clientSecret:ee,sessionId:V,nonce:xe,accountPatch:$})&&G==="redirect")throw new Error("Unable to save PayPal checkout progress. Please try again.");let{error:Ge,paymentIntent:Z}=await U.confirmPayment({clientSecret:ee,confirmParams:qe,redirect:"if_required"});if(Ge){if($t(pa),Zo(Ge)){let Ct=Ge.message??"Your payment was declined.";X?.terminal({outcome:"payment_declined",...yr,terminalReason:"provider_declined"}),a?.(Ct),u?.(cn("paypal",Ct,{code:_r(Ge),declineCode:ko(Ge)})),await ri({billingApiUrl:r,sessionId:V,nonce:xe,request:{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:"paypal",providerDeclineReason:_r(Ge)??"provider_declined"}})}else Te(Ge,"stripe_paypal_confirm_failed",fe?.generation);return}$t(pa);let it=typeof Z?.payment_method=="string"?Z.payment_method:Z?.payment_method?.id;o({id:it??Z?.id,type:"card",threeDSecureActionResultTokenId:Z?.id,isPaypal:!0},{accountPatch:$,paymentMethodCategory:"paypal",presentationMode:G,sessionId:V,nonce:xe});return}catch(Je){Te(Je,"stripe_paypal_failed",fe?.generation)}finally{je(!1)}},[U,de,e,t,n,v,ft,B,r,Y,o,a,u,b,Te,ve,Q,He,X,G,Ie]),Vt=(0,i.useCallback)(async()=>{if(!(yt.current||l||oe||!U||!de)){yt.current=!0,je(!0);try{if(!await at(!0))return;await jt({expressPaymentType:"paypal",paymentFailed:()=>{}})}finally{yt.current=!1,je(!1)}}},[de,jt,l,at,U,oe]),ut=G==="redirect"?(0,c.jsx)("button",{type:"button",disabled:l||oe,onClick:()=>{Vt()},style:{width:"100%",minHeight:ma,border:"1px solid #d1d5db",borderRadius:w??8,background:"#ffc439",color:"#111827",cursor:l||oe?"not-allowed":"pointer",fontSize:"1rem",fontWeight:700},children:"Pay with PayPal"}):(0,c.jsx)(Jt.ExpressCheckoutElement,{onReady:q=>Fe(nc(q,["paypal"])),onLoadError:()=>{Fe("load_error"),is(X,"paypal","paypal","provider_error")},onClick:Ae,onConfirm:jt,onCancel:()=>{let q=ye.current.get(Ie);ye.current.delete(Ie),X?.terminal({outcome:"payment_cancelled",...yr,terminalReason:"cancelled",...q?{attempt:q.generation}:{}}),ue(q?.generation),R(!1),We.current=!0,lt()},options:{buttonType:{paypal:"paypal"},billingAddressRequired:re,emailRequired:re,phoneNumberRequired:!1,shippingAddressRequired:!1,paymentMethods:{applePay:"never",googlePay:"never",paypal:"auto",link:"never"}}},Ie),Et=(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("div",{ref:be,tabIndex:-1,"data-testid":"flopay-paypal-focus-target",role:"group","aria-label":"PayPal payment method",style:{borderRadius:8,outlineOffset:4},children:[rt&&(0,c.jsx)("button",{ref:me,type:"button","data-testid":"flopay-paypal-retry-button",onClick:ct,style:es,children:"Try PayPal again"}),De&&(0,c.jsx)(wo,{identity:De.identity,methodLabel:De.methodLabel,onComplete:ke,onCancel:()=>ke(null)},De.id),(0,c.jsx)("div",{style:{display:De?"none":void 0},children:ut})]}),oe&&!De&&(0,c.jsx)(er,{status:"processing"})]});return G==="redirect"?Et:(0,c.jsx)(rc,{state:he,placeholderTestId:"flopay-paypal-placeholder",borderRadius:w,children:Et})}function Gl({sessionId:e,nonce:t,email:n,billingApiUrl:r,intentKind:o,expressMethods:a,onTokenizedBody:l,onErrorChange:d,onButtonClick:u,onDecline:p,onTechnicalFailure:b,runBeforeButtonClick:v,billingName:B,onBuyerIdentityReady:I,onLoadStateChange:w,placeholderBorderRadius:h,popupCapabilityOwner:O,externalTelemetryContext:G}){let T=Ur(),{emitInstrument:Y}=(0,i.useContext)(Zn),U=(0,Jt.useStripe)(),de=(0,Jt.useElements)(),X=(0,i.useMemo)(()=>Xa(dn(T),G),[G,T]),[he,Fe]=(0,i.useState)("loading");(0,i.useEffect)(()=>{w?.(he)},[he,w]);let[oe,je]=(0,i.useState)(!1),yt=(0,i.useRef)(!(0,y.isValidEmail)(n?.trim())||!B?.trim()).current,{request:re,collect:De,finish:ft}=So(),ke=(0,i.useRef)(null),Oe=(0,i.useRef)(null),[be,me]=(0,i.useState)(0),[Ie,Ve]=(0,i.useState)(!1),[rt,R]=(0,i.useState)(()=>ti(e,t)?"blocked":"idle"),[We,ye]=(0,i.useState)("google_pay"),N=(0,i.useRef)(null),ve=(0,i.useRef)(!0),ue=(0,i.useRef)(!1),He=(0,i.useRef)("google_pay"),Q=(0,i.useRef)("google_pay"),ot=(0,i.useRef)(null),lt=(0,i.useRef)(null),Te=(0,i.useRef)(new Set);(0,i.useEffect)(()=>(ve.current=!0,()=>{ve.current=!1;for(let $ of Te.current)window.clearTimeout($);Te.current.clear()}),[]);let Le=(0,i.useRef)(new Map),{startAttempt:ct,finishAttempt:at,invalidateAttempt:Ae,isAttemptInvalidated:jt,isAttemptCurrent:Vt,generationRef:ut}=na(($,Je,f)=>{b?.($,Je,{...f,popupBlocked:f?.popupBlocked??Yr(Je),provider:"stripe",paymentMethodCategory:"wallet",presentationMode:"popup",terminalReason:"overlay_timeout"}),ye($),Ve(!0),me(P=>P+1)},{onHandoffObserved:$=>{O.markAvailable(),X?.log({name:"provider.popup.opened",stage:"overlay_open",provider:"stripe",paymentMethodCategory:"wallet",attempt:ut.current,...$==="apple_pay"||$==="google_pay"?{walletType:$}:{}})}});(0,i.useEffect)(()=>{Ie&&Oe.current?.focus()},[Ie,be]);let Et=(0,i.useCallback)(()=>{me($=>$+1)},[]),q=(0,i.useCallback)(($,Je,f,P,H=!1)=>{Ae(P),b?.($,Je,{code:f,popupBlocked:Yr(Je),telemetryReported:H,provider:"stripe",paymentMethodCategory:"wallet",presentationMode:"popup"}),ye($),Ve(!0),Et()},[Ae,b,Et]),fe=(0,i.useCallback)(()=>{window.setTimeout(()=>{(ke.current?.querySelector("iframe")??ke.current)?.focus()},0)},[]);(0,i.useEffect)(()=>{ue.current&&(ue.current=!1,fe())},[fe,be]);let et=(0,i.useCallback)(()=>{Ve(!1),d?.(null),fe()},[fe,d]),V=(0,i.useCallback)(()=>{N.current?.()},[]);(0,i.useEffect)(()=>{let $=ti(e,t);if(!$)return;let Je=!1,f=!1,P=async()=>{if(!f){f=!0,Je||R("checking");try{let H=await Ul(U,$.clientSecret,Te.current);if(Je)return;let ee=Ji(H,$.providerObjectId,(0,y.isSetupIntentClientSecret)($.clientSecret));if(ee.kind==="confirmed"){if(!zl(e,t,$.clientSecret))return;N.current=null,R("idle"),l({id:ee.paymentMethodId,type:"card",threeDSecureActionResultTokenId:ee.intentId},{...$.accountPatch?{accountPatch:$.accountPatch}:{},paymentMethodCategory:"wallet",sessionId:e,nonce:t});return}if(ee.kind==="terminal"){Xi(e,t,$.clientSecret),N.current=null,R("idle"),ye($.paymentMethodType),Ve(!0),Et();return}R("blocked")}catch{Je||R("blocked")}finally{f=!1}}};return N.current=P,R("blocked"),()=>{Je=!0,N.current===P&&(N.current=null)}},[t,l,Et,e,U]);let xe=(0,i.useCallback)(async $=>{let Je=!1,f=Ce=>{Je||(Je=!0,$.paymentFailed({reason:"fail",...Ce?{message:Ce}:{}}))};if(!U||!de){f();return}let P=Le.current.get(be);if(P&&!Vt(P.generation)){Le.current.delete(be),f();return}if(!P&&jt()){f();return}if(P&&!at(P.generation)){f();return}P||at();let H=$.expressPaymentType??P?.method??He.current,ee=P??null,qe=Vl(H),vt;H==="apple_pay"?vt="apple_pay":H==="google_pay"&&(vt="google_pay");let Ge=P?.generation??ut.current,Z=X,it=Z?.now()??globalThis.performance?.now()??Date.now(),Ct=new AbortController,Nt=!1,Ne=!1,Ft=null,ze=e,Fn="processing",Rn="other",Mt="provider_runtime",wn,Dn=new Promise((Ce,St)=>{wn=St}),On=window.setTimeout(()=>{Nt=!0,Ct.abort(),wn(Qa)},Ud),rn=async(Ce,St,Tt)=>{Fn=Ce,Rn=St,Mt=St==="intent_create"||St==="session_claim"?"transport_error":"provider_runtime";let vn=Z?.now()??globalThis.performance?.now()??Date.now();try{return await Promise.race([Tt,Dn])}finally{let Bt=Z?.now()??globalThis.performance?.now()??Date.now();Z?.performance({stage:Ce,durationMs:Math.max(0,Bt-vn),durationMode:"machine",requestCategory:St,paymentMethodCategory:"wallet",provider:"stripe",...Nt?{statusClass:"timeout"}:{}})}};try{if(je(!0),d?.(null),!ee&&v){let Re=await rn("processing","other",v(qe));if(!Re.proceed){f();return}ee={accountPatch:Re.accountPatch,sessionId:Re.sessionId,nonce:Re.nonce}}let Ce=ee?.sessionId??e;ze=Ce;let St=ee?.nonce??t,Tt=ot.current??ee?.accountPatch,vn=tc({event:$,fallbackEmail:Tt?.email??n,fallbackName:[Tt?.firstName,Tt?.lastName].join(" ").trim()||B});if(!(0,y.isValidEmail)(vn.email)){f("Buyer details are required."),De(ts(H),vn).then(Re=>{Re&&(ot.current=Re)});return}ot.current=null;let Bt={...ee?.accountPatch,...Bn(vn,!0)};await rn("processing","session_claim",Promise.resolve(I?.(vn)));let{error:Vn}=await rn("tokenization","provider_sdk",de.submit());if(Vn){f(),q(H,Vn,"stripe_wallet_submit_failed",P?.generation);return}if(!Ce)throw new Error("Missing sessionId or email for payment.");let pn={provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:H,paymentMethodId:null,intentKind:o},Wt=JSON.stringify({sessionId:Ce,nonce:St??"",request:pn}),an=lt.current,Wn=an?.retryIdentity===Wt?an.authorizationAttemptId:(0,y.randomUuidV4)();lt.current={authorizationAttemptId:Wn,retryIdentity:Wt};let mn=await rn("processing","intent_create",ni(r,Y,Ce,St??"",{...pn,authorizationAttemptId:Wn},{signal:Ct.signal}));if(mn.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let wt=mn.clientSecret,Zt=jd({createdAt:Date.now(),sessionId:Ce,...St?{nonce:St}:{},clientSecret:wt,providerObjectId:mn.providerObjectId,paymentMethodType:H,accountPatch:Bt});window.clearTimeout(On),Ne=!0,Z?.performance({stage:"callback",durationMs:Math.max(0,(Z?.now()??globalThis.performance?.now()??Date.now())-it),durationMode:"machine",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",provider:"stripe"});let yn=Z?.now()??globalThis.performance?.now()??Date.now(),Dt={stage:"provider_confirmation",provider:"stripe",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",...vt?{walletType:vt}:{},attempt:Ge},Qt=!1,Ht=null;Z?.log({name:"payment.provider_confirmation.started",...Dt}),Ft=window.setTimeout(()=>{Ft!==null&&Te.current.delete(Ft),Qt=!0;let Re=Z?.now()??globalThis.performance?.now()??Date.now();Z?.error({errorCode:"PROVIDER_RUNTIME_FAILED",...Dt,operationOutcome:"watchdog_expired",durationMs:Math.max(0,Re-yn),statusClass:"timeout",failureCategory:"provider_runtime",terminalReason:"provider_error"}),Z?.flush?.().catch(()=>{}),Ht?.()},qd),Te.current.add(Ft);let fn=(Re,ht)=>{Ft!==null&&(window.clearTimeout(Ft),Te.current.delete(Ft),Ft=null);let ie=Z?.now()??globalThis.performance?.now()??Date.now(),F=Math.max(0,ie-yn),Ze=Re;Qt&&(Re==="resolved"?Ze="resolved_late":Re==="returned_error"?Ze="returned_error_late":Ze="rejected_late");let se=ht??(Re==="resolved"?"approved":"provider_error");return Z?.log({name:"payment.provider_confirmation.returned",...Dt,operationOutcome:Ze,terminalReason:se}),Z?.performance({...Dt,durationMs:F,durationMode:"buyer",operationOutcome:Ze,terminalReason:se}),{durationMs:F,operationOutcome:Ze,terminalReason:se}},gt=!1,te=!1,Ln=Re=>{if(!Re||typeof Re!="object")return null;let ht=Re;if(ht.error)return null;let ie=ht.setupIntent??ht.paymentIntent,F=Ji(ie??null,void 0,!!ht.setupIntent);return F.kind==="confirmed"?F:null},Nn=Re=>{if(gt||P&&ut.current!==P.generation)return;let ht=Ln(Re);if(!ht)return;if(Zt&&!zl(Ce,St,wt)){gt=!0;return}let{intentId:ie,paymentMethodId:F}=ht;gt=!0,te=!0,lt.current=null,N.current=null,ve.current&&(R("idle"),je(!1));let Ze=`${Xl}:${Ce}`;$t(Ze,{createdAt:Date.now(),sessionId:Ce,nonce:St,accountPatch:Bt,paymentMethodId:F,providerIntentId:ie,paymentMethodType:H});try{l({id:F,type:"card",threeDSecureActionResultTokenId:ie},{accountPatch:Bt,paymentMethodCategory:"wallet",sessionId:Ce,nonce:St})}finally{$t(Ze)}},hr=!1;Ht=async()=>{if(!(hr||gt||te)){hr=!0,ve.current&&R("checking");try{let Re=await Ul(U,wt,Te.current);if(gt||te)return;let ht=(0,y.isSetupIntentClientSecret)(wt),ie=Ji(Re,mn.providerObjectId,ht);if(ie.kind==="confirmed"){Nn(ht?{setupIntent:Re}:{paymentIntent:Re});return}if(ie.kind==="terminal"){if(te=!0,Xi(Ce,St,wt),lt.current=null,N.current=null,!ve.current)return;R("idle"),f(),q(H,new Error("Wallet confirmation did not complete."),"stripe_wallet_confirmation_terminal",P?.generation,!0);return}ve.current&&!te&&(R("blocked"),je(!1))}catch{ve.current&&!te&&(R("blocked"),je(!1))}finally{hr=!1}}},N.current=Ht;let Cn,sn;try{let Re=await((0,y.isSetupIntentClientSecret)(wt)?U.confirmSetup({elements:de,clientSecret:wt,redirect:"if_required"}):U.confirmPayment({elements:de,clientSecret:wt,redirect:"if_required"}));if(!Re||typeof Re!="object"||(Cn=Re,!Cn.error&&!Ln(Cn)))throw Yi;sn=fn(Cn.error?"returned_error":"resolved",Cn.error&&Zo(Cn.error)?"provider_declined":void 0)}catch(Re){let ht=Re===Yi,ie=fn(ht?"returned_error":"rejected");if(Z?.error({...ht?{errorCode:"CONFIGURATION_INVALID",failureCategory:"invalid_response"}:Mi(Re),...Dt,operationOutcome:ie.operationOutcome,durationMs:ie.durationMs,statusClass:"unknown",terminalReason:ie.terminalReason}),!ve.current||gt)return;await Ht?.();return}let _n=Cn.error;if(_n){if(!ve.current||gt)return;if(Zo(_n)){te=!0,Xi(Ce,St,wt),lt.current=null,N.current=null,R("idle");let Re=_n.message??"Your payment was declined.";f(Re),d?.(Re),p?.(cn(qe,Re,{code:_r(_n),declineCode:ko(_n)})),ri({billingApiUrl:r,sessionId:Ce,nonce:St,request:{provider:"stripe",paymentMethodCategory:"wallet",paymentMethodType:H,providerDeclineReason:_r(_n)??"provider_declined",...mn.intentKind==="payment"&&mn.providerObjectId.startsWith("pi_")?{providerIntentId:mn.providerObjectId}:{}}})}else Z?.error({...Mi(_n),...Dt,operationOutcome:sn.operationOutcome,durationMs:sn.durationMs,statusClass:"unknown",terminalReason:sn.terminalReason}),await Ht?.();return}if(Nn(Cn),!gt)throw new Error("Invalid provider returned for APM intent")}catch(Ce){if(Ce===Qa){let St=Z?.now()??globalThis.performance?.now()??Date.now();Z?.error({errorCode:Wd(Rn),stage:Fn,requestCategory:Rn,paymentMethodCategory:"wallet",provider:"stripe",...vt?{walletType:vt}:{},operationOutcome:"watchdog_expired",checkoutSessionId:ze,durationMs:Math.max(0,St-it),statusClass:"timeout",failureCategory:Mt,attempt:Ge,terminalReason:"provider_error"}),Z?.flush?.().catch(()=>{})}f(),q(H,Ce,Ce===Qa?"stripe_wallet_authorization_timeout":"stripe_wallet_failed",P?.generation,Ce===Qa)}finally{if(window.clearTimeout(On),Ft!==null&&(window.clearTimeout(Ft),Te.current.delete(Ft)),!Ne){let Ce=Z?.now()??globalThis.performance?.now()??Date.now();Z?.performance({stage:"callback",durationMs:Math.max(0,Ce-it),durationMode:"machine",requestCategory:"provider_sdk",paymentMethodCategory:"wallet",provider:"stripe",...Nt?{statusClass:"timeout"}:{}})}ve.current&&je(!1)}},[U,de,e,t,n,B,De,I,r,Y,o,l,d,p,v,q,at,Vt,jt,ut,X,be]),bt=(0,i.useMemo)(()=>{let $=["applePay","googlePay","paypal","link","amazonPay","klarna"],Je=new Set(["applePay","googlePay"]),f=new Set(a.map(y.stripeExpressMethodToOptionKey)),P={};for(let H of $)f.has(H)?P[H]=Je.has(H)?"always":"auto":P[H]="never";return P},[a]),Ke=(0,i.useMemo)(()=>a.map(y.stripeExpressMethodToOptionKey),[a]);return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(rc,{state:he,placeholderTestId:"flopay-wallet-placeholder",borderRadius:h,children:(0,c.jsxs)("div",{ref:ke,tabIndex:-1,"data-testid":"flopay-wallet-focus-target",role:"group","aria-label":"Wallet payment methods",style:{borderRadius:8,outlineOffset:4},children:[Ie&&(0,c.jsxs)("button",{ref:Oe,type:"button","data-testid":"flopay-wallet-retry-button",onClick:et,style:es,children:["Try ",ts(We)," again"]}),rt!=="idle"&&(0,c.jsxs)("div",{role:"status","aria-live":"polite",children:[(0,c.jsx)("p",{children:"We are still confirming your payment. Check its status before trying again."}),(0,c.jsx)("button",{type:"button",onClick:V,disabled:rt==="checking",style:es,children:rt==="checking"?"Checking payment status\u2026":"Check payment status"})]}),re&&(0,c.jsx)(wo,{identity:re.identity,methodLabel:re.methodLabel,onComplete:ft,onCancel:()=>ft(null)},re.id),rt==="idle"&&(0,c.jsx)("div",{style:{display:re?"none":void 0},children:(0,c.jsx)(Jt.ExpressCheckoutElement,{onReady:$=>{Fe(nc($,Ke))},onLoadError:$=>{Fe("load_error"),is(X,"stripe","wallet","provider_error")},onClick:async $=>{He.current=$.expressPaymentType,Q.current=Vl($.expressPaymentType);let Je=!0,f=window.setTimeout(()=>{Je=!1,$.reject()},zd),P=v?await v(Q.current):{proceed:!0};if(window.clearTimeout(f),!Je)return;if(!P.proceed){Le.current.delete(be),$.reject();return}let H=ct($.expressPaymentType);Le.current.set(be,{generation:H,method:$.expressPaymentType,accountPatch:P.accountPatch,sessionId:P.sessionId,nonce:P.nonce}),Ve(!1),X?.log({name:"provider.handoff.requested",stage:"overlay_open",provider:"stripe",paymentMethodCategory:"wallet",attempt:H,...$.expressPaymentType==="apple_pay"||$.expressPaymentType==="google_pay"?{walletType:$.expressPaymentType}:{}}),u?.(Q.current),$.resolve()},onConfirm:xe,onCancel:()=>{let $=Le.current.get(be);Le.current.delete(be),X?.terminal({outcome:"payment_cancelled",provider:"stripe",paymentMethodCategory:"wallet",terminalReason:"cancelled",...$?{attempt:$.generation}:{}}),Ae($?.generation),lt.current=null,Ve(!1),ue.current=!0,Et()},options:{buttonType:{applePay:"plain",googlePay:"plain"},paymentMethods:bt,emailRequired:yt,billingAddressRequired:yt,layout:{maxColumns:1,overflow:"never"}}},be)})]})}),oe&&(0,c.jsx)(er,{status:"processing"})]})}function oc(e,t){return{...e,paymentMethodTypes:[t],...t==="revolut_pay"||t==="sepa_debit"||t==="us_bank_account"?{setupFutureUsage:"off_session"}:null}}function cu({method:e,themeId:t,submitting:n=!1,disabled:r=!1,highlighted:o=!1,hasNextStep:a=!1,onClick:l,backgroundColor:d,borderColor:u,textColor:p,borderRadius:b,fontFamily:v}){let B=(0,y.resolveStripeMethodBrandVariant)(e,t),I=_l[e],[w,h]=(0,i.useState)(!1),O=!!I&&!w,G=B?.backgroundColor??d??"#ffffff",T=B?.borderColor??u??"#d1d5db",Y=B?.textColor??p??"#262833";return(0,c.jsx)("button",{type:"button","data-testid":`flopay-stripe-method-button-${e}`,"data-method":e,onClick:()=>{!n&&!r&&l()},disabled:n||r,"aria-busy":n||void 0,style:{position:"relative",width:"100%",boxSizing:"border-box",height:ma,padding:"0 1rem",backgroundColor:G,color:Y,border:`1px solid ${T}`,borderRadius:b??8,fontSize:"0.95rem",fontWeight:600,fontFamily:v,cursor:n||r?"not-allowed":"pointer",opacity:r&&!n?.55:1,animation:n?"flopay-pulse 1.5s ease-in-out infinite":void 0,display:"flex",alignItems:"center",justifyContent:"center",gap:8,transition:"transform 0.1s, opacity 140ms ease-out, border-color 140ms ease-out",boxShadow:o?"0 0 0 2px rgba(74, 73, 255, 0.15)":void 0},children:n?(0,c.jsx)("span",{style:{margin:"0 auto"},children:`Connecting to ${(0,y.getStripeMethodDisplayName)(e)}\u2026`}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:(0,y.hasVendoredStripeMethodLogo)(e)?8:0},children:[O?(0,c.jsx)("img",{src:I,alt:"","aria-hidden":"true",onError:()=>h(!0),loading:"lazy",decoding:"async",width:30,height:20,style:{width:30,height:20,flexShrink:0,borderRadius:3,objectFit:"contain",display:"inline-flex"}}):null,!O&&B?.logoSvg?(0,c.jsx)("span",{"aria-hidden":"true",style:{width:30,height:20,flexShrink:0,display:"inline-flex",borderRadius:3,overflow:"hidden"},dangerouslySetInnerHTML:{__html:B.logoSvg}}):null,(0,c.jsx)("span",{children:(0,y.getStripeMethodDisplayName)(e)})]}),a&&(0,c.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:Y,strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",style:{position:"absolute",right:"1rem",top:"50%",transform:"translateY(-50%)",flexShrink:0,opacity:.7},"aria-hidden":"true",children:(0,c.jsx)("path",{d:"M9 18l6-6-6-6"})})]})})}function ns({method:e,sessionId:t,nonce:n,email:r,billingName:o,onBuyerIdentityReady:a,billingApiUrl:l,onTokenizedBody:d,onErrorChange:u,onDecline:p,onCancel:b,runBeforeButtonClick:v,onButtonClick:B,isProcessing:I,submitButtonColor:w,submitButtonBorderRadius:h,submitButtonStyle:O,errorText:G}){let T=Ur(),{emitInstrument:Y}=(0,i.useContext)(Zn),U=(0,Jt.useStripe)(),de=(0,Jt.useElements)(),[X,he]=(0,i.useState)(!1),Fe=(0,i.useRef)(!1),[oe,je]=(0,i.useState)(!1),[yt,re]=(0,i.useState)("loading"),[De,ft]=(0,i.useState)(""),ke=!(0,y.isValidEmail)(r?.trim()),Oe=!ke||(0,y.isValidEmail)(De.trim()),be=(0,i.useCallback)(async()=>{if(!U||!de||I||Fe.current||!oe)return;Fe.current=!0,he(!0);let me=v?await v("card"):{proceed:!0};if(!me.proceed){Fe.current=!1,he(!1);return}B?.("card");let Ie=me.sessionId??t,Ve=me.nonce??n,rt=to(o?.trim()),R=Bn({email:me.accountPatch?.email?.trim()||r?.trim()||De.trim(),firstName:me.accountPatch?.firstName?.trim()||rt.firstName,lastName:me.accountPatch?.lastName?.trim()||rt.lastName}),We=R.email,ye=Bn({...me.accountPatch,...R});try{if(u?.(null),!(0,y.isValidEmail)(We))throw new Error("A valid email address is required for payment.");await a?.(R);let N=await de.submit();if(N.error){u?.(N.error.message??"Payment failed.");return}let ve=[R.firstName,R.lastName].filter(Boolean).join(" "),ue=await U.createPaymentMethod({elements:de,params:{billing_details:{email:We,...ve?{name:ve}:{}}}});if(ue.error||!ue.paymentMethod){u?.(ue.error?.message??"Failed to create payment method.");return}let He=ue.paymentMethod;if(!Ie||!We)throw new Error("Missing sessionId or email for payment.");let Q=He.type||e,ot=await ni(l,Y,Ie,Ve??"",{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:Q,paymentMethodId:null,intentKind:"payment"});if(ot.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let lt=ot.clientSecret;$t(Tr,{clientSecret:lt,sessionId:Ie,nonce:Ve,accountPatch:ye,paymentMethodId:He.id,paymentMethodType:He.type??e,gateway:"stripe"});let{error:Te,paymentIntent:Le}=await U.confirmPayment({clientSecret:lt,confirmParams:{return_url:window.location.href,payment_method:He.id},redirect:"if_required"});if(Te){$t(Tr);let Ae=Te.message??"Payment failed.";u?.(Ae),p?.(cn("card",Ae,{code:Te.code})),await ri({billingApiUrl:l,sessionId:Ie,nonce:Ve,request:{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:e,providerDeclineReason:Te.code??"provider_declined"}});return}let ct=Le?.status;if(!Xo(ct)){$t(Tr);let Ae=ct==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";u?.(Ae),p?.(cn("card",Ae,{code:ct??"missing_payment_intent"}));return}$t(Tr);let at=typeof Le?.payment_method=="string"?Le.payment_method:Le?.payment_method?.id;d({id:at??He.id,type:"card",threeDSecureActionResultTokenId:Le?.id,gateway:"stripe",paymentMethodType:He.type??e},{accountPatch:ye,paymentMethodCategory:"apm",sessionId:Ie,nonce:Ve})}catch(N){u?.(N instanceof Error?N.message:"Payment failed. Please try again.")}finally{Fe.current=!1,he(!1)}},[U,de,I,oe,v,B,t,n,r,o,De,a,l,Y,e,d,u,p]);return(0,c.jsxs)("div",{"data-testid":`flopay-stripe-method-form-${e}`,style:{display:"flex",flexDirection:"column"},children:[ke&&(0,c.jsx)("div",{"data-testid":"flopay-apm-identity-fields",style:{display:"flex",flexDirection:"column",gap:"0.75rem",marginBottom:"0.75rem"},children:ke&&(0,c.jsxs)("label",{style:{display:"flex",flexDirection:"column",gap:"0.375rem"},children:["Email address",(0,c.jsx)("input",{type:"email",autoComplete:"email",required:!0,value:De,onChange:me=>ft(me.target.value),style:{minHeight:42,padding:"0 0.75rem",border:"1px solid #d1d5db",borderRadius:6}})]})}),(0,c.jsx)(Jt.PaymentElement,{onReady:()=>re("ready"),onLoadError:()=>{re("load_error"),is(dn(T),"stripe","apm")},onChange:me=>{je(!!me.complete)},options:{layout:{type:"accordion",defaultCollapsed:!1,radios:"never"},fields:{billingDetails:{email:"never"}},defaultValues:{billingDetails:{...o?.trim()?{name:o.trim()}:{},...(0,y.isValidEmail)(r?.trim())?{email:r?.trim()}:{}}}}}),(0,c.jsx)("button",{type:"button","data-testid":`flopay-stripe-method-pay-${e}`,onClick:()=>{be()},disabled:!oe||!Oe||X||I||yt!=="ready",style:{width:"100%",marginTop:"0.75rem",padding:"0.875rem",backgroundColor:w,color:"white",border:"none",borderRadius:h,fontSize:"1rem",fontWeight:600,cursor:!oe||!Oe||X||I||yt!=="ready"?"not-allowed":"pointer",opacity:!oe||!Oe||X||I||yt!=="ready"?.5:1,transition:"opacity 120ms ease-out",...O??{}},children:X?"Processing\u2026":`Pay with ${(0,y.getStripeMethodDisplayName)(e)}`}),G&&(0,c.jsx)(Ro,{margin:"0.75rem 0 0",children:G})]})}function Yl({sessionId:e,nonce:t,email:n,billingName:r,onBuyerIdentityReady:o,billingApiUrl:a,paymentElementMethods:l,stripeInstance:d,paymentElementBaseOptions:u,onTokenizedBody:p,onErrorChange:b,onButtonClick:v,onDecline:B,runBeforeButtonClick:I,onLoadStateChange:w,isProcessing:h=!1,submitButtonColor:O="#4A49FF",submitButtonBorderRadius:G=8,submitButtonStyle:T,buttonAppearance:Y,themeId:U,onExpandApm:de,expandedApmMethod:X}){let{emitInstrument:he}=(0,i.useContext)(Zn),[Fe,oe]=(0,i.useState)(null),[je,yt]=(0,i.useState)(null),re=(0,i.useRef)(!1),{request:De,collect:ft,finish:ke}=So();(0,i.useEffect)(()=>{l.length>0&&d?w?.("ready"):d||w?.("loading")},[l.length,d,w]);let Oe=(0,i.useCallback)(async R=>{if(!d||re.current||h)return;re.current=!0,yt(R);let We=I?await I("card"):{proceed:!0};if(!We.proceed){re.current=!1,yt(null);return}v?.("card");let ye=We.sessionId??e,N=We.nonce??t,ve=to([We.accountPatch?.firstName,We.accountPatch?.lastName].filter(Boolean).join(" ")||r),ue=Bn({email:We.accountPatch?.email?.trim()||n?.trim(),firstName:We.accountPatch?.firstName?.trim()||ve.firstName,lastName:We.accountPatch?.lastName?.trim()||ve.lastName});if(!(0,y.isValidEmail)(ue.email)){yt(null);let ot=await ft((0,y.getStripeMethodDisplayName)(R),ue);if(!ot){re.current=!1;return}ue=ot,yt(R)}let He=ue.email,Q=Bn({...We.accountPatch,...ue});try{if(b?.(null),!ye||!(0,y.isValidEmail)(He))throw new Error("Missing sessionId or email for payment.");await o?.(ue);let ot=await ni(a,he,ye,N??"",{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:R,paymentMethodId:null,intentKind:"payment"});if(ot.provider!=="stripe")throw new Error("Invalid provider returned for APM intent");let lt=ot.clientSecret;$t(Tr,{clientSecret:lt,sessionId:ye,nonce:N,accountPatch:Q,paymentMethodType:R,gateway:"stripe"});let{error:Te,paymentIntent:Le}=await d.confirmPayment({clientSecret:lt,confirmParams:{return_url:window.location.href,payment_method_data:{type:R,billing_details:{name:[ue.firstName,ue.lastName].filter(Boolean).join(" "),...He?{email:He}:{}}}},redirect:"if_required"});if(Te){$t(Tr);let Ae=Te.message??"Payment failed.";b?.(Ae),B?.(cn("card",Ae,{code:Te.code})),await ri({billingApiUrl:a,sessionId:ye,nonce:N,request:{provider:"stripe",paymentMethodCategory:"apm",paymentMethodType:R,providerDeclineReason:Te.code??"provider_declined"}});return}let ct=Le?.status;if(!Xo(ct)){$t(Tr);let Ae=ct==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";b?.(Ae),B?.(cn("card",Ae,{code:ct??"missing_payment_intent"}));return}$t(Tr);let at=typeof Le?.payment_method=="string"?Le.payment_method:Le?.payment_method?.id;p({id:at??Le?.id,type:"card",threeDSecureActionResultTokenId:Le?.id,gateway:"stripe",paymentMethodType:R},{accountPatch:Q,paymentMethodCategory:"apm",sessionId:ye,nonce:N})}catch(ot){b?.(ot instanceof Error?ot.message:"Payment failed. Please try again.")}finally{re.current=!1,yt(null)}},[d,h,I,v,e,t,n,ft,a,he,r,o,p,b,B]),[be,me]=(0,i.useState)(null),Ie=de?X??null:be,Ve=(0,i.useCallback)(R=>{re.current||h||Ie&&Ie!==R||((0,y.needsStripeMethodExplicitConfirm)(R)?de?de(R):me(R):Oe(R))},[Ie,h,Oe,de]),rt=(0,i.useMemo)(()=>be?oc(u,be):null,[be,u]);return(0,c.jsx)("div",{"data-testid":"flopay-stripe-payment-element-region",style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:De?(0,c.jsx)(wo,{identity:De.identity,methodLabel:De.methodLabel,onComplete:ke,onCancel:()=>ke(null)},De.id):l.map(R=>{let We=X===R,ye=je===R,N=je!==null&&je!==R||X!=null&&X!==R;return(0,c.jsxs)(i.default.Fragment,{children:[(0,c.jsx)(cu,{method:R,themeId:U,submitting:ye,disabled:N,highlighted:We,hasNextStep:(0,y.needsStripeMethodExplicitConfirm)(R),onClick:()=>Ve(R),backgroundColor:Y?.backgroundColor,borderColor:Y?.borderColor,textColor:Y?.textColor,borderRadius:Y?.borderRadius,fontFamily:Y?.fontFamily}),!de&&be===R&&rt&&d&&(0,c.jsx)(Jt.Elements,{stripe:d,options:rt,children:(0,c.jsx)(ns,{method:R,sessionId:e,nonce:t,email:n,billingName:r,onBuyerIdentityReady:o,billingApiUrl:a,onTokenizedBody:p,onErrorChange:b,onDecline:B,onCancel:()=>me(null),runBeforeButtonClick:I,onButtonClick:v,isProcessing:h,submitButtonColor:O,submitButtonBorderRadius:G,submitButtonStyle:T})},R)]},R)})})}function du({sessionId:e,nonce:t,billingApiUrl:n,telemetry:r,email:o,userId:a,onComplete:l,onError:d,onDecline:u,onTokenizedBody:p,firstName:b,lastName:v,chv:B,className:I,submitLabel:w,isProcessing:h,error:O,onErrorChange:G,showPayPal:T=!0,showStripe:Y=!0,walletPresentation:U="auto",enabledPaymentMethods:de,enabledPaymentMethodCountries:X,showApplePay:he=!0,showGooglePay:Fe=!0,layout:oe="default",theme:je,buttonsTheme:yt,buttonsStyles:re,appearance:De,cardButtonContent:ft,cardBackButtonContent:ke,cardTitleContent:Oe,showSecurityFooter:be,onButtonClick:me,onBeforeButtonClick:Ie,onBuyerIdentityReady:Ve,enableAVS:rt,cardFieldOrder:R,cardPreFormSlot:We,avsLayout:ye="row",country:N,zip:ve,addressLine1:ue,addressLine2:He,city:Q,state:ot,onCountryChange:lt,onZipChange:Te,avsCheck:Le,checkoutType:ct,checkoutLayout:at,totalAmount:Ae=0,currency:jt="usd",initialCardOpen:Vt=!1,directPaypal:ut,isSubscription:Et=!1,session:q,dataAttachmentPending:fe=!1,dataAttachmentRequiresIdentity:et=!1,debug:V=!1}){let xe=Ur(),bt=Fa(),Ke=(0,i.useContext)(pr),{emitInstrument:$}=(0,i.useContext)(Zn),Je=(0,i.useRef)(null);Je.current||(Je.current=La());let f=Je.current,[,P]=(0,i.useState)(0),H=(0,i.useRef)(null);H.current||(H.current=ea());let ee=H.current,qe=(0,i.useMemo)(()=>({browser:ee,capability:f,presentationMode:"popup"}),[ee,f]),vt=q??Ke.session,Ge=vt?.gateways?.paypal?.providerObjectType??ut?.providerObjectType,Z=fe||Ke.claimPending===!0,it=et||Ke.claimRequiresIdentity===!0,Ct=Z&&!it,Nt=pl(),Ne=n||Nt,[Ft,ze]=(0,i.useState)(!1),[Fn,Rn]=(0,i.useState)(null),[Mt,wn]=(0,i.useState)(N??""),[Dn,On]=(0,i.useState)(ve??""),[rn,Ce]=(0,i.useState)(ue??""),[St,Tt]=(0,i.useState)(He??""),[vn,Bt]=(0,i.useState)(Q??""),[Vn,pn]=(0,i.useState)(ot??""),[Wt,an]=(0,i.useState)(""),[Wn,mn]=(0,i.useState)({}),wt=(0,i.useRef)(ve??""),Zt=(0,i.useRef)(N??""),yn=(0,i.useRef)(ue??""),Dt=(0,i.useRef)(He??""),Qt=(0,i.useRef)(Q??""),Ht=(0,i.useRef)(ot??""),fn=(0,i.useRef)(""),gt=(0,i.useRef)({});(0,i.useEffect)(()=>{let s=(S,K,Ee,ne,Se)=>{if(gt.current[S])return;let Xt=K?.trim();!Xt||Xt===Ee.current||(Ee.current=Xt,ne(Xt),Se?.(Xt))};s("country",N,Zt,wn,lt),s("zip",ve,wt,On,Te),s("addressLine1",ue,yn,Ce),s("addressLine2",He,Dt,Tt),s("city",Q,Qt,Bt),s("state",ot,Ht,pn)},[N,ve,ue,He,Q,ot,lt,Te]);let te=(0,i.useMemo)(()=>(0,y.resolveAVSConfig)(rt),[rt]),Ln=te!==null,Nn=(0,i.useMemo)(()=>(0,y.isAuthorizationOnlySession)(q),[q]),hr=!!q?.vault?.html,Cn=!!q?.gateways?.pcivault,sn=Ti(q),Re=!!(q?.gateways?.stripe?.enabledPaymentMethods??de)?.includes("card")||Wr(q),ht=hr||Re||Cn,ie=!!(Y&&ht&&e),[F,Ze]=(0,i.useState)(()=>oe!=="buttons"||Vt?e??null:null),[se,Hn]=(0,i.useState)(0),gn=oe!=="buttons"||Vt||!!e&&F===e,Kt=q?.captureMethod,Kn=(0,i.useRef)(xe);(0,i.useEffect)(()=>{Kn.current=xe},[xe]);let[nt,jr]=(0,i.useState)(null);(0,i.useEffect)(()=>{if(!ie||!e||!gn){jr(null);return}let s=Kn.current?Kn.current.cardCapture({sessionId:e,captureMethod:Kt}):new fr.PciVaultCardCapture({sessionId:e,captureMethod:Kt,billingApiUrl:Ne,telemetry:r});return jr({sessionId:e,captureMethod:Kt,billingApiUrl:Ne,telemetry:r,capture:s}),()=>{s.unmount()}},[ie,e,gn,Kt,Ne,r]);let Gt=ie&&e&&gn&&nt?.sessionId===e&&nt.captureMethod===Kt&&nt.billingApiUrl===Ne&&nt.telemetry===r?nt.capture:null,hn=(0,i.useMemo)(()=>{let s=Mt,S=te?(0,y.isAVSFieldVisible)(te.postal_code,s):!1;return iu(s,Dn,S)},[te,Mt,Dn]),{avsInvalid:Mr,invalidAvsFields:Br}=(0,i.useMemo)(()=>{let s={line1:!1,city:!1,state:!1,zip:!1};if(!ie||!te)return{avsInvalid:!1,invalidAvsFields:s};let S=Mt,K=(Se,Xt)=>(0,y.isAVSFieldVisible)(Se,S)&&!Xt.trim(),Ee={line1:K(te.address_line_1,rn),city:K(te.city,vn),state:K(te.state,Vn),zip:hn.empty||hn.malformed};return{avsInvalid:Ee.line1||Ee.city||Ee.state||Ee.zip,invalidAvsFields:Ee}},[ie,te,Mt,rn,vn,Vn,hn]),[En,en]=(0,i.useState)(!1),[br,Tn]=(0,i.useState)(!1),[Fr,An]=(0,i.useState)(!1),[Pr,vr]=(0,i.useState)({line1:!1,city:!1,state:!1}),rr=(0,i.useRef)(!1),Gn=(0,i.useRef)({email:!1,line1:!1,city:!1,state:!1,zip:!1}),Yn=(0,i.useRef)(!1),xt=(0,i.useCallback)(s=>{Gn.current[s]=!0,Yn.current=!0},[]),or=(0,i.useCallback)(s=>!rr.current&&Gn.current[s],[]),kn=(0,i.useCallback)(s=>{or(s)&&vr(S=>S[s]?S:{...S,[s]:!0})},[or]),[Xn,Cr]=(0,i.useState)(()=>Zi(q?.vault)),[dt,on]=(0,i.useState)(Vt&&ht?"card":"buttons"),[tn,Dr]=(0,i.useState)(null),zn=dt==="expanding"||dt==="card",Vr=q?.gateways?.stripe&&!sn?"stripe":void 0,ar=(0,i.useCallback)(()=>{$?.({class:"card_surface",provider:Vr})},[Vr,$]),ir=(0,i.useRef)(null),bn=(0,i.useCallback)(s=>{ir.current&&clearTimeout(ir.current),ir.current=setTimeout(()=>{ir.current=null,s()},ya)},[]);(0,i.useEffect)(()=>()=>{ir.current&&clearTimeout(ir.current)},[]);let sr=(0,i.useCallback)(()=>{ar(),Ze(e??null),Hn(s=>s+1),on("expanding"),bn(()=>on("card"))},[bn,ar,e]),Or=(0,i.useCallback)(()=>{on("collapsing"),bn(()=>on("buttons"))},[bn]),In=(0,i.useCallback)(s=>{Dr(s),on("apm-expanding"),bn(()=>on("apm-form"))},[bn]),x=(0,i.useCallback)(()=>{on("apm-collapsing"),bn(()=>{on("buttons"),Dr(null)})},[bn]);(0,i.useEffect)(()=>{oe==="buttons"&&Vt&&ht&&(Ze(e??null),on("card"))},[oe,Vt,ht,e]);let[L,A]=(0,i.useState)(null),le=(0,i.useRef)(!1),Me=(0,i.useRef)(null),pt=(0,i.useRef)("idle"),[pe,Be]=(0,i.useState)(!1),W=(0,i.useRef)(pe);W.current=pe;let[m,g]=(0,i.useState)(()=>ut?.existingOrderId?{orderId:ut.existingOrderId,attempts:1}:null),D=(0,i.useRef)(m);(0,i.useEffect)(()=>{D.current=m},[m]);let z=(0,i.useRef)(null),ce=(0,i.useMemo)(()=>{if(Ve||Ke.claimBuyerIdentity||q?.buyerIdentified!==!1||!e||!t)return;let s=`${Ne}|${e}|${t}`;z.current?.key!==s&&(z.current={key:s,claim:vo(new fr.PaymentAPI(Ne,{telemetry:!1}),e,t,{...a?{userId:a}:{},...b?{firstName:b}:{},...v?{lastName:v}:{}})});let S=z.current.claim;return async K=>{await S(K)}},[Ve,Ke.claimBuyerIdentity,q?.buyerIdentified,e,t,Ne,a,b,v]),J=Ve??Ke.claimBuyerIdentity??ce,Ye=O??Fn,It=(0,i.useMemo)(()=>(0,y.resolveTheme)(je),[je]),E=(0,i.useMemo)(()=>{let s=It?.buttonsLayout??(0,y.resolveButtonsLayoutTheme)(yt);return re?{...s,...re,cardButton:{...s.cardButton,...re.cardButton},cardFormContainer:{...s.cardFormContainer,...re.cardFormContainer},backButton:{...s.backButton,...re.backButton},backButtonIcon:{...s.backButtonIcon,...re.backButtonIcon},submitButton:{...s.submitButton,...re.submitButton},title:{...s.title,...re.title}}:s},[It,yt,re]),Pe=De??It?.appearance,At=(0,i.useMemo)(()=>Za({appearance:Pe,buttonsStyles:E,layout:oe}),[Pe,E,oe]),ge=Ke.inlineSessionPatchProcessing??!1,j=(h??Ft)||ge,ae=Ne.replace(/\/+$/,""),_=(0,i.useMemo)(()=>xi({userId:a,email:o,firstName:b,lastName:v,country:N,zip:ve},Wn),[a,o,b,v,N,ve,Wn]),Ue=[_.firstName,_.lastName].filter(s=>!!s?.trim()).join(" "),Rt=!(0,y.isValidEmail)(_.email?.trim()),_e=(0,i.useRef)(null);ie&&_e.current===null&&(_e.current=Rt);let Sn=ie&&(_e.current??Rt),Sr=(0,i.useMemo)(()=>su(Wt,Sn),[Wt,Sn]),io=Sr.empty||Sr.malformed,Un=(0,i.useMemo)(()=>xe?xe.getRawProvider():null,[xe]),fs=(0,i.useMemo)(()=>bt?bt.getRawProvider():null,[bt]),Oo=Ae||100,so=jt.toLowerCase(),ui=(0,i.useMemo)(()=>Pe?(0,fr.toStripeAppearance)(Pe):null,[Pe]),lo=ui,gs=(0,i.useMemo)(()=>{let s=ui??{},S=s.rules??{};return{...s,rules:{...S,".AccordionItem":{padding:"10px 14px",boxShadow:"none",...S[".AccordionItem"]??{}},".AccordionItemContents":{padding:"6px 14px 12px",boxShadow:"none",...S[".AccordionItemContents"]??{}}}}},[ui]),hs=(0,i.useMemo)(()=>({...sl(Ae,q?.captureMethod),currency:so,...lo?{appearance:lo}:null}),[Ae,so,q?.captureMethod,lo]),bs=(0,i.useMemo)(()=>({mode:"payment",amount:Oo,currency:so,captureMethod:"manual",setupFutureUsage:"off_session",...lo?{appearance:lo}:null}),[Oo,so,lo]),we=(0,i.useCallback)(s=>{Rn(s),G?.(s)},[G]),pi=(0,i.useRef)(""),[Ps,Pc]=(0,i.useState)(!1),mi=(0,i.useCallback)(()=>{Pc(!0)},[]);(0,i.useEffect)(()=>{if(!ie||!Sn||!J||!Ps||io||pi.current)return;let s=Bn({email:(0,y.isValidEmail)(_.email?.trim())?_.email?.trim():fn.current.trim(),firstName:_.firstName?.trim(),lastName:_.lastName?.trim()});pi.current=JSON.stringify(s),mn(S=>({...S,...s})),Promise.resolve(J(s)).catch(S=>{pi.current="",we(S instanceof Error?S.message:"Failed to attach buyer details.")})},[ie,Sn,J,Ps,io,_.email,_.firstName,_.lastName,we]),(0,i.useEffect)(()=>{!ie||!Gt||Gt.setCardFieldOrder?.(R??null,te==null&&!Sn)},[ie,Gt,R,te,Sn]),(0,i.useEffect)(()=>{(dt==="expanding"||dt==="collapsing"||dt==="apm-expanding"||dt==="apm-collapsing")&&we(null)},[dt,we]);let wr=(0,i.useCallback)((s,S,K)=>{u?.(cn(s,S,K))},[u]),co=(0,i.useCallback)((s,S,K)=>{let Ee=K?.popupBlocked??Yr(S);Ee&&f.markBlocked()&&P(tt=>tt+1);let ne=Ma(ts(s),Ee,ee.inAppBrowser),Se=_r(S),Xt=(Se?.toLowerCase()==="error"?void 0:Se)??no(K?.code)??"external_payment_method_failed",dr=new y.FloPayError(ne,"api_error",{code:"external_payment_method_failed",param:s,details:{providerCode:Xt,popupBlocked:Ee,inAppBrowser:ee.inAppBrowser,appFamily:ee.appFamily,popupCapability:f.current(),presentationMode:K?.presentationMode??"popup"}});K?.telemetryReported||dn(xe)?.error(Mo({...qe,presentationMode:K?.presentationMode??"popup"},{errorCode:Ee?"POPUP_BLOCKED":"PROVIDER_RUNTIME_FAILED",failureCategory:"provider_runtime",stage:"provider_ready",provider:K?.provider??(s==="paypal"?"paypal":"stripe"),paymentMethodCategory:K?.paymentMethodCategory??(s==="paypal"?"paypal":"wallet"),requestCategory:"provider_sdk",terminalReason:K?.terminalReason??(Ee?"popup_blocked":"provider_error")})),A(null),oe==="buttons"&&(on("buttons"),Dr(null)),we(ne),d?.(dr),console.error("[FloPay] External payment method failed:",{method:s,code:Xt,popupBlocked:Ee})},[ee,qe,xe,oe,d,f,we]);(0,i.useEffect)(()=>{if(!ie||!e){Cr(null);return}let s=Zi(q?.vault);if(s){Cr(s);return}if(!gn){Cr(null);return}Cr(null);let S=!0;return new fr.PaymentAPI(ae).getVaultCapture(e,t).then(K=>{if(!S)return;let Ee=Zi(K);Ee?Cr(Ee):we("Failed to load the secure card form.")}).catch(K=>{S&&we(K instanceof Error?K.message:"Failed to load the secure card form.")}),()=>{S=!1}},[ie,gn,se,e,q?.vault,ae,t,we]);let lr=(0,i.useRef)({onComplete:l,onError:d,updateError:we,emitDecline:wr,resolvedAccount:_,avsConfig:te,avsCheckProp:Le,sessionId:e,nonce:t,baseUrl:ae,captureMethod:q?.captureMethod,paymentId:q?.paymentId,authorizationExpiresAt:q?.authorizationExpiresAt,serverSideCardGateway:sn});lr.current={onComplete:l,onError:d,updateError:we,emitDecline:wr,resolvedAccount:_,avsConfig:te,avsCheckProp:Le,sessionId:e,nonce:t,baseUrl:ae,captureMethod:q?.captureMethod,paymentId:q?.paymentId,authorizationExpiresAt:q?.authorizationExpiresAt,serverSideCardGateway:sn};let yi=(0,i.useRef)(!1),vs=(0,i.useCallback)(()=>{let s=lr.current,S=s.resolvedAccount.email?.trim(),K=(0,y.isValidEmail)(S)?S:fn.current.trim();if(!(0,y.isValidEmail)(K))return null;let Ee=s.resolvedAccount.firstName?.trim(),ne=s.resolvedAccount.lastName?.trim(),Se=Zt.current.trim()||s.resolvedAccount.country?.trim()||"",Xt=s.avsConfig?(0,y.isAVSFieldVisible)(s.avsConfig.state,Se):!1,dr=s.avsConfig?(0,y.isAVSFieldVisible)(s.avsConfig.address_line_1,Se):!1,tt=s.avsConfig?(0,y.isAVSFieldVisible)(s.avsConfig.postal_code,Se):!1,mt=s.avsConfig?(0,y.isAVSFieldVisible)(s.avsConfig.city,Se):!1,kt=s.avsConfig?(0,y.isAVSFieldVisible)(s.avsConfig.address_line_2,Se):!1,Ut=dr&&!Xt&&tt?(0,y.getStateFromPostalCode)(Se,(wt.current??"").trim()):null,ln=Xt?Ht.current:Ut;return{accountData:{userId:s.resolvedAccount.userId??"",email:K,...Ee?{firstName:Ee}:{},...ne?{lastName:ne}:{},...tt&&wt.current?{zip:wt.current}:{},...mt&&Qt.current?{city:Qt.current}:{},...ln?{state:ln}:{},...dr&&yn.current?{addressLine1:yn.current}:{},...kt&&Dt.current?{addressLine2:Dt.current}:{},...Se?{country:Se}:{}},...s.avsCheckProp===void 0?{}:{avsCheck:s.avsCheckProp},...s.avsConfig?{avsConfig:{country:(0,y.isAVSFieldVisible)(s.avsConfig.country,Se),postal_code:tt,address_line_1:dr,address_line_2:kt,city:mt,state:Xt}}:{}}},[]),Cs=(0,i.useRef)(Z);Cs.current=Z,(0,i.useEffect)(()=>{Z||Ye!==ql||lr.current.updateError(null)},[Z,Ye]),(0,i.useEffect)(()=>{!ie||!Gt||Gt.setSubmitGate?.(Mr||Z||io||pe)},[ie,Gt,Mr,Z,io,pe]),(0,i.useEffect)(()=>{if(!ie||!Gt)return;yi.current=!1;let s=null,S=()=>{s&&clearTimeout(s),s=setTimeout(()=>{s=null,pt.current="idle",A(null)},400)},K=Gt.on("submitting",()=>{en(!0),Me.current&&clearTimeout(Me.current),pt.current="validation-window",Me.current=setTimeout(()=>{Me.current=null,pt.current==="validation-window"&&(pt.current="processing")},Gd),A("processing");let tt=lr.current;if(!tt.sessionId||!tt.nonce)return;let mt=vs();if(!mt){tt.updateError("Enter a valid email address."),pt.current="idle",A(null);return}new fr.PaymentAPI(tt.baseUrl).patchAccountSnapshot(tt.sessionId,tt.nonce,mt,{telemetryMode:"best_effort"}).catch(kt=>{if(!Xd(kt))return;let Ut=kt instanceof Error?kt.message:"Please check your billing address and try again.";tt.updateError(Ut),pt.current="idle",A(null),tt.onError?.(kt instanceof y.FloPayError?kt:new y.FloPayError(Ut,"api_error"))})}),Ee=Gt.on("complete",async tt=>{if(To(tt.sessionId??lr.current.sessionId),pt.current="terminal",Be(!1),A("success"),await new Promise(ln=>setTimeout(ln,600)),yi.current)return;yi.current=!0;let mt=lr.current,kt=(0,y.isAuthorizationOnlySession)(mt)||tt.outcome==="authorized",Ut=mt.serverSideCardGateway?{}:{paymentIntentId:tt.intentId};lr.current.onComplete?.(kt?{status:"authorized",...Ut,paymentId:tt.paymentId??mt.paymentId,sessionId:tt.sessionId??mt.sessionId,authorizationExpiresAt:tt.authorizationExpiresAt??mt.authorizationExpiresAt,checkoutMethod:"card"}:{status:"succeeded",...Ut,checkoutMethod:"card"})}),ne=Gt.on("decline",tt=>{let mt=lr.current,kt=tt.message??"Your payment was declined. Please try another card or contact your bank.";pt.current="terminal",Be(!1),mt.updateError(kt),A("error");let Ut=tt.failureOutcome??(0,y.normalizeCheckoutFailureOutcome)(tt.declineReason)??"authorization_declined";mt.emitDecline("card",kt,{code:Ut,declineCode:Ut}),S()}),Se=Gt.on("error",tt=>{let mt=lr.current,kt=tt.message??"There was a problem processing your payment. Please try again.";pt.current="terminal",Be(!1),mt.updateError(kt),A("error"),mt.onError?.(new y.FloPayError(kt,"api_error",{code:tt.failureOutcome??"capture_failed"})),S()}),Xt=Gt.on("challenge_dismissed",()=>{Me.current&&(clearTimeout(Me.current),Me.current=null),pt.current="processing",Be(!0),A(null)}),dr=Gt.on("blocked",()=>{if(W.current){lr.current.updateError(Yd);return}if(!Cs.current){en(!0);return}mi(),lr.current.updateError(ql)});return()=>{s&&(clearTimeout(s),s=null),Me.current&&(clearTimeout(Me.current),Me.current=null),pt.current="idle",Be(!1),A(null),K(),Ee(),ne(),Se(),Xt(),dr()}},[ie,Gt,mi,vs]);let kr=!!ut?.clientId,Lo=Array.isArray(de),ba=Lo&&de.length>0,Ss=Lo&&de.includes("paypal"),Pa=(0,i.useRef)(null);Pa.current===null&&(Pa.current=Hd());let uo=Pa.current?"redirect":ml(ee,U,f.current()),{expressMethods:va,paymentElementMethods:No}=(0,i.useMemo)(()=>(0,y.partitionStripeMethods)(de,{excludePaypal:kr}),[de,kr]),ws=kr||!!bt||Ss&&uo==="redirect",vc=(0,i.useMemo)(()=>ws?va.filter(s=>s!=="paypal"):va,[va,ws]),Cc=(0,i.useMemo)(()=>{let s=[];return he&&s.push("apple_pay"),Fe&&s.push("google_pay"),s},[he,Fe]),po=Lo?vc:Cc,Sc=Y&&po.length>0,fi=Ln?Mt:N,Ca=(0,i.useMemo)(()=>{let s=fi?.trim().toUpperCase();return s?X?No.filter(S=>{let K=X[S];return!K||K.length===0||K.includes(s)}):(0,y.filterStripeMethodsByCountry)(No,fi):No},[No,fi,X]),gi=(0,i.useMemo)(()=>({mode:"payment",amount:Oo,currency:so,paymentMethodCreation:"manual",appearance:gs}),[Oo,so,gs]),[ks,Is]=(0,i.useState)("loading"),[Rs,_s]=(0,i.useState)("loading"),[Es,Ts]=(0,i.useState)("loading"),[wc,hi]=(0,i.useState)(!1),[As,bi]=(0,i.useState)("loading"),[Pi,kc]=(0,i.useState)();(0,i.useEffect)(()=>{kc(ea())},[]);let Sa=Pi?.inAppBrowser,wa=Pi?Da(Pi,ut?.approvalPresentation,Ge??(Et?"subscription":"order")):"popup",xs=T&&(kr||(Lo?Ss:Sa===!1)),Ms=Y&&Sc,zo=(!Ct||!!Ke.waitForDataAttachment)&&xs&&kr,Bs=As==="retrying"||As==="exhausted",Uo=null;Y&&(bt?Uo=fs:uo==="redirect"&&(Uo=Un));let Fs=(0,i.useMemo)(()=>({...qe,presentationMode:uo}),[qe,uo]),qo=!Ct&&xs&&!!Uo&&(!kr||Bs),mo=!Ct&&Ms&&!!Un,$o=!Ct&&Y&&ba&&Ca.length>0&&!!Un,Ic=zo&&!Bs?wc:qo&&Hl(ks),Rc=mo&&Hl(Rs),_c=$o&&Es!=="load_error",Ds=s=>s==="loading"||s==="ready",Os=zo||qo&&Ds(ks)||mo&&Ds(Rs)||$o&&Es!=="load_error",ka=(0,i.useRef)(!1);(0,i.useEffect)(()=>{if(!ka.current){if(!Y&&!T){ka.current=!0;let s=new y.FloPayError("FloPay: both `showStripe` and `showPayPal` are false \u2014 nothing to render.","validation_error");d?.(s),we(s.message)}else if(!Y&&T&&!kr){ka.current=!0;let s=new y.FloPayError("FloPay: `showStripe` is false and no PayPal gateway is configured for this session \u2014 nothing to render.","validation_error");d?.(s),we(s.message)}else if(Sa!==void 0&&!Ct&&!ht&&!Os){ka.current=!0;let s=new y.FloPayError("FloPay: this checkout session has no vault card capability and no usable supported non-card payment methods. Upgrade the billing backend integration.","api_error",{code:"UnsupportedBackendVaultCapability"});d?.(s),we(s.message)}}},[Y,T,kr,Sa,Ct,ht,Os,d,we]);let Ls=(0,i.useRef)(!1);(0,i.useEffect)(()=>{if(Ls.current||!ba)return;let s=[];he!==!0&&s.push("showApplePay"),Fe!==!0&&s.push("showGooglePay"),s.length!==0&&(Ls.current=!0,console.warn(`[FloPay] ${s.join(" / ")} ${s.length===1?"is":"are"} deprecated: the Apple Pay / Google Pay surface is now driven by \`gateways.stripe.enabledPaymentMethods\` on the session response. Remove the legacy prop(s) to silence this warning.`))},[ba,he,Fe]);let Ns=(0,i.useCallback)((s,S)=>Ke.applyInlineSessionPatch?Ke.applyInlineSessionPatch(s).then(K=>({error:null,sessionId:K.sessionId||e,nonce:K.session?.clientSecret||t})).catch(K=>{let Ee=Wl(S,K);return we(Ee.message),d?.(Ee),{error:Ee,sessionId:e,nonce:t}}):Promise.resolve({error:null,sessionId:e,nonce:t}),[Ke.applyInlineSessionPatch,t,d,e,we]),cr=(0,i.useCallback)(async s=>{if(s!=="card"&&Ct&&await Ke.waitForDataAttachment?.(),!Ie)return{proceed:!0};try{let S=await Ie({method:s,sessionId:e||void 0,createSession:Ke.inlineSessionDraft});if(S===!1)return{proceed:!1};if(S&&typeof S=="object"){S.account&&mn(Ee=>({...Ee??{},...S.account}));let K=await Ns(S,s);return K.error?{proceed:!1,accountPatch:S.account}:{proceed:!0,accountPatch:S.account,sessionId:K.sessionId,nonce:K.nonce}}return{proceed:!0}}catch(S){let K=Wl(s,S);return we(K.message),d?.(K),{proceed:!1}}},[Ns,Ke.inlineSessionDraft,Ke.waitForDataAttachment,Ct,Ie,d,e,we]),zs=(0,i.useCallback)(async(s,S)=>{if(le.current)return;le.current=!0,ze(!0),A("processing"),we(null);let K=S?.sessionId??e,Ee=S?.nonce??t,ne=xi(_,S?.accountPatch),Se=S?.completionPaymentMethodId??Jo(s),Xt=s.originalPaymentMethodId?{...s,originalPaymentMethodId:void 0}:s,dr=tu(s),tt=S?.presentationMode?Xa(dn(xe),{...qe,presentationMode:S.presentationMode}):void 0,mt=()=>{$?.({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:"process_payment",provider:dr}),tt?.error({errorCode:"PAYMENT_PROCESSING_FAILED",stage:"processing",...yr,requestCategory:"process_payment"})};try{let Ut=await new fr.PaymentAPI(ae).processPayment(ne.userId??"",{sessionId:K,nonce:Ee,paymentMethodCategory:S?.paymentMethodCategory??ru(s),tokenizedData:Xt,accountData:{...S?.accountPatch,userId:ne.userId??"",email:ne.email??"",firstName:ne.firstName||void 0,lastName:ne.lastName||void 0,...te?(()=>{let Ot=Zt.current,Ir=(0,y.isAVSFieldVisible)(te.state,Ot),qn=(0,y.isAVSFieldVisible)(te.address_line_1,Ot),Rr=(0,y.isAVSFieldVisible)(te.postal_code,Ot),eo=qn&&!Ir&&Rr?(0,y.getStateFromPostalCode)(Ot,(wt.current??"").trim()):null,Go=Ir?Ht.current:eo;return{country:Ot,...Rr&&wt.current?{zip:wt.current}:{},...(0,y.isAVSFieldVisible)(te.city,Ot)&&Qt.current?{city:Qt.current}:{},...Go?{state:Go}:{},...qn&&yn.current?{addressLine1:yn.current}:{},...(0,y.isAVSFieldVisible)(te.address_line_2,Ot)&&Dt.current?{addressLine2:Dt.current}:{}}})():{}},chv:B,avsCheck:Le??!1,checkoutType:ct,checkoutLayout:at,avsConfig:te?{country:(0,y.isAVSFieldVisible)(te.country,Zt.current),postal_code:(0,y.isAVSFieldVisible)(te.postal_code,Zt.current),address_line_1:(0,y.isAVSFieldVisible)(te.address_line_1,Zt.current),address_line_2:(0,y.isAVSFieldVisible)(te.address_line_2,Zt.current),city:(0,y.isAVSFieldVisible)(te.city,Zt.current),state:(0,y.isAVSFieldVisible)(te.state,Zt.current)}:void 0});if(Ut.ok){let Ot=Ut.status===204?null:await Ut.json().catch(()=>null),Ir=(0,y.isAuthorizationOnlySession)(q)||Ot?.status==="authorized";To(K),tt?.terminal({outcome:"payment_succeeded",...yr}),A("success"),g(null),await new Promise(eo=>setTimeout(eo,600));let qn;typeof Ot?.paymentId=="string"?qn=Ot.paymentId:q?.paymentId&&(qn=q.paymentId);let Rr;typeof Ot?.authorizationExpiresAt=="string"?Rr=Ot.authorizationExpiresAt:q?.authorizationExpiresAt&&(Rr=q.authorizationExpiresAt),l?.(Ir?{status:"authorized",...qn===void 0?{}:{paymentId:qn},sessionId:typeof Ot?.sessionId=="string"?Ot.sessionId:K,...Rr===void 0?{}:{authorizationExpiresAt:Rr},paymentIntentId:s.threeDSecureActionResultTokenId,paymentMethodId:Se,checkoutMethod:s.isPaypal?"paypal":"card"}:{status:"succeeded",paymentIntentId:s.threeDSecureActionResultTokenId,paymentMethodId:Se,checkoutMethod:s.isPaypal?"paypal":"card"});return}let ln=await Ut.json().catch(()=>null);if(ln?.type==="paypal_redirect_required"){let Ot=ln.threeDSecureToken,Ir=ln.paymentMethodId||s.id||"";if(!xe||!Ot){A("error"),we("PayPal authorization required but no token provided.");return}try{let qn=bt?.getRawProvider();if(!qn){we("PayPal is not available.");return}let Rr={return_url:window.location.href};Ir&&(Rr.payment_method=Ir);let{error:eo}=await qn.confirmPayment({clientSecret:Ot,confirmParams:Rr,redirect:"if_required"});if(eo){A("error");let Go=eo.message??"PayPal payment failed.";we(Go),wr("paypal",Go,{code:eo.code})}}catch(qn){A("error"),we(qn instanceof Error?qn.message:"PayPal authorization failed.")}return}if(ln?.type==="paypal_direct_required"){let Ot=ln.orderId;if(!Ot){A("error"),we("PayPal retry required but no order id provided.");return}let Ir=D.current?.attempts??0;if(Ir>=2){A("error"),we("PayPal payment could not be completed after multiple attempts."),wr("paypal","paypal_direct_required retry limit exceeded");return}hi(!1),bi("loading"),g({orderId:Ot,attempts:Ir+1}),A(null);return}(0,y.classifyPaymentRejection)(Ut.status,ln)?tt?.terminal({outcome:"payment_declined",...yr,terminalReason:"provider_declined"}):mt(),A("error");let ur=ln?.message??"Payment failed. Please try again.";we(ur),wr(s.isPaypal?"paypal":"card",ur,{code:ln?.code??ln?.gatewayErrorCode,declineCode:ln?.declineCode??ln?.gatewayDeclineReason}),await new Promise(Ot=>setTimeout(Ot,400))}catch(kt){Ql(kt)||mt(),A("error"),we(kt instanceof Error?kt.message:"An unexpected error occurred"),await new Promise(Ut=>setTimeout(Ut,400))}finally{ze(!1),A(null),le.current=!1}},[ae,e,t,_,te,Le,ct,at,B,xe,bt,q,l,we,wr,$,qe]),xn=(0,i.useCallback)((s,S)=>{p?p(s):zs(s,S)},[p,zs]),jo=`${Xl}:${e}`;(0,i.useEffect)(()=>{if(typeof window>"u")return;let s=localStorage.getItem(jo);if(!s)return;let S;try{S=JSON.parse(s)}catch{$t(jo);return}if(!S||typeof S.createdAt!="number"||Date.now()-S.createdAt<0||Date.now()-S.createdAt>Jl||typeof S.paymentMethodId!="string"||typeof S.providerIntentId!="string"||typeof S.paymentMethodType!="string"||S.sessionId!==e||!t||S.nonce!==t||!po.includes(S.paymentMethodType)){$t(jo);return}$t(jo),xn({id:S.paymentMethodId,type:"card",threeDSecureActionResultTokenId:S.providerIntentId,gateway:"stripe",paymentMethodType:S.paymentMethodType},{...S.accountPatch?{accountPatch:S.accountPatch}:{},paymentMethodCategory:"wallet",sessionId:e,nonce:t})},[xn,t,e,jo,po]);let Us=(0,i.useRef)(!1);(0,i.useEffect)(()=>{if(typeof window>"u"||Us.current)return;let[s,S,K]=os();if(!s||!S||Pa.current||!xe)return;let Ee=xe.getRawProvider();if(!Ee)return;let ne=mt=>{let kt=localStorage.getItem(mt);if(!kt)return null;try{return JSON.parse(kt)}catch{return $t(mt),null}},Se=ne(Tr)??ne(Nl),Xt;if(Se?.clientSecret){if(Se.clientSecret!==S)return;Xt={...Se.accountPatch?{accountPatch:Se.accountPatch}:{},...Se.sessionId?{sessionId:Se.sessionId}:{},...Se.nonce?{nonce:Se.nonce}:{}}}else if(Se?.sessionId&&Se.sessionId!==e)return;Us.current=!0,$t(Tr),$t(Nl),window.history.replaceState({},"",as());let dr=Se?.paymentMethodType??Se?.tokenType??"card",tt="card";(async()=>{if(K==="failed"){let ur="Payment was declined. Please try again.";we(ur),wr(tt,ur);return}let{paymentIntent:mt,error:kt}=await Ee.retrievePaymentIntent(S);if(kt){let ur=kt.message??"Failed to retrieve payment status.";we(ur),wr(tt,ur,{code:kt.code});return}let Ut=mt?.status,ln=Xo(Ut);if(!mt||!ln){let ur=Ut==="canceled"?"Payment was canceled.":"Payment was not completed. Please try again.";we(ur),wr(tt,ur,{code:Ut??"missing_payment_intent"});return}let Xs=typeof mt.payment_method=="string"?mt.payment_method:mt.payment_method?.id;xn({id:Xs??Se?.paymentMethodId??Se?.tokenId??mt.id,type:"card",threeDSecureActionResultTokenId:mt.id,gateway:Se?.gateway??"stripe",paymentMethodType:dr},Xt)})()},[e,xn,xe,we,wr]);let vi=(0,i.useCallback)(s=>{s.preventDefault()},[]);if(!(ie||xe!==null))return(0,c.jsx)("div",{"data-testid":"flopay-loading","aria-busy":"true",children:"Loading payment form..."});let Vo=oe==="buttons",Mn=Pe?.variables,Ec=new Set(["#FFFFFF","#ffffff","#fff","#FFF","white"]),Ci=Mn?.colorBackground,Tc=Ci&&!Ec.has(Ci)?Ci:void 0,Wo=E.cardInputBorder??(Vo?"#e5e7eb":"#A4A4FF"),qs=Mn?.colorDanger??"#dc2626",zt=s=>Br[s]&&(Pr[s]||En),Ia=io&&(Fr||En),Jn=s=>s?qs:Wo,Ra=(hn.malformed||hn.empty)&&(br||En),Ac=Jn(Ra),Si=E.cardFormContainer?.backgroundColor??Tc??(Vo?"white":"#EDEDFF"),yo=E.cardInputBackground??Mn?.colorBackground??"white",wi=ho(ke),$s=ho(Oe),fo=E.nameInput,js=E.cardInputFontSize??lu(fo?.fontSize)??Mn?.fontSizeBase??"16px",Vs=typeof fo?.fontFamily=="string"?fo.fontFamily:Mn?.fontFamily??"Poppins, sans-serif",Ws=Gi(fo?.fontWeight)??400,xc=E.cardInputColor??(typeof fo?.color=="string"?fo.color:void 0)??Mn?.colorText??"#262833",Mc=E.cardInputPlaceholderColor??"#9ca3af",Yt=Mn?.borderRadius??"8px",Zr=Mn?.borderRadius??E.cardButton?.borderRadius??Yt,Qr=Mn?.colorPrimary??"#4A49FF",Bc=Mn?.colorPrimaryHover??Fo(Qr,.12),ki=Mn?.colorText??"#262833",Ii={fontSize:js,fontFamily:Vs,fontWeight:Ws,color:xc,WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},Ho={marginTop:"0.375rem",...Ii,fontSize:"0.75rem",lineHeight:1.4,color:qs},Fc={"--flopay-input-placeholder-color":Mc,"--flopay-input-font-size":js,"--flopay-input-font-family":Vs,"--flopay-input-font-weight":String(Ws)},Ko=E.cardFormContainer??{},Ri=Ko.padding??(Vo?"0":"1rem"),_i=Ko.borderRadius??Yt,Dc=Gt&&Xn?(0,c.jsx)(Bo,{capture:Gt,html:Xn.html,messageToken:Xn.messageToken,expectedOrigin:Xn.expectedOrigin,theme:At,submitLabel:w,onReady:()=>{if(!Sn&&!te||typeof document>"u")return;let s=()=>{let K=(document.querySelector('[data-testid="flopay-vault-identity-fields"]')??document.querySelector('[data-testid="flopay-avs-fields"]'))?.querySelector("input:not([disabled]), select:not([disabled])");if(K){rr.current=!0;try{K.focus()}finally{rr.current=!1}}};Yn.current||s()},onError:s=>we(s),onValidation:s=>{let S=pt.current;(S==="idle"||S==="validation-window")&&(we(s),s&&pt.current==="validation-window"&&(Me.current&&(clearTimeout(Me.current),Me.current=null),pt.current="idle",A(null)))}}):(0,c.jsx)("div",{"data-testid":"flopay-vault-loading",style:{minHeight:120,display:"flex",alignItems:"center",justifyContent:"center",color:"#6b7280",fontSize:14},children:"Loading secure card form\u2026"}),Hs=(0,c.jsxs)("div",{onFocusCapture:s=>{["INPUT","SELECT","TEXTAREA","IFRAME"].includes(s.target.tagName)&&ar()},style:{backgroundColor:Si,borderRadius:_i,...Ko,padding:Ri,...Fc,display:"flex",flexDirection:"column"},children:[(0,c.jsx)("style",{children:`
|
|
31
31
|
.flopay-shared-input::placeholder {
|
|
32
32
|
color: var(--flopay-input-placeholder-color);
|
|
33
33
|
opacity: 1;
|
|
@@ -35,13 +35,13 @@ ${ze.join(`
|
|
|
35
35
|
font-family: var(--flopay-input-font-family);
|
|
36
36
|
font-weight: var(--flopay-input-font-weight);
|
|
37
37
|
}
|
|
38
|
-
`}),jo&&zn&&(0,c.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem",order:ie?-2:0},children:[(0,c.jsxs)("button",{type:"button",onClick:Or,style:{display:"inline-flex",alignItems:"center",gap:Si?0:"0.5rem",background:"none",border:"none",cursor:"pointer",color:"#4b5563",fontSize:E.backButtonFontSize??"0.85rem",fontWeight:500,padding:0,transition:"color 0.15s",flexShrink:0,...E.backButton},"aria-label":"Back to payment methods",children:[(0,c.jsx)("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",transition:"background-color 0.15s",...E.backButtonIcon},children:(0,c.jsx)("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:(0,c.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,c.jsx)(bo,{content:ke})]}),qs?(0,c.jsx)("div",{style:{flex:1}}):(0,c.jsx)("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:E.titleFontSize??"1.05rem",color:"#262833",paddingRight:80,...E.title},children:(0,c.jsx)(Go,{content:Le})})]}),!jo&&!qs&&(0,c.jsx)("div",{style:{textAlign:"center",fontWeight:600,fontSize:"1.1rem",padding:"0.5rem 0",color:wi,order:ie?-3:0,...E.title},children:(0,c.jsx)(Go,{content:Le})}),ie&&He&&(0,c.jsx)("div",{style:{order:-2,width:"100%"},children:He}),ie&&Sn&&(0,c.jsxs)("div",{"data-testid":"flopay-vault-identity-fields",style:{order:-1,marginTop:"0.5rem"},children:[(0,c.jsx)("div",{style:{backgroundColor:mo,border:`1px solid ${Jn(ka)}`,borderRadius:Yt,padding:"10px"},children:(0,c.jsx)("input",{className:"flopay-shared-input",id:"flopay-buyer-email",name:"email",type:"email",autoComplete:"email","aria-label":"Email address",placeholder:"Email address",value:Wt,onChange:s=>{xt("email"),fn.current=s.target.value,an(s.target.value)},onPointerDown:()=>xt("email"),onKeyDown:()=>xt("email"),onBlur:()=>{or("email")&&An(!0),ao||pi()},disabled:j,required:!0,"aria-invalid":ka||void 0,"aria-describedby":ka?"flopay-buyer-email-error":void 0,"data-testid":"flopay-email",style:{width:"100%",border:"none",outline:"none",background:"transparent",...ki}})}),ka&&(0,c.jsx)("div",{id:"flopay-buyer-email-error",role:"alert","data-testid":"flopay-email-error",style:Wo,children:Sr.empty?"Email address is required":"Enter a valid email address"})]}),Q&&(0,c.jsx)("div",{style:{order:ie?-1:0},"data-testid":"flopay-avs-fields",children:(()=>{let s=Mt,S=(ee=!1)=>({backgroundColor:mo,border:`1px solid ${Jn(ee)}`,borderRadius:Yt,marginTop:"0.5rem",padding:"10px"}),K=()=>({width:"100%",border:"none",outline:"none",background:"transparent",...ki}),Te=(0,y.getStateOptions)(s);return(0,c.jsxs)(c.Fragment,{children:[(0,y.isAVSFieldVisible)(Q.address_line_1,s)&&(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("div",{style:S(zt("line1")),children:(0,c.jsx)("input",{className:"flopay-shared-input",id:"flopay-billing-address-line1",name:"billing-address-line1",placeholder:"Street Address (e.g. 123 Main St)",autoComplete:"billing address-line1",value:rn,onChange:ee=>{xt("line1"),gt.current.addressLine1=!0,yn.current=ee.target.value,Ce(ee.target.value)},onPointerDown:()=>xt("line1"),onKeyDown:()=>xt("line1"),onBlur:()=>kn("line1"),disabled:j,required:!0,"aria-invalid":zt("line1")||void 0,"aria-describedby":zt("line1")?"flopay-billing-address-line1-error":void 0,"data-testid":"flopay-address-line1",style:K()})}),zt("line1")&&(0,c.jsx)("div",{id:"flopay-billing-address-line1-error",role:"alert","data-testid":"flopay-address-line1-error",style:Wo,children:"Street address is required"})]}),(0,y.isAVSFieldVisible)(Q.address_line_2,s)&&(0,c.jsx)("div",{style:S(),children:(0,c.jsx)("input",{className:"flopay-shared-input",id:"flopay-billing-address-line2",name:"billing-address-line2",placeholder:"Apt, Suite, Unit (optional)",autoComplete:"billing address-line2",value:St,onChange:ee=>{gt.current.addressLine2=!0,Dt.current=ee.target.value,Tt(ee.target.value)},disabled:j,"data-testid":"flopay-address-line2",style:K()})}),((0,y.isAVSFieldVisible)(Q.city,s)||(0,y.isAVSFieldVisible)(Q.state,s))&&(0,c.jsxs)("div",{style:{display:"flex",gap:"0",marginTop:"0.5rem"},children:[(0,y.isAVSFieldVisible)(Q.city,s)&&(0,c.jsx)("div",{style:{flex:1,backgroundColor:mo,borderTop:`1px solid ${Jn(zt("city"))}`,borderRight:`1px solid ${Jn(zt("city"))}`,borderBottom:`1px solid ${Jn(zt("city"))}`,borderLeft:`1px solid ${Jn(zt("city"))}`,padding:"10px",borderTopLeftRadius:Yt,borderBottomLeftRadius:Yt,...(0,y.isAVSFieldVisible)(Q.state,s)?{borderRight:"none",borderTopRightRadius:0,borderBottomRightRadius:0}:{borderRadius:Yt}},children:(0,c.jsx)("input",{className:"flopay-shared-input",id:"flopay-billing-city",name:"billing-city",placeholder:"City",autoComplete:"billing address-level2",value:vn,onChange:ee=>{xt("city"),gt.current.city=!0,Qt.current=ee.target.value,Bt(ee.target.value)},onPointerDown:()=>xt("city"),onKeyDown:()=>xt("city"),onBlur:()=>kn("city"),disabled:j,required:!0,"aria-invalid":zt("city")||void 0,"aria-describedby":zt("city")?"flopay-billing-city-error":void 0,"data-testid":"flopay-city",style:K()})}),(0,y.isAVSFieldVisible)(Q.state,s)&&(0,c.jsx)("div",{style:{flex:1,backgroundColor:mo,borderTop:`1px solid ${Jn(zt("state"))}`,borderRight:`1px solid ${Jn(zt("state"))}`,borderBottom:`1px solid ${Jn(zt("state"))}`,borderLeft:`1px solid ${Jn(zt("state"))}`,padding:"10px",borderTopRightRadius:Yt,borderBottomRightRadius:Yt,...(0,y.isAVSFieldVisible)(Q.city,s)?{borderTopLeftRadius:0,borderBottomLeftRadius:0,borderLeft:`1px solid ${Jn(zt("state")||zt("city"))}`}:{borderRadius:Yt}},children:Te?(0,c.jsxs)("select",{id:"flopay-billing-state",name:"billing-state",value:Vn,onChange:ee=>{xt("state"),gt.current.state=!0,Ht.current=ee.target.value,pn(ee.target.value)},onPointerDown:()=>xt("state"),onKeyDown:()=>xt("state"),onBlur:()=>kn("state"),disabled:j,autoComplete:"billing address-level1",required:!0,"aria-invalid":zt("state")||void 0,"aria-describedby":zt("state")?"flopay-billing-state-error":void 0,"data-testid":"flopay-state",style:{...K(),cursor:"pointer"},children:[(0,c.jsx)("option",{value:"",children:(0,y.getStateLabel)(s)}),Te.map(ee=>(0,c.jsx)("option",{value:ee.code,children:ee.name},ee.code))]}):(0,c.jsx)("input",{className:"flopay-shared-input",id:"flopay-billing-state",name:"billing-state",placeholder:(0,y.getStateLabel)(s),autoComplete:"billing address-level1",value:Vn,onChange:ee=>{xt("state"),gt.current.state=!0,Ht.current=ee.target.value,pn(ee.target.value)},onPointerDown:()=>xt("state"),onKeyDown:()=>xt("state"),onBlur:()=>kn("state"),disabled:j,required:!0,"aria-invalid":zt("state")||void 0,"aria-describedby":zt("state")?"flopay-billing-state-error":void 0,"data-testid":"flopay-state",style:K()})})]}),zt("city")&&(0,c.jsx)("div",{id:"flopay-billing-city-error",role:"alert","data-testid":"flopay-city-error",style:Wo,children:"City is required"}),zt("state")&&(0,c.jsxs)("div",{id:"flopay-billing-state-error",role:"alert","data-testid":"flopay-state-error",style:Wo,children:[(0,y.getStateLabel)(s)," is required"]}),((0,y.isAVSFieldVisible)(Q.country,s)||(0,y.isAVSFieldVisible)(Q.postal_code,s))&&(0,c.jsxs)("div",{style:{display:"flex",flexDirection:ye==="column"?"column":"row",gap:ye==="column"?"0.5rem":"0",marginTop:"0.5rem"},children:[(0,y.isAVSFieldVisible)(Q.country,s)&&(0,c.jsx)("div",{style:{flex:ye==="row"?1:void 0,backgroundColor:mo,borderTop:`1px solid ${Vo}`,borderRight:`1px solid ${Vo}`,borderBottom:`1px solid ${Vo}`,borderLeft:`1px solid ${Vo}`,padding:"10px",...ye==="row"&&(0,y.isAVSFieldVisible)(Q.postal_code,s)?{borderRadius:"0",borderTopLeftRadius:Yt,borderBottomLeftRadius:Yt,borderRight:"none"}:{borderRadius:Yt}},children:(0,c.jsxs)("select",{id:"flopay-billing-country",name:"billing-country",value:Mt,onChange:ee=>{gt.current.country=!0,Zt.current=ee.target.value,wn(ee.target.value),lt?.(ee.target.value),Ht.current="",pn("")},disabled:j,autoComplete:"billing country","data-testid":"flopay-country",style:{...K(),cursor:"pointer"},children:[Mt===""?(0,c.jsx)("option",{value:"",children:"Select country"}):null,y.COUNTRY_OPTIONS.map(ee=>(0,c.jsxs)("option",{value:ee.code,children:[ee.flag," ",ee.name]},ee.code))]})}),(0,y.isAVSFieldVisible)(Q.postal_code,s)&&(0,c.jsx)("div",{style:{flex:ye==="row"?1:void 0,backgroundColor:mo,border:`1px solid ${Tc}`,padding:"10px",...ye==="row"&&(0,y.isAVSFieldVisible)(Q.country,s)?{borderRadius:"0",borderTopRightRadius:Yt,borderBottomRightRadius:Yt}:{borderRadius:Yt}},children:(0,c.jsx)("input",{className:"flopay-shared-input",id:"flopay-billing-postal-code",name:"billing-postal-code",placeholder:(0,y.getPostalCodeLabel)(Mt),autoComplete:"billing postal-code",value:Dn,onChange:ee=>{xt("zip"),gt.current.zip=!0,wt.current=ee.target.value,On(ee.target.value),Ae?.(ee.target.value)},onPointerDown:()=>xt("zip"),onKeyDown:()=>xt("zip"),onBlur:()=>{or("zip")&&Tn(!0)},disabled:j,required:hn.required,"aria-invalid":Ia||void 0,"aria-describedby":Ia?"flopay-billing-postal-code-error":void 0,"data-testid":"flopay-zip",style:K()})})]}),Ia&&(0,c.jsx)("div",{id:"flopay-billing-postal-code-error",role:"alert","data-testid":"flopay-zip-error",style:Wo,children:hn.empty?`${(0,y.getPostalCodeLabel)(s)} is required`:ou(s)})]})})()}),ie&&Fc,Ye&&(0,c.jsx)(Io,{margin:"0.75rem 0",styleOverride:E.errorBanner,children:Ye})]}),Ra={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"},Hs=s=>V?!T||!kr?(0,c.jsx)("pre",{"data-testid":s,style:Ra,children:"FloPay/DirectPayPal-debug - not enabled"}):(0,c.jsx)("pre",{"data-testid":s,style:Ra,children:["FloPay/DirectPayPal-debug (parent gate)",` showPayPal=${T}`,` directPaypalConfigured=${kr}`,` inAppBrowserDetected=${String(Ca)}`,` shouldRenderDirectPayPal=${No}`,` shouldRenderStripePayPal=${Uo}`,` hasPaypalStripeInstance=${!!ys}`].join(`
|
|
39
|
-
`)}):null,
|
|
40
|
-
`)}):null,Gs=dt==="apm-expanding"||dt==="apm-form"||dt==="apm-collapsing",fo;dt==="apm-expanding"?fo=ql:dt==="apm-collapsing"&&(fo=$l);let _a=tn?rc(fi,tn):null;if(re==="buttons"){let s=dt==="buttons"||dt==="expanding"||dt==="apm-expanding",S=dt==="expanding"||dt==="card"||dt==="collapsing",K=ft===void 0?{boxSizing:"border-box",height:pa,padding:"0 1rem"}:{padding:"0.9rem 1rem"},Te;dt==="expanding"||dt==="apm-expanding"?Te=Qd:(dt==="collapsing"||dt==="apm-collapsing")&&(Te=Zd);let ee;return dt==="expanding"?ee=ql:dt==="collapsing"&&(ee=$l),(0,c.jsxs)("form",{onSubmit:Pi,className:I,noValidate:!0,style:{position:"relative"},children:[(0,c.jsx)(Zi,{}),L&&(0,c.jsx)(er,{status:L,errorMessage:Ye,authorized:Nn}),(0,c.jsxs)("div",{style:{display:"grid"},children:[(0,c.jsxs)("div",{"data-testid":"flopay-buttons-panel","aria-hidden":!s&&!Te?!0:void 0,style:{gridArea:"1 / 1",display:"flex",flexDirection:"column",gap:"0.5rem",...!s&&!Te?tu:{},...Te?{animation:Te,pointerEvents:"none"}:{}},children:[Hs("flopay-direct-paypal-gate-debug"),Ks("flopay-stripe-gate-debug"),No&&ut&&(0,c.jsxs)(c.Fragment,{children:[m&&(0,c.jsx)("div",{"data-testid":"flopay-paypal-direct-retry-notice",style:{padding:"8px 10px",background:"#fef3c7",border:"1px solid #fcd34d",borderRadius:6,color:"#78350f",fontSize:13,lineHeight:1.4},children:"Please confirm your PayPal payment to complete checkout."}),(0,c.jsx)(ea.Provider,{value:f,children:(0,c.jsx)(na,{sessionId:e,nonce:t,billingApiUrl:ze,email:_.email,billingName:qe||void 0,onBuyerIdentityReady:J,clientId:ut.clientId,environment:ut.environment,currency:jt.toUpperCase(),isSubscription:Et,providerObjectType:Re,approvalPresentation:Sa==="popup"?void 0:Sa,onTokenizedBody:xn,onComplete:l,onErrorChange:we,onDecline:u,onTechnicalFailure:lo,onButtonClick:me,runBeforeButtonClick:cr,isProcessing:j,onLoadStateChange:gi,onInitializationStateChange:hi,session:vt,existingOrderId:m?.orderId,debug:V},m?.orderId??"fresh")})]}),Uo&&(0,c.jsx)(Jt.Elements,{stripe:zo,options:hs,children:(0,c.jsx)(Hl,{sessionId:e,nonce:t,email:_.email,billingName:qe||void 0,onBuyerIdentityReady:J,billingApiUrl:ze,onTokenizedBody:xn,onErrorChange:we,isProcessing:j,onButtonClick:me,onDecline:u,onTechnicalFailure:lo,runBeforeButtonClick:cr,onLoadStateChange:ks,placeholderBorderRadius:Jr,popupCapabilityOwner:f,externalTelemetryContext:Bs,presentationMode:co})}),po?(0,c.jsx)(Jt.Elements,{stripe:Un,options:gs,children:(0,c.jsx)(Kl,{sessionId:e,nonce:t,email:_.email,billingName:qe||void 0,onBuyerIdentityReady:J,billingApiUrl:ze,intentKind:xe>0?"payment":"setup",expressMethods:uo,onTokenizedBody:xn,onErrorChange:we,onButtonClick:me,onDecline:u,onTechnicalFailure:lo,runBeforeButtonClick:cr,onLoadStateChange:Rs,placeholderBorderRadius:Jr,popupCapabilityOwner:f,externalTelemetryContext:$e})}):null,!po&&xs?(0,c.jsx)("div",{style:{height:pa,borderRadius:Jr,background:"#e5e7eb",animation:"flopay-pulse 1.5s ease-in-out infinite"}}):null,qo&&(0,c.jsx)(Gl,{sessionId:e,nonce:t,email:_.email,billingName:[_.firstName,_.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:J,billingApiUrl:ze,paymentElementMethods:va,stripeInstance:Un,paymentElementBaseOptions:fi,onTokenizedBody:xn,onErrorChange:we,onButtonClick:me,onDecline:u,runBeforeButtonClick:cr,onLoadStateChange:Es,isProcessing:j,submitButtonColor:Zr,submitButtonBorderRadius:Yt,submitButtonStyle:E.submitButton,onExpandApm:In,expandedApmMethod:tn,themeId:Ve,buttonAppearance:{backgroundColor:E.cardButton?.backgroundColor,borderColor:E.cardInputBorder,textColor:E.cardButton?.color,borderRadius:Jr}}),ie&&(0,c.jsx)("button",{type:"button",onClick:async()=>{j||!(await cr("card")).proceed||(me?.("card"),sr())},disabled:j,style:{width:"100%",...K,...E.cardButton,...is({themeBundle:It,resolvedPrimaryColor:Zr,resolvedBorderRadius:Yt,submitButtonStyle:E.submitButton,explicitPrimaryColor:Mn?.colorPrimary}),fontSize:E.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:Se=>{!j&&(It||Mn?.colorPrimary)&&(Se.currentTarget.style.backgroundColor=Mc)},onMouseLeave:Se=>{(It||Mn?.colorPrimary)&&(Se.currentTarget.style.backgroundColor=Zr)},onMouseDown:Se=>{Se.currentTarget.style.transform="scale(0.985)"},onMouseUp:Se=>{Se.currentTarget.style.transform="scale(1)"},children:(0,c.jsx)(ho,{content:ft})}),Ye&&dt==="buttons"&&(0,c.jsx)(Io,{margin:"0.25rem 0",styleOverride:E.errorBanner,children:Ye})]}),ie&&S&&(0,c.jsx)("div",{style:{gridArea:"1 / 1",...ee?{animation:ee}:{},...dt==="collapsing"?{pointerEvents:"none"}:{}},children:Ws}),Y&&Gs&&tn&&_a&&Un&&(0,c.jsx)("div",{style:{gridArea:"1 / 1",...fo?{animation:fo}:{},...dt==="apm-collapsing"?{pointerEvents:"none"}:{}},children:(0,c.jsxs)("div",{style:{backgroundColor:Ci,borderRadius:Ri,...Ho,padding:Ii},children:[(0,c.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[(0,c.jsxs)("button",{type:"button","data-testid":"flopay-apm-back-button",onClick:A,style:{display:"inline-flex",alignItems:"center",gap:Si?0:"0.5rem",background:"none",border:"none",cursor:"pointer",color:"#4b5563",fontSize:E.backButtonFontSize??"0.85rem",fontWeight:500,padding:0,transition:"color 0.15s",flexShrink:0,...E.backButton},"aria-label":"Back to payment methods",children:[(0,c.jsx)("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",transition:"background-color 0.15s",...E.backButtonIcon},children:(0,c.jsx)("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:(0,c.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,c.jsx)(bo,{content:ke})]}),(0,c.jsx)("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:E.titleFontSize??"1.05rem",color:wi,paddingRight:80,...E.title},children:`Pay with ${(0,y.getStripeMethodDisplayName)(tn)}`})]}),(0,c.jsx)(Jt.Elements,{stripe:Un,options:_a,children:(0,c.jsx)(ts,{method:tn,sessionId:e,nonce:t,email:_.email,billingName:[_.firstName,_.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:J,billingApiUrl:ze,onTokenizedBody:xn,onErrorChange:we,onDecline:u,onCancel:A,runBeforeButtonClick:cr,onButtonClick:me,isProcessing:j,submitButtonColor:Zr,submitButtonBorderRadius:Yt,submitButtonStyle:E.submitButton,errorText:Ye})},tn)]})})]})]})}return Gs&&tn&&_a&&Un&&Y?(0,c.jsxs)("form",{onSubmit:Pi,className:I,noValidate:!0,style:{position:"relative"},children:[(0,c.jsx)(Zi,{}),L&&(0,c.jsx)(er,{status:L,errorMessage:Ye,authorized:Nn}),(0,c.jsx)("div",{style:{...fo?{animation:fo}:{},...dt==="apm-collapsing"?{pointerEvents:"none"}:{}},children:(0,c.jsxs)("div",{style:{backgroundColor:Ci,borderRadius:Ri,...Ho,padding:Ii},children:[(0,c.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[(0,c.jsxs)("button",{type:"button","data-testid":"flopay-apm-back-button-default",onClick:A,style:{display:"inline-flex",alignItems:"center",gap:Si?0:"0.5rem",background:"none",border:"none",cursor:"pointer",color:"#4b5563",fontSize:E.backButtonFontSize??"0.85rem",fontWeight:500,padding:0,transition:"color 0.15s",flexShrink:0,...E.backButton},"aria-label":"Back to payment methods",children:[(0,c.jsx)("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",transition:"background-color 0.15s",...E.backButtonIcon},children:(0,c.jsx)("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:(0,c.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,c.jsx)(bo,{content:ke})]}),(0,c.jsx)("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:E.titleFontSize??"1.05rem",color:wi,paddingRight:80,...E.title},children:`Pay with ${(0,y.getStripeMethodDisplayName)(tn)}`})]}),(0,c.jsx)(Jt.Elements,{stripe:Un,options:_a,children:(0,c.jsx)(ts,{method:tn,sessionId:e,nonce:t,email:_.email,billingName:[_.firstName,_.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:J,billingApiUrl:ze,onTokenizedBody:xn,onErrorChange:we,onDecline:u,onCancel:A,runBeforeButtonClick:cr,onButtonClick:me,isProcessing:j,submitButtonColor:Zr,submitButtonBorderRadius:Yt,submitButtonStyle:E.submitButton,errorText:Ye})},tn)]})})]}):(0,c.jsxs)("form",{onSubmit:Pi,className:I,noValidate:!0,style:{position:"relative"},children:[(0,c.jsx)(Zi,{}),L&&(0,c.jsx)(er,{status:L,errorMessage:Ye,authorized:Nn}),(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[Hs("flopay-direct-paypal-gate-debug-default"),Ks("flopay-stripe-gate-debug-default"),No&&ut&&(0,c.jsxs)(c.Fragment,{children:[m&&(0,c.jsx)("div",{"data-testid":"flopay-paypal-direct-retry-notice-default",style:{padding:"8px 10px",background:"#fef3c7",border:"1px solid #fcd34d",borderRadius:6,color:"#78350f",fontSize:13,lineHeight:1.4},children:"Please confirm your PayPal payment to complete checkout."}),(0,c.jsx)(ea.Provider,{value:f,children:(0,c.jsx)(na,{sessionId:e,nonce:t,billingApiUrl:ze,email:_.email,billingName:qe||void 0,onBuyerIdentityReady:J,clientId:ut.clientId,environment:ut.environment,currency:jt.toUpperCase(),isSubscription:Et,providerObjectType:Re,approvalPresentation:Sa==="popup"?void 0:Sa,onTokenizedBody:xn,onComplete:l,onErrorChange:we,onDecline:u,onTechnicalFailure:lo,onButtonClick:me,runBeforeButtonClick:cr,isProcessing:j,onLoadStateChange:gi,onInitializationStateChange:hi,session:vt,existingOrderId:m?.orderId,debug:V},m?.orderId??"fresh")})]}),Uo&&(0,c.jsx)(Jt.Elements,{stripe:zo,options:hs,children:(0,c.jsx)(Hl,{sessionId:e,nonce:t,email:_.email,billingName:qe||void 0,onBuyerIdentityReady:J,billingApiUrl:ze,onTokenizedBody:xn,onErrorChange:we,isProcessing:j,onButtonClick:me,onDecline:u,onTechnicalFailure:lo,runBeforeButtonClick:cr,onLoadStateChange:ks,placeholderBorderRadius:Jr,popupCapabilityOwner:f,externalTelemetryContext:Bs,presentationMode:co})}),po&&(0,c.jsx)(Jt.Elements,{stripe:Un,options:gs,children:(0,c.jsx)(Kl,{sessionId:e,nonce:t,email:_.email,billingName:qe||void 0,onBuyerIdentityReady:J,billingApiUrl:ze,intentKind:xe>0?"payment":"setup",expressMethods:uo,onTokenizedBody:xn,onErrorChange:we,onButtonClick:me,onDecline:u,onTechnicalFailure:lo,runBeforeButtonClick:cr,onLoadStateChange:Rs,placeholderBorderRadius:Jr,popupCapabilityOwner:f,externalTelemetryContext:$e})}),qo&&(0,c.jsx)(Gl,{sessionId:e,nonce:t,email:_.email,billingName:[_.firstName,_.lastName].filter(Boolean).join(" ").trim()||void 0,billingApiUrl:ze,paymentElementMethods:va,stripeInstance:Un,paymentElementBaseOptions:fi,onTokenizedBody:xn,onErrorChange:we,onButtonClick:me,onDecline:u,runBeforeButtonClick:cr,onLoadStateChange:Es,isProcessing:j,submitButtonColor:Zr,submitButtonBorderRadius:Yt,submitButtonStyle:E.submitButton,themeId:Ve,onExpandApm:In,expandedApmMethod:tn,buttonAppearance:{backgroundColor:E.cardButton?.backgroundColor,borderColor:E.cardInputBorder,textColor:E.cardButton?.color,borderRadius:Jr}})]}),ie&&(Ic||kc||Rc)&&(0,c.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",margin:"0.5rem 0 0.75rem",color:"#999",fontSize:"0.85rem"},children:[(0,c.jsx)("div",{style:{flex:1,height:1,backgroundColor:"#ddd"}}),(0,c.jsx)("span",{children:"or pay with card"}),(0,c.jsx)("div",{style:{flex:1,height:1,backgroundColor:"#ddd"}})]}),ie&&Ws]})}var x=require("react/jsx-runtime"),Fo=44,ps="flopay_checkout_saved_payment_resume",ii=new Map,oi=new Map;function oc(e,t){t.settled&&t.consumers===0&&ii.get(e)===t&&ii.delete(e)}function du(e,t,n){let r=oi.get(e);if(r&&(!r.sdkGeneratedIdempotencyKey||!t||r.sdkGeneratedIdempotencyKey===t))return r.attempt;let o=n(),a={attempt:o,sdkGeneratedIdempotencyKey:t};oi.set(e,a);let l=()=>{oi.get(e)===a&&oi.delete(e)};return o.then(l,l),o}function ya(e){return new Promise(t=>setTimeout(t,e))}function ai(e,t,n){let r=La({billingApiUrl:e,sdkPackage:"@flopay/react",sdkVersion:Xe.SDK_VERSION,enabled:t!==!1});return r.beginCheckout(n),r}function fa(e){e.flush().catch(()=>{}).finally(()=>e.destroy())}function ss(e,t,n,r,o,a){let l=ai(e,t,n);l.error({errorCode:r,stage:o,paymentMethodCategory:"unknown",...a,...o==="session_read"?{requestCategory:"session_read"}:{}}),fa(l)}function ac(e,t,n,r){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,...r===void 0?{}:{attempt:r},statusClass:"2xx"})}function ic(e,t,n,r,o){let a=(0,Xe.classifyTelemetryFailure)(t,"CHECKOUT_SESSION_CREATE_FAILED","unknown");return e.performance({stage:n,durationMs:Math.max(0,e.now()-r),durationMode:"machine",requestCategory:n,attempt:o,statusClass:a.statusClass}),t instanceof Xe.FloPayError&&t.code==="session_auto_completed"?!1:t instanceof Xe.FloPayError&&t.type==="validation_error"?(e.terminal({outcome:"validation_rejected",stage:n,paymentMethodCategory:"unknown"}),!1):a.statusClass==="4xx"?(e.terminal({outcome:"validation_rejected",stage:n,paymentMethodCategory:"unknown",requestCategory:n,statusClass:"4xx"}),!1):(e.error({...a,stage:n,paymentMethodCategory:"unknown",requestCategory:n}),!0)}function dc(e,t){let n=e?.data.paypal?.publishableKey;if(n)return{clientId:n,environment:e?.data.paypal?.environment,providerObjectType:e?.data.paypal?.providerObjectType,approvalPresentation:e?.data.paypal?.approvalPresentation,...t?{existingOrderId:t}:{}}}function ls(e){return!e||e.data.stripe?.publishableKey?!1:!!dc(e)?.clientId}var uu={name:"provider_unavailable",initialize:()=>Promise.resolve(),getRawProvider:()=>null,destroy:()=>{}};function pu(e){return new $r.FloPay(uu,{publishableKey:"provider_unavailable",...e})}async function cs(e,t){let{publishableKey:n,paypalPublishableKey:r}=Vi(e);return{...await Wi({publishableKey:n,paypalPublishableKey:r,...t}),publishableKey:n,paypalPublishableKey:r}}function ms(){return typeof window<"u"&&typeof window.sessionStorage<"u"}function mu(){if(!ms())return null;try{let e=window.sessionStorage.getItem(ps);return e?JSON.parse(e):null}catch{return null}}function sc(e){if(ms())try{window.sessionStorage.setItem(ps,JSON.stringify(e))}catch(t){console.warn("[FloPayCheckout] Failed to persist PayPal resume state.",t)}}function ds(){if(ms())try{window.sessionStorage.removeItem(ps)}catch(e){console.warn("[FloPayCheckout] Failed to clear PayPal resume state.",e)}}function yu(){if(typeof window>"u")return;let e=new URL(window.location.href),t=["payment_intent","payment_intent_client_secret","redirect_status"],n=!1;for(let r of t)e.searchParams.has(r)&&(e.searchParams.delete(r),n=!0);n&&window.history.replaceState(window.history.state,"",e.toString())}function lc(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 us(e,t){return e?"custom_layout":t==="buttons"?"buttons_layout":"default_layout"}function fu(e,t){return e?"unknown":t==="buttons"?"buttons":"embedded"}function cc(e){return e?.gateways?.stripe?"stripe":e?.gateways?.paypal?"paypal":void 0}function gu(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 si({sessionId:e,nonce:t,createSession:n,billingApiUrl:r,telemetry:o,appearance:a,locale:l,loading:d,error:u,onComplete:p,onError:b,onInstrument:v,onDecline:M,onCountryChange:I,onZipChange:w,showPayPal:h=!0,showStripe:O=!0,walletPresentation:G="auto",enabledPaymentMethods:T,showApplePay:Y=!0,showGooglePay:U=!0,debug:de=!1,layout:X,theme:he,buttonsTheme:De,buttonsStyles:re,cardButtonContent:Ve,cardBackButtonContent:yt,cardTitleContent:te,showSecurityFooter:Oe,onButtonClick:ft,onBeforeButtonClick:ke,enableAVS:Le,cardFieldOrder:be,cardPreFormSlot:me,avsLayout:Ie,submitLabel:We,className:rt,initialErrorMessage:R=null,initialPayPalOrderId:He,children:ye,checkoutMode:N,confirmLabel:ve,renderConfirmButton:ue,onSessionCompleted:Ke}){let Z=(0,Xe.resolveBillingApiUrl)(r),ot=(0,C.useMemo)(()=>(0,Xe.resolveTheme)(he),[he]),lt=a??ot?.appearance,Ae=n?"embedded_checkout":"standard_checkout",Ne=us(ye,X),[ct,at]=(0,C.useState)(null),[xe,jt]=(0,C.useState)(null),Vt=(0,C.useRef)(null),ut=(0,C.useRef)(null),Et=(0,C.useRef)(0),[q,fe]=(0,C.useState)(null),et=(0,C.useRef)(null),[V,Me]=(0,C.useState)(null),bt=(0,C.useMemo)(()=>n?_o(n):"",[n]),Ge=n?`create:${bt}`:`session:${e??""}`,$=cc(V),Je=(0,C.useRef)(new Set),f=(0,C.useRef)(Ge),P=(0,C.useRef)(Ge);no(()=>{P.current=Ge,f.current!==Ge&&(f.current=Ge,Je.current.clear())},[Ge]);let H=(0,C.useCallback)(A=>{if(P.current===Ge){if(Fi.has(A.name)){if(Je.current.has(A.name))return;Je.current.add(A.name)}st(()=>v?.(A))}},[Ge,v]),ne=ko(H,Ge),$e=(0,C.useRef)(!1),vt=(0,C.useCallback)(A=>{if($e.current)return;let L=A.gateway||!$?A:{...A,gateway:$};H(L)},[H,$]);(0,C.useEffect)(()=>{ne({class:"lifecycle",name:"checkout.mount"})},[ne]);let[Re,ae]=(0,C.useState)(e??""),it=e??Re,Ct=n?"":it,[Nt,ze]=(0,C.useState)(!0),[Ft,Ue]=(0,C.useState)(null),[Fn,Rn]=(0,C.useState)(0),[Mt,wn]=(0,C.useState)("full"),[Dn,On]=(0,C.useState)(!1),[rn,Ce]=(0,C.useState)(R),[St,Tt]=(0,C.useState)(null),[vn,Bt]=(0,C.useState)(null),[Vn,pn]=(0,C.useState)(!1),[Wt,an]=(0,C.useState)(void 0),[Wn,mn]=(0,C.useState)(""),[wt,Zt]=(0,C.useState)(!1),[yn,Dt]=(0,C.useState)(!1),[Qt,Ht]=(0,C.useState)(!1),fn=(0,C.useRef)(null),gt=(0,C.useRef)(0),Q=(0,C.useRef)(void 0),[Ln,Nn]=(0,C.useState)("loading"),[hr,Cn]=(0,C.useState)(0),sn=(0,C.useRef)(!1),_n=(0,C.useRef)(!1),_e=(0,C.useRef)(!1),ht=(0,C.useRef)(null),ie=(0,C.useRef)(null),F=(0,C.useMemo)(()=>({checkoutMode:N??Mt,layout:fu(ye,X)}),[N,ye,Mt,X]),Ze=(0,C.useRef)(p);Ze.current=p;let se=(0,C.useRef)(b);se.current=b;let Hn=(0,C.useRef)(M);Hn.current=M;let gn=(0,C.useCallback)(A=>Ha(ht,async L=>{try{return await A(L)}catch(B){throw L.aborted?Xr(B):B}}),[]);(0,C.useEffect)(()=>()=>{ht.current?.abort(),ht.current=null},[]);let Kt=(0,C.useCallback)((A,L)=>{Vt.current=A,jt(A),et.current=L,fe(L)},[]),Kn=(0,C.useCallback)(()=>{let A=ut.current;A&&(ut.current=null,A.destroy())},[]);(0,C.useEffect)(()=>{dn(xe)?.setCheckoutContext(F),q&&q!==xe&&dn(q)?.setCheckoutContext(F)},[xe,q,F]);let nt=(0,C.useRef)(Ke);nt.current=Ke;let jr=(0,C.useCallback)(A=>{Nn(A),!(A!=="exhausted"||_e.current)&&(_e.current=!0,se.current?.(new Xe.FloPayError("PayPal is temporarily unavailable. Please try again.","api_error",{code:"paypal_init_timeout"})))},[]),Gt=(0,C.useCallback)(()=>{Nn("retrying"),Cn(A=>A+1)},[]);(0,C.useEffect)(()=>{Nn("loading"),Cn(0),_e.current=!1},[it]),(0,C.useEffect)(()=>{console.info("[FloPay] Checkout initialized",{sdk_version:Xe.SDK_VERSION,checkout_type:Ae,checkout_layout:Ne,billing_api_url:Z})},[Ne,Ae,Z]);let hn=(0,C.useMemo)(()=>n?_o(n,!0):"",[n]),Mr=(0,C.useMemo)(()=>Wn===hn?Wt:void 0,[Wt,Wn,hn]),Br=(0,C.useMemo)(()=>n?Ti(n,Mr):void 0,[n,Mr]),En=N??Br?.checkoutMode??"full",en=(0,C.useMemo)(()=>Br?{...Br,checkoutMode:En}:void 0,[Br,En]);(0,C.useEffect)(()=>{an(void 0),mn(hn),Q.current=void 0,fn.current=null,Ht(!1)},[hn]),(0,C.useEffect)(()=>{Ce(R)},[R]);let br=(0,C.useCallback)((A,L,B)=>{st(()=>{Hn.current?.(cn(A,L,B))})},[]),Tn=(0,C.useCallback)(async(A,L)=>{Ce(null),Bt(null),pn(!1),Tt("processing");let B=L?.sessionId??A.id,le=A.clientSecret||t,Be=cc(A),pt=Vt.current??et.current,pe=dn(pt),Fe=pt?null:ai(Z,o,F),W={log:E=>{pe?pe.log(E):Fe?.log(E)},error:E=>{pe?pe.error(E):Fe?.error(E)},terminal:E=>{pe?pe.terminal(E):Fe?.terminal(E)},performance:E=>{pe?pe.performance(E):Fe?.performance(E)},now:()=>pe?.now()??Fe?.now()??0,elapsed:E=>pe?.elapsed(E)??Math.max(0,(Fe?.now()??E)-E)},m=W.now(),g=!!(L?.initialAutoProcessingError||L?.initialAutoProcessingPending),D=!1,z,ce=()=>{D||(D=!0,g=!0,z=W.now(),W.log({name:"checkout.recovery.started",stage:"recovery",paymentMethodCategory:"saved"}),W.log({name:"operation.recovery.started",stage:"recovery",paymentMethodCategory:"saved"}))},J=!1,Ye=()=>{J||(J=!0,W.log({name:"payment.processing.completed",stage:"processing",paymentMethodCategory:"saved"}),W.performance({stage:"processing",durationMs:W.elapsed(m),durationMode:"machine",paymentMethodCategory:"saved",requestCategory:"process_payment"}),z!==void 0&&W.performance({stage:"recovery",durationMs:W.elapsed(z),durationMode:"machine",paymentMethodCategory:"saved"}))};W.log({name:"payment.method.selected",stage:"processing",paymentMethodCategory:"saved"}),$e.current=!0;try{W.log({name:"payment.processing.started",stage:"processing",paymentMethodCategory:"saved"})}finally{$e.current=!1}ne({class:"lifecycle",name:"payment.processing.started",provider:Be}),g&&ce();let It;try{let E=kl(L?.initialAutoProcessingError),Pe=L?.initialAutoProcessingError?.type==="3ds_required"&&!L.initialAutoProcessingError.threeDSecureToken&&L.initialAutoProcessingError.nextActionRedirectUrl?{type:"next_action_required",nextActionRedirectUrl:L.initialAutoProcessingError.nextActionRedirectUrl}:null,At,ge=j=>(ce(),gn(oe=>To(j,{billingApiUrl:Z,sessionId:B,nonce:le,session:A,signal:oe})));if(Pe)At=await ge(Pe);else if(E)ce(),E.type==="paypal_redirect_required"&&ie.current?.publishableKey&&sc({sessionId:B,publishableKey:ie.current.publishableKey,paypalPublishableKey:ie.current.paypalPublishableKey}),At=await gn(j=>Ga(E,{flopay:Vt.current,paypalFlopay:et.current,attempt3DS:L?.attempt3DS,billingApiUrl:Z,sessionId:B,session:A,telemetry:!1,signal:j})),E.type==="paypal_redirect_required"&&ds();else if(L?.initialAutoProcessingPending){let j=L.initialAutoProcessingPending,oe=new $r.PaymentAPI(Z,{telemetry:!1}),_=await gn(Ee=>oe.waitForCheckoutSessionCompletion(j.sessionId,{initialDelayMs:j.retryAfterMs,nonce:le,statusUrl:j.statusUrl,signal:Ee})),qe=Kr(_,A),Rt=_.autoProcessingError?.type==="3ds_required"&&_.autoProcessingError.nextActionRedirectUrl?{type:"next_action_required",nextActionRedirectUrl:_.autoProcessingError.nextActionRedirectUrl}:null;if(Rt)At=await ge(Rt);else{if(!Nr(qe))throw vo(qe);At=Lr(qe,B)}}else{if(L?.initialAutoProcessingError)throw Er(L.initialAutoProcessingError,"Automatic payment failed. Please try again.",{checkoutMethod:L.initialAutoProcessingError.checkoutMethod});if(L?.fromCreateSession)return L?.fallbackToFull&&(wn("full"),lc("full")),!1;{let j=await Ao({billingApiUrl:Z,sessionId:B,session:A,nonce:le,telemetry:!1});j.type==="success"?At=j.result:j.type==="next_action_required"?At=await ge(j):(ce(),j.type==="paypal_redirect_required"&&ie.current?.publishableKey&&sc({sessionId:B,publishableKey:ie.current.publishableKey,paypalPublishableKey:ie.current.paypalPublishableKey}),At=await gn(oe=>Ga(j,{flopay:Vt.current,paypalFlopay:et.current,attempt3DS:L?.attempt3DS,billingApiUrl:Z,sessionId:B,session:A,telemetry:!1,signal:oe})),j.type==="paypal_redirect_required"&&ds())}}B&&Eo(B),Ye(),g&&(W.log({name:"checkout.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"}),W.log({name:"operation.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"})),W.terminal({outcome:At.status==="authorized"?"payment_authorized":"payment_succeeded",paymentMethodCategory:"saved"}),pn(At.status==="authorized"),Tt("success"),await ya(600),It=()=>Ze.current?.(At)}catch(E){let Pe=sa(E);if(Pe.code==="three_ds_aborted")return!1;let At=Pe.checkoutMethod??ia;Ce(Pe.message),Bt(Pe.message),pn(!1),L?.fallbackToFull&&(W.log({name:"operation.fallback",stage:"recovery",paymentMethodCategory:"saved"}),wn("full"),lc("full")),Ye();let ge=Pe.statusCode===void 0?void 0:(0,Xe.telemetryStatusClass)(Pe.statusCode,"unknown"),j=ge==="4xx"?{requestCategory:"process_payment",statusClass:ge}:{},oe=ge===void 0||ge==="4xx";if(oe&&(Pe.telemetryOutcome==="payment_declined"||!!(Pe.declineCode||Pe.code?.toLowerCase().includes("declin"))))W.terminal({outcome:"payment_declined",paymentMethodCategory:"saved",...j});else if(oe&&(Pe.telemetryOutcome==="validation_rejected"||Pe.type==="validation_error"))W.terminal({outcome:"validation_rejected",paymentMethodCategory:"saved",...j});else{let Rt=(0,Xe.classifyTelemetryFailure)(E,g?"RECOVERY_FAILED":"PAYMENT_PROCESSING_FAILED","unknown"),Ee=Pe.telemetryRequestCategory??"process_payment";$e.current=!0;try{W.error({...Rt,...Pe.telemetryFailureCategory?{failureCategory:Pe.telemetryFailureCategory}:{},stage:g?"recovery":"processing",paymentMethodCategory:"saved",requestCategory:Ee})}finally{$e.current=!1}ne({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:Ee,provider:Be})}return st(()=>se.current?.(Pe)),br(At,Pe,{code:Pe.code,declineCode:Pe.declineCode}),Tt("error"),await Promise.allSettled([ya(400),L?.ensureProvidersReady?L.ensureProvidersReady():Promise.resolve()]),g&&(W.log({name:"checkout.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"}),W.log({name:"operation.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"})),!1}finally{Ye(),Fe&&fa(Fe),Tt(null),Bt(null)}return st(It),!0},[br,ne,t,Z,gn,o,F]);(0,C.useEffect)(()=>{if(typeof window>"u"||_n.current)return;let A=new URLSearchParams(window.location.search),L=A.get("payment_intent_client_secret");if(!L)return;let B=mu();B&&(_n.current=!0,(async()=>{let le,Be=0;Ce(null),Bt(null),Tt("processing"),On(!0);try{if(A.get("redirect_status")==="failed")throw Object.assign(new Xe.FloPayError("PayPal payment was declined. Please try again.","api_error",{declineCode:"paypal_redirect_failed"}),{checkoutMethod:"paypal"});let{flopay:pt,paypalFlopay:pe}=await Wi({publishableKey:B.publishableKey,paypalPublishableKey:B.paypalPublishableKey,billingApiUrl:Z,locale:l,telemetry:o});le=dn(pe??pt),le?.setCheckoutContext(F),Be=le?.now()??0,le?.log({name:"provider.redirect.resumed",stage:"redirect_resume",provider:"paypal",paymentMethodCategory:"paypal"}),le?.log({name:"operation.recovery.started",stage:"recovery",provider:"paypal",paymentMethodCategory:"paypal"});let Fe=(pe??pt)?.getRawProvider();if(!Fe)throw Object.assign(new Xe.FloPayError("PayPal is not available.","api_error"),{checkoutMethod:"paypal"});let{paymentIntent:W,error:m}=await Fe.retrievePaymentIntent(L);if(m)throw Object.assign(new Xe.FloPayError(m.message??"Failed to retrieve PayPal payment status.","api_error",{code:m.code}),{checkoutMethod:"paypal"});let g=ol(W?.status);if(!W||g==="failed")throw Object.assign(new Xe.FloPayError("PayPal payment was not completed. Please try again.","api_error"),{checkoutMethod:"paypal"});let D=typeof W.payment_method=="string"?W.payment_method:W.payment_method?.id,z=g;if(B.sessionId){let Ye=(await new $r.PaymentAPI(Z,{telemetry:!1}).getUnifiedCheckoutSession(B.sessionId)).data.session;if(Ye&&Ye.status!=="complete"){let It=await Ao({billingApiUrl:Z,sessionId:B.sessionId,session:Ye,telemetry:!1,tokenizedData:{id:D??W.id,type:"card",threeDSecureActionResultTokenId:W.id,isPaypal:!0}});if(It.type!=="success")throw Object.assign(new Xe.FloPayError("Failed to finalize PayPal payment.","api_error"),{checkoutMethod:"paypal"});z=It.result.status}}B.sessionId&&Eo(B.sessionId),le?.log({name:"operation.recovery.completed",stage:"recovery",provider:"paypal",paymentMethodCategory:"paypal"}),le?.performance({stage:"redirect_resume",durationMs:le.elapsed(Be),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"}),le?.terminal({outcome:"payment_succeeded",provider:"paypal",paymentMethodCategory:"paypal"}),Tt("success"),await ya(600),st(()=>Ze.current?.({status:z,paymentIntentId:W.id,paymentMethodId:D,checkoutMethod:"paypal"}))}catch(pt){let pe=sa(pt),Fe=pe.checkoutMethod??"paypal",W=!!(pe.declineCode||pe.code?.toLowerCase().includes("declin"));if(le)le.performance({stage:"redirect_resume",durationMs:le.elapsed(Be),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"}),W?le.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal"}):le.error({errorCode:"REDIRECT_RESUME_FAILED",stage:"redirect_resume",provider:"paypal",paymentMethodCategory:"paypal"});else if(W){let m=ai(Z,o,F);m.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal"}),fa(m)}else ss(Z,o,F,"REDIRECT_RESUME_FAILED","redirect_resume");Ce(pe.message),Bt(pe.message),st(()=>se.current?.(pe)),br(Fe,pe,{code:pe.code,declineCode:pe.declineCode}),Tt("error"),await ya(400)}finally{ds(),yu(),Tt(null),Bt(null),On(!1)}})())},[br,l,Z,o,F]);let Fr=(0,C.useRef)(null),An=(0,C.useMemo)(()=>en?_o(en):"",[en]),Pr=(0,C.useRef)(en);Pr.current=en,(0,C.useEffect)(()=>{ae(e??"")},[e]),(0,C.useEffect)(()=>{sn.current=!1,Ce(R),Bt(null),pn(!1),Tt(null)},[An,R,e]);async function vr(A,L,B){let le=ai(Z,o,F),Be=new $r.PaymentAPI(Z,{telemetry:!1}),pt=!1;try{let pe=A.idempotencyKey===void 0?void 0:(0,Xe.resolveIdempotencyKey)(A.idempotencyKey),Fe=Li(L,B),W=Ni(L,B);Fe?.canonicalIdentity===B&&W&&W.canonicalIdentity===void 0&&(Va(L,B,W.idempotencyKey),W={...W,canonicalIdentity:B});let m=pe??(W?.canonicalIdentity===B?W.idempotencyKey:void 0),g,D=!1;le.log({name:Fe?"operation.cache.hit":"operation.cache.miss",stage:"session_create",requestCategory:"session_create"});let z=Fe?.sid??null,ce=null,J,Ye,It=!1;if(z)try{ce=await Be.getUnifiedCheckoutSession(z,Fe?.nonce),Fe&&Fe.canonicalIdentity===void 0&&(vl(ce.data.session,A)?(ja(L,B,z,Fe.nonce??ce.data.session?.clientSecret),W&&W.canonicalIdentity===void 0&&(Va(L,B,W.idempotencyKey),m??(m=W.idempotencyKey))):($a(L,B),W=null,m=pe,z=null,ce=null));let Pe=ce?.data.session?.status,At=ce?.data.session,ge=At?.clientSecret||Fe?.nonce;if(z&&At?.buyerIdentified===!1&&ge&&(Ye=Po(Be,z,ge,A.account)),z&&ce&&Pe==="complete"){if(zi(z))return{sid:z,result:ce};$a(L,B),z=null,ce=null,D=!0}}catch{le.log({name:"operation.fallback",stage:"session_read",requestCategory:"session_read"}),Fe?.canonicalIdentity===void 0?($a(L,B),m=pe):qa(L,B),z=null}if(!z){!pe&&(D||!m)&&(m=(0,Xe.resolveIdempotencyKey)(),g=m),m&&Va(L,B,m);let Pe=le.now(),At=0;le.log({name:"session.create.started",stage:"session_create",requestCategory:"session_create"});let ge={...A,idempotencyKey:m,avsCheck:!!Le,avsConfig:typeof Le=="object"?Le:void 0,checkoutType:"embedded_checkout",checkoutLayout:us(ye,X)};Object.defineProperty(ge,$r.SESSION_CREATE_TELEMETRY,{configurable:!1,enumerable:!1,value:{onAttempt:_=>{At=Math.max(At,_)}}});let j=()=>{ac(le,"session_create",Pe,At)},oe=_=>{ic(le,_,"session_create",Pe,At)&&ne({class:"technical_error",errorCode:"CHECKOUT_SESSION_CREATE_FAILED",requestCategory:"session_create"})};try{if((0,Xe.isDetachedSessionEligible)(ge)){let _=await Be.createDetachedSession(ge);_.claimed.catch(()=>{}),ce=_.shell,z=_.sessionId,Ye=_.claim;let qe=le.now();le.log({name:"session.claim.started",stage:"session_claim",requestCategory:"session_claim"}),J=_.claimed.then(Rt=>{let Ee=Rt.data.session?.id??_.sessionId;return Ee&&ja(L,B,Ee,Rt.data.session?.clientSecret??_.nonce),ac(le,"session_claim",qe),j(),Rt},Rt=>{throw qa(L,B),ic(le,Rt,"session_claim",qe,0)&&ne({class:"technical_error",errorCode:"CHECKOUT_SESSION_CREATE_FAILED",requestCategory:"session_claim"}),Rt}).finally(()=>fa(le)),J.catch(()=>{}),pt=!0,le.log({name:"session.shell.ready",stage:"session_shell",requestCategory:"session_create",paymentMethodCategory:"card",statusClass:"2xx"}),le.performance({stage:"session_shell",durationMs:le.now()-Pe,durationMode:"machine",requestCategory:"session_create",attempt:At,statusClass:"2xx",paymentMethodCategory:"card"})}else ce=await Be.createAndFetchSession(ge),j()}catch(_){throw oe(_),_}z=ce.data.session?.id??z??"",z&&!J&&ja(L,B,z,ce.data.session?.clientSecret)}let E=ce?.data.session;return!Ye&&z&&E?.buyerIdentified===!1&&E.clientSecret&&(Ye=Po(Be,z,E.clientSecret,A.account)),{sid:z??"",result:ce,sdkGeneratedIdempotencyKey:g,...J?{claimed:J}:{},...Ye?{claim:Ye}:{},...It?{claimRequiresIdentity:!0}:{}}}finally{pt||fa(le)}}let rr=(0,C.useRef)(vr);no(()=>{rr.current=vr},[vr]);let Gn=(0,C.useCallback)(async(A,L)=>{let B=Pr.current;if(!B)throw new Xe.FloPayError("createSession is required to bootstrap checkout.","validation_error");let le=Ti(B,A),Be=_o(le),pt=Pl(le),pe=ii.get(Be);if(!pe){let m={canonicalIdentity:Be,promise:rr.current(le,pt,Be),consumers:0,settled:!1};pe=m,ii.set(Be,m);let g=()=>{m.settled=!0,oc(Be,m)};m.promise.then(g,g)}pe.consumers+=1;let Fe=!1,W=()=>{Fe||(Fe=!0,pe.consumers-=1,oc(Be,pe))};L?.(W);try{let m=await pe.promise;Fr.current=Be,A&&(mn(hn),an(E=>tl(E,A)));let{sid:g,result:D,claimed:z,claim:ce,claimRequiresIdentity:J}=m;if(Q.current=ce,Ht(J===!0),at(D),D.data.session&&Me(D.data.session),g&&ae(g),z){gt.current+=1;let E=gt.current;fn.current=z,Dt(!0),z.then(Pe=>{gt.current===E&&(fn.current===z&&(fn.current=null),at(Pe),Pe.data.session&&Me(Pe.data.session),Dt(!1),Ht(!1))},Pe=>{gt.current===E&&(fn.current===z&&(fn.current=null),Dt(!1),Ht(!1),Ue(Pe instanceof Xe.FloPayError?Pe:new Xe.FloPayError(Pe instanceof Error?Pe.message:"Failed to create session","api_error")))})}else gt.current+=1,fn.current=null,Dt(!1),Ht(!1);let{flopay:Ye,paypalFlopay:It}=await cs(D,{billingApiUrl:Z,locale:l,telemetry:o});return Kt(Ye,It),ze(!1),m}catch(m){throw Fr.current===Be&&(Fr.current=null),m}finally{L||W()}},[hn,Kt,l,Z,o]),Yn=(0,C.useRef)(Tn);Yn.current=Tn;let xt=(0,C.useRef)(Gn);xt.current=Gn;let or=(0,C.useCallback)(async A=>{if(!gu(A)||wt)return{sessionId:Re,session:V};Zt(!0);try{let L=await Gn(A);return{sessionId:L.sid,session:L.result.data.session??null}}finally{Zt(!1)}},[Gn,wt,Re,V]),kn=(0,C.useCallback)(async A=>{let L=Q.current;if(!L)return;let B=gt.current,le=await L(A);gt.current===B&&(at(le),le.data.session&&Me(le.data.session))},[]),Xn=(0,C.useCallback)(async()=>{await fn.current},[]),Cr=(0,C.useCallback)(async()=>(await Xn(),{proceed:!0}),[Xn]);(0,C.useEffect)(()=>{let A=!1,L,B=++Et.current;Kn(),Ue(null),Rn(0);let le=()=>{A=!0,Et.current===B&&(Et.current+=1,Kn())},Be=Pr.current;if(An&&Be)return wn(En),ze(!1),Fr.current===An?le:(Me(nl(Be,N)),(async()=>{let Fe=typeof window<"u"&&new URLSearchParams(window.location.search).has("payment_intent"),W=En==="auto"&&!sn.current&&!Fe;W&&(Ce(null),Bt(null),Tt("processing"));try{let m=await xt.current(void 0,ce=>{L=ce}),g=m.result.data.session??null;ie.current=Vi(m.result);let D=ls(m.result),z=zi(m.sid||g?.id);if(!A&&W&&g&&!D&&!z){sn.current=!0,await du(An,m.sdkGeneratedIdempotencyKey,()=>Yn.current(g,{attempt3DS:!0,fallbackToFull:!0,fromCreateSession:!0,initialAutoProcessingError:m.result.autoProcessingError,initialAutoProcessingPending:m.result.autoProcessingPending,autoProcessingAttempted:m.result.autoProcessingAttempted,sessionId:m.sid||g.id}));return}!A&&W&&((D||z)&&(sn.current=!0),Tt(null),Bt(null))}catch(m){if(A)return;let g=Aa(m);if(W&&g==="session_auto_completed"){sn.current=!0,Tt("success"),await ya(600),A||(st(()=>{Ze.current?.({status:"succeeded"})}),Tt(null),Bt(null));return}W&&(Tt(null),Bt(null));let D=m instanceof Xe.FloPayError?m:new Xe.FloPayError(m instanceof Error?m.message:"Failed to create session","api_error");Ue(D)}finally{L?.(),L=void 0}})(),()=>{le(),L?.()});ze(!0);async function pt(){let Fe=!1,W=null;try{let m=new $r.PaymentAPI(Z,{telemetry:!1}),g=await m.getUnifiedCheckoutSession(it,t);if(W=g,A)return;at(g);let D=g.data.session??null;if(Me(D),!D)throw new Xe.FloPayError("No session data returned","api_error");let z=D.checkoutMode;if(z==="setup")throw new Xe.FloPayError("This is a card setup session. Use FloPayCardSetup instead of FloPayCheckout.","validation_error",{code:"InvalidCardSetupSurface",param:"sessionId"});if(D.status==="authorized"){ze(!1),st(()=>{Ze.current?.(Lr(D,it)),nt.current?.(D.successUrl??"")});return}if(D.status==="complete"){ze(!1),st(()=>{nt.current?.(D.successUrl??"")});return}if(D.status==="expired")throw Ta(D);Fe=!0;let ce=N??z??"full";wn(ce),gt.current+=1;let J=D.clientSecret||t;Q.current=D.buyerIdentified===!1&&J?Po(m,it,J,{...D.customer?.id?{userId:D.customer.id}:{}}):void 0,Dt(!1),Ht(!1);let Ye=typeof window<"u"&&new URLSearchParams(window.location.search).has("payment_intent"),It=ls(g);if(ce==="auto"&&!sn.current&&!Ye&&!It){sn.current=!0;let E=pe(g);try{if(await Yn.current(D,{attempt3DS:!0,fallbackToFull:!0,ensureProvidersReady:()=>E,sessionId:it||D.id}),A)return;await E,A||ze(!1);return}catch{if(A)return;await E,A||ze(!1);return}}await pe(g),A||ze(!1)}catch(m){if(A)return;let g=el(m,Fe);if(Fe&&ne({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED"}),g){let{errorCode:z,stage:ce,...J}=g;ss(Z,o,F,z,ce,J)}if(g?.stage==="provider_load"&&(N??W?.data.session?.checkoutMode??"full")==="full"&&Qs(W,h,O)){let z=pu({billingApiUrl:Z,locale:l,telemetry:o});ut.current=z,Kt(z,null),Rn(1),ze(!1);return}let D=m instanceof Xe.FloPayError&&g?.stage!=="provider_load"?m:Zs();D!==m&&st(()=>se.current?.(D)),Ue(D),ze(!1)}}async function pe(Fe){let{flopay:W,paypalFlopay:m,...g}=await cs(Fe,{billingApiUrl:Z,locale:l,telemetry:o});ie.current={publishableKey:g.publishableKey,paypalPublishableKey:g.paypalPublishableKey},Kt(W,m),Rn(0)}return pt(),le},[N,An,En,Ct,t,h,O]);let dt=(0,C.useCallback)(async()=>{if(!ct||Fn!==1)return;let A=Et.current;Rn(2);try{let{flopay:L,paypalFlopay:B}=await cs(ct,{billingApiUrl:Z,locale:l,telemetry:o});if(Et.current!==A)return;Kn(),Kt(L,B),Rn(0)}catch(L){if(Et.current!==A)return;let{errorCode:B,stage:le,...Be}=_i(L);ss(Z,o,F,B,le,Be)}},[Kn,Kt,l,Fn,Z,o,F,ct]),on=!!(it&&(V?.clientSecret||t)),tn=Dn||!on,Dr=(0,C.useCallback)(async()=>{if(!(Dn||!on||!V)){On(!0),Ce(null);try{await Tn(V,{attempt3DS:!0,fallbackToFull:!0,sessionId:it||V.id})}finally{On(!1)}}},[it,Dn,on,Tn,V]),zn=dc(ct,He),Vr=ls(ct),ar=(0,C.useMemo)(()=>{if(!(!ct||!V||!ct.data.stripe?.publishableKey))return{billingApiUrl:Z}},[ct,V,Z]),ir=!!(n&&!ye&&X==="buttons"&&ke&&En==="full"),bn=!!(it&&(V?.vault?.html||Wr(V))),sr=(0,C.useMemo)(()=>({session:V,loading:Nt,error:Ft,checkoutMode:Mt,inlineSessionDraft:en,applyInlineSessionPatch:ir?or:void 0,inlineSessionPatchProcessing:wt,claimPending:yn,claimRequiresIdentity:Qt,claimBuyerIdentity:kn,waitForDataAttachment:Xn}),[V,Nt,Ft,Mt,en,ir,or,wt,yn,Qt,kn,Xn]),Or=!!n&&X==="buttons"&&!Vr&&!bn&&(!xe||!ar),In=St?(0,x.jsx)(er,{status:St,errorMessage:vn,authorized:Vn}):null;if(Nt&&!bn){if(d)return(0,x.jsxs)(x.Fragment,{children:[d,In]});if(X==="buttons"){let A=ot?.buttonsLayout?.cardButton?.borderRadius??ot?.appearance.variables?.borderRadius??8,L=B=>(0,x.jsx)("div",{style:{height:B,borderRadius:A,background:"#e5e7eb",animation:"flopay-loading-pulse 1.5s ease-in-out infinite"}});return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[h&&L(Fo),O&&(Y||U)&&L(Fo),O&&L(Fo),(0,x.jsx)("style",{children:"@keyframes flopay-loading-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }"})]}),In]})}return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)("div",{style:{display:"flex",justifyContent:"center",padding:32},children:[(0,x.jsx)("div",{style:{width:24,height:24,border:"2px solid #e5e7eb",borderTopColor:"#6b7280",borderRadius:"50%",animation:"spin 0.6s linear infinite"}}),(0,x.jsx)("style",{children:"@keyframes spin { to { transform: rotate(360deg); } }"})]}),In]})}return Ft?u?(0,x.jsx)(pr.Provider,{value:sr,children:u(Ft)}):(0,x.jsx)(pr.Provider,{value:sr,children:(0,x.jsx)("div",{role:"alert","data-testid":"flopay-load-error",style:{padding:24,textAlign:"center",color:"#dc2626",fontSize:14},children:Ft.message})}):Or?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(pr.Provider,{value:sr,children:(0,x.jsx)(bu,{onButtonClick:ft,showPayPal:h,showStripe:O,showApplePay:Y,showGooglePay:U,theme:he,buttonsTheme:De,buttonsStyles:re,cardButtonContent:Ve,cardBackButtonContent:yt,cardTitleContent:te})}),In]}):Vr&&V&&zn?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(pr.Provider,{value:sr,children:(0,x.jsxs)("div",{className:rt,style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[rn&&(0,x.jsx)(Io,{icon:!1,children:rn}),Ln==="retrying"&&(0,x.jsx)("div",{role:"status","aria-live":"polite",children:"PayPal is temporarily unavailable. Retrying\u2026"}),Ln==="exhausted"&&(0,x.jsxs)("div",{role:"alert",children:[(0,x.jsx)("div",{children:"PayPal is temporarily unavailable. Please try again."}),(0,x.jsx)("button",{type:"button",onClick:Gt,children:"Retry PayPal"})]}),Ln!=="exhausted"&&(0,x.jsx)("div",{"aria-hidden":Ln==="retrying"?!0:void 0,style:Ln==="retrying"?{position:"relative",height:0,opacity:0,pointerEvents:"none"}:void 0,children:(0,x.jsx)(bl,{sessionId:it,nonce:V.clientSecret||void 0,billingApiUrl:Z,email:V.customer?.email||en?.account?.email,billingName:[V.customer?.firstName,V.customer?.lastName].filter(Boolean).join(" ")||[en?.account?.firstName,en?.account?.lastName].filter(Boolean).join(" ")||void 0,onBuyerIdentityReady:kn,clientId:zn.clientId,environment:zn.environment,currency:(V.currency??"usd").toUpperCase(),isSubscription:V.mode==="subscription",providerObjectType:zn.providerObjectType,approvalPresentation:zn.approvalPresentation,existingOrderId:zn.existingOrderId,onComplete:p,onErrorChange:Ce,onDecline:M,onButtonClick:ft,runBeforeButtonClick:Cr,onInitializationStateChange:jr,allowAutomaticRetry:hr===0,session:V,telemetry:o,telemetryContext:F,onInstrument:vt,debug:de},`${Ge}:paypal-init-${hr}`)})]})}),In]}):Mt==="confirm"?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(pr.Provider,{value:sr,children:(0,x.jsx)(oa,{flopay:xe,paypalFlopay:q,options:ar??{billingApiUrl:Z},onInstrument:vt,children:(0,x.jsxs)("div",{className:rt,children:[rn&&(0,x.jsx)("div",{style:{color:"#dc2626",fontSize:"0.875rem",marginBottom:"0.75rem",textAlign:"center"},children:rn}),ue?ue({onConfirm:Dr,isProcessing:tn}):(0,x.jsx)("button",{type:"button",onClick:Dr,disabled:tn,style:{width:"100%",padding:"0.875rem",backgroundColor:"#4A49FF",color:"white",border:"none",borderRadius:"8px",fontSize:"1rem",fontWeight:600,cursor:tn?"not-allowed":"pointer",opacity:tn?.6:1},children:Dn?"Processing...":ve??"Confirm Purchase"})]})},Ge)}),In]}):(!xe||!ar)&&!(bn&&Mt==="full")?(0,x.jsx)(x.Fragment,{children:In}):(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(pr.Provider,{value:sr,children:(0,x.jsxs)(oa,{flopay:xe,paypalFlopay:q,options:ar??{billingApiUrl:Z},onInstrument:vt,children:[Fn===1&&(0,x.jsx)("button",{type:"button",onClick:dt,children:"Retry payment methods"}),ye?(0,x.jsxs)(x.Fragment,{children:[rn&&(0,x.jsx)("div",{style:{padding:"0.75rem 1rem",marginBottom:"0.75rem",backgroundColor:"#FEF3C7",border:"1px solid #F59E0B",borderRadius:"8px",color:"#92400E",fontSize:"0.875rem"},children:rn}),(0,x.jsx)(hu,{sessionId:it,nonce:V?.clientSecret||void 0,billingApiUrl:Z,session:V,submitLabel:We,walletPresentation:G,children:ye})]}):(0,x.jsx)(ri,{sessionId:it,nonce:V?.clientSecret||void 0,telemetry:o,email:V?.customer?.email||en?.account?.email,userId:V?.customer?.id||en?.account?.userId,firstName:V?.customer?.firstName||en?.account?.firstName,lastName:V?.customer?.lastName||en?.account?.lastName,totalAmount:V?Math.round((0,Xe.buildCheckoutDisplayData)(V).total*100):0,currency:V?.currency?.toLowerCase()??"usd",onComplete:p,onError:b,onDecline:M,error:rn,onErrorChange:Ce,showPayPal:h,showStripe:O,walletPresentation:G,enabledPaymentMethods:Fn?[]:T??ct?.data.stripe?.enabledPaymentMethods??V?.gateways?.stripe?.enabledPaymentMethods,enabledPaymentMethodCountries:ct?.data.stripe?.enabledPaymentMethodCountries,showApplePay:Y,showGooglePay:U,layout:X,theme:he,buttonsTheme:De,buttonsStyles:re,appearance:lt,cardButtonContent:Ve,cardBackButtonContent:yt,cardTitleContent:te,onButtonClick:ft,onBeforeButtonClick:ke,onBuyerIdentityReady:kn,enableAVS:Le,...be?{cardFieldOrder:be}:{},...me?{cardPreFormSlot:me}:{},avsLayout:Ie,country:V?.customer?.country,city:V?.customer?.city,state:V?.customer?.state,onCountryChange:I,onZipChange:w,avsCheck:!!Le,checkoutType:n?"embedded_checkout":"standard_checkout",checkoutLayout:us(ye,X),className:rt,submitLabel:We,directPaypal:zn,isSubscription:V?.mode==="subscription",session:V,dataAttachmentPending:yn,dataAttachmentRequiresIdentity:Qt,debug:de})]},Ge)}),In]})}function hu({sessionId:e,nonce:t,billingApiUrl:n,session:r,submitLabel:o,walletPresentation:a,children:l}){return(0,x.jsx)(x.Fragment,{children:C.default.Children.map(l,d=>{if(!C.default.isValidElement(d))return d;let u=d.props,p={};return u.sessionId||(p.sessionId=e),!u.nonce&&t&&(p.nonce=t),u.billingApiUrl||(p.billingApiUrl=n),u.submitLabel===void 0&&o!==void 0&&(p.submitLabel=o),u.walletPresentation===void 0&&(p.walletPresentation=a),r?.customer&&(u.email||(p.email=r.customer.email),u.userId||(p.userId=r.customer.id),u.firstName||(p.firstName=r.customer.firstName),u.lastName||(p.lastName=r.customer.lastName)),Object.keys(p).length===0?d:C.default.cloneElement(d,p)})})}function bu({onButtonClick:e,showPayPal:t,showStripe:n=!0,showApplePay:r,showGooglePay:o,theme:a,buttonsTheme:l,buttonsStyles:d,cardButtonContent:u,cardBackButtonContent:p,cardTitleContent:b}){let[v,M]=(0,C.useState)(!1),I=(0,C.useMemo)(()=>(0,Xe.resolveTheme)(a),[a]),w=(0,C.useMemo)(()=>{let T=I?.buttonsLayout??(0,Xe.resolveButtonsLayoutTheme)(l);return d?{...T,...d,cardButton:{...T.cardButton,...d.cardButton},cardFormContainer:{...T.cardFormContainer,...d.cardFormContainer},backButton:{...T.backButton,...d.backButton},backButtonIcon:{...T.backButtonIcon,...d.backButtonIcon},submitButton:{...T.submitButton,...d.submitButton},title:{...T.title,...d.title}}:T},[I,l,d]),h=I?.buttonsLayout?.cardButton?.borderRadius??I?.appearance.variables?.borderRadius??8,O=T=>(0,x.jsx)("div",{style:{height:T,borderRadius:h,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}}),G=u===void 0?{boxSizing:"border-box",height:Fo,padding:"0 1rem"}:{padding:"0.9rem 1rem"};if(v){let T=w.cardInputBorder??"#e5e7eb",Y=w.cardInputBackground??"white",U=go(p),de=go(b);return(0,x.jsxs)("div",{style:{backgroundColor:w.cardFormContainer?.backgroundColor??"white",borderRadius:"8px",animation:"flopay-interim-expand 0.35s cubic-bezier(0.4, 0, 0.2, 1) both",overflow:"hidden",...w.cardFormContainer},children:[(0,x.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[(0,x.jsxs)("button",{type:"button",onClick:()=>M(!1),"aria-label":"Back to payment methods",style:{display:"inline-flex",alignItems:"center",gap:U?0:"0.5rem",background:"none",border:"none",color:"#4b5563",fontSize:"0.85rem",fontWeight:500,padding:0,flexShrink:0,opacity:1,cursor:"pointer",...w.backButton},children:[(0,x.jsx)("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",...w.backButtonIcon},children:(0,x.jsx)("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:(0,x.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,x.jsx)(bo,{content:p})]}),de?(0,x.jsx)("div",{style:{flex:1}}):(0,x.jsx)("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:"1.05rem",color:"#262833",paddingRight:80,...w.title},children:(0,x.jsx)(Go,{content:b})})]}),(0,x.jsx)("div",{style:{backgroundColor:Y,border:`1px solid ${T}`,borderTopLeftRadius:8,borderTopRightRadius:8,padding:12,height:45},children:(0,x.jsx)("div",{style:{width:"60%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),(0,x.jsxs)("div",{style:{display:"flex"},children:[(0,x.jsx)("div",{style:{flex:1,backgroundColor:Y,borderTop:"none",borderRight:"none",borderBottom:`1px solid ${T}`,borderLeft:`1px solid ${T}`,borderBottomLeftRadius:8,padding:12,height:45},children:(0,x.jsx)("div",{style:{width:"50%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),(0,x.jsx)("div",{style:{flex:1,backgroundColor:Y,borderTop:"none",borderRight:`1px solid ${T}`,borderBottom:`1px solid ${T}`,borderLeft:`1px solid ${T}`,borderBottomRightRadius:8,padding:12,height:45},children:(0,x.jsx)("div",{style:{width:"40%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})})]}),(0,x.jsx)("div",{style:{backgroundColor:Y,border:`1px solid ${T}`,borderRadius:8,marginTop:8,padding:12,height:45},children:(0,x.jsx)("div",{style:{width:"45%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),(0,x.jsx)("div",{style:{height:50,borderRadius:8,marginTop:16,background:"#c8c8ff",animation:"flopay-interim-pulse 1.5s ease-in-out infinite",...w.submitButton,opacity:.5}}),(0,x.jsx)("style",{children:`
|
|
38
|
+
`}),Vo&&zn&&(0,c.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem",order:ie?-2:0},children:[(0,c.jsxs)("button",{type:"button",onClick:Or,style:{display:"inline-flex",alignItems:"center",gap:wi?0:"0.5rem",background:"none",border:"none",cursor:"pointer",color:"#4b5563",fontSize:E.backButtonFontSize??"0.85rem",fontWeight:500,padding:0,transition:"color 0.15s",flexShrink:0,...E.backButton},"aria-label":"Back to payment methods",children:[(0,c.jsx)("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",transition:"background-color 0.15s",...E.backButtonIcon},children:(0,c.jsx)("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:(0,c.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,c.jsx)(Po,{content:ke})]}),$s?(0,c.jsx)("div",{style:{flex:1}}):(0,c.jsx)("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:E.titleFontSize??"1.05rem",color:"#262833",paddingRight:80,...E.title},children:(0,c.jsx)(Yo,{content:Oe})})]}),!Vo&&!$s&&(0,c.jsx)("div",{style:{textAlign:"center",fontWeight:600,fontSize:"1.1rem",padding:"0.5rem 0",color:ki,order:ie?-3:0,...E.title},children:(0,c.jsx)(Yo,{content:Oe})}),ie&&We&&(0,c.jsx)("div",{style:{order:-2,width:"100%"},children:We}),ie&&Sn&&(0,c.jsxs)("div",{"data-testid":"flopay-vault-identity-fields",style:{order:-1,marginTop:"0.5rem"},children:[(0,c.jsx)("div",{style:{backgroundColor:yo,border:`1px solid ${Jn(Ia)}`,borderRadius:Yt,padding:"10px"},children:(0,c.jsx)("input",{className:"flopay-shared-input",id:"flopay-buyer-email",name:"email",type:"email",autoComplete:"email","aria-label":"Email address",placeholder:"Email address",value:Wt,onChange:s=>{xt("email"),fn.current=s.target.value,an(s.target.value)},onPointerDown:()=>xt("email"),onKeyDown:()=>xt("email"),onBlur:()=>{or("email")&&An(!0),io||mi()},disabled:j,required:!0,"aria-invalid":Ia||void 0,"aria-describedby":Ia?"flopay-buyer-email-error":void 0,"data-testid":"flopay-email",style:{width:"100%",border:"none",outline:"none",background:"transparent",...Ii}})}),Ia&&(0,c.jsx)("div",{id:"flopay-buyer-email-error",role:"alert","data-testid":"flopay-email-error",style:Ho,children:Sr.empty?"Email address is required":"Enter a valid email address"})]}),te&&(0,c.jsx)("div",{style:{order:ie?-1:0},"data-testid":"flopay-avs-fields",children:(()=>{let s=Mt,S=(ne=!1)=>({backgroundColor:yo,border:`1px solid ${Jn(ne)}`,borderRadius:Yt,marginTop:"0.5rem",padding:"10px"}),K=()=>({width:"100%",border:"none",outline:"none",background:"transparent",...Ii}),Ee=(0,y.getStateOptions)(s);return(0,c.jsxs)(c.Fragment,{children:[(0,y.isAVSFieldVisible)(te.address_line_1,s)&&(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("div",{style:S(zt("line1")),children:(0,c.jsx)("input",{className:"flopay-shared-input",id:"flopay-billing-address-line1",name:"billing-address-line1",placeholder:"Street Address (e.g. 123 Main St)",autoComplete:"billing address-line1",value:rn,onChange:ne=>{xt("line1"),gt.current.addressLine1=!0,yn.current=ne.target.value,Ce(ne.target.value)},onPointerDown:()=>xt("line1"),onKeyDown:()=>xt("line1"),onBlur:()=>kn("line1"),disabled:j,required:!0,"aria-invalid":zt("line1")||void 0,"aria-describedby":zt("line1")?"flopay-billing-address-line1-error":void 0,"data-testid":"flopay-address-line1",style:K()})}),zt("line1")&&(0,c.jsx)("div",{id:"flopay-billing-address-line1-error",role:"alert","data-testid":"flopay-address-line1-error",style:Ho,children:"Street address is required"})]}),(0,y.isAVSFieldVisible)(te.address_line_2,s)&&(0,c.jsx)("div",{style:S(),children:(0,c.jsx)("input",{className:"flopay-shared-input",id:"flopay-billing-address-line2",name:"billing-address-line2",placeholder:"Apt, Suite, Unit (optional)",autoComplete:"billing address-line2",value:St,onChange:ne=>{gt.current.addressLine2=!0,Dt.current=ne.target.value,Tt(ne.target.value)},disabled:j,"data-testid":"flopay-address-line2",style:K()})}),((0,y.isAVSFieldVisible)(te.city,s)||(0,y.isAVSFieldVisible)(te.state,s))&&(0,c.jsxs)("div",{style:{display:"flex",gap:"0",marginTop:"0.5rem"},children:[(0,y.isAVSFieldVisible)(te.city,s)&&(0,c.jsx)("div",{style:{flex:1,backgroundColor:yo,borderTop:`1px solid ${Jn(zt("city"))}`,borderRight:`1px solid ${Jn(zt("city"))}`,borderBottom:`1px solid ${Jn(zt("city"))}`,borderLeft:`1px solid ${Jn(zt("city"))}`,padding:"10px",borderTopLeftRadius:Yt,borderBottomLeftRadius:Yt,...(0,y.isAVSFieldVisible)(te.state,s)?{borderRight:"none",borderTopRightRadius:0,borderBottomRightRadius:0}:{borderRadius:Yt}},children:(0,c.jsx)("input",{className:"flopay-shared-input",id:"flopay-billing-city",name:"billing-city",placeholder:"City",autoComplete:"billing address-level2",value:vn,onChange:ne=>{xt("city"),gt.current.city=!0,Qt.current=ne.target.value,Bt(ne.target.value)},onPointerDown:()=>xt("city"),onKeyDown:()=>xt("city"),onBlur:()=>kn("city"),disabled:j,required:!0,"aria-invalid":zt("city")||void 0,"aria-describedby":zt("city")?"flopay-billing-city-error":void 0,"data-testid":"flopay-city",style:K()})}),(0,y.isAVSFieldVisible)(te.state,s)&&(0,c.jsx)("div",{style:{flex:1,backgroundColor:yo,borderTop:`1px solid ${Jn(zt("state"))}`,borderRight:`1px solid ${Jn(zt("state"))}`,borderBottom:`1px solid ${Jn(zt("state"))}`,borderLeft:`1px solid ${Jn(zt("state"))}`,padding:"10px",borderTopRightRadius:Yt,borderBottomRightRadius:Yt,...(0,y.isAVSFieldVisible)(te.city,s)?{borderTopLeftRadius:0,borderBottomLeftRadius:0,borderLeft:`1px solid ${Jn(zt("state")||zt("city"))}`}:{borderRadius:Yt}},children:Ee?(0,c.jsxs)("select",{id:"flopay-billing-state",name:"billing-state",value:Vn,onChange:ne=>{xt("state"),gt.current.state=!0,Ht.current=ne.target.value,pn(ne.target.value)},onPointerDown:()=>xt("state"),onKeyDown:()=>xt("state"),onBlur:()=>kn("state"),disabled:j,autoComplete:"billing address-level1",required:!0,"aria-invalid":zt("state")||void 0,"aria-describedby":zt("state")?"flopay-billing-state-error":void 0,"data-testid":"flopay-state",style:{...K(),cursor:"pointer"},children:[(0,c.jsx)("option",{value:"",children:(0,y.getStateLabel)(s)}),Ee.map(ne=>(0,c.jsx)("option",{value:ne.code,children:ne.name},ne.code))]}):(0,c.jsx)("input",{className:"flopay-shared-input",id:"flopay-billing-state",name:"billing-state",placeholder:(0,y.getStateLabel)(s),autoComplete:"billing address-level1",value:Vn,onChange:ne=>{xt("state"),gt.current.state=!0,Ht.current=ne.target.value,pn(ne.target.value)},onPointerDown:()=>xt("state"),onKeyDown:()=>xt("state"),onBlur:()=>kn("state"),disabled:j,required:!0,"aria-invalid":zt("state")||void 0,"aria-describedby":zt("state")?"flopay-billing-state-error":void 0,"data-testid":"flopay-state",style:K()})})]}),zt("city")&&(0,c.jsx)("div",{id:"flopay-billing-city-error",role:"alert","data-testid":"flopay-city-error",style:Ho,children:"City is required"}),zt("state")&&(0,c.jsxs)("div",{id:"flopay-billing-state-error",role:"alert","data-testid":"flopay-state-error",style:Ho,children:[(0,y.getStateLabel)(s)," is required"]}),((0,y.isAVSFieldVisible)(te.country,s)||(0,y.isAVSFieldVisible)(te.postal_code,s))&&(0,c.jsxs)("div",{style:{display:"flex",flexDirection:ye==="column"?"column":"row",gap:ye==="column"?"0.5rem":"0",marginTop:"0.5rem"},children:[(0,y.isAVSFieldVisible)(te.country,s)&&(0,c.jsx)("div",{style:{flex:ye==="row"?1:void 0,backgroundColor:yo,borderTop:`1px solid ${Wo}`,borderRight:`1px solid ${Wo}`,borderBottom:`1px solid ${Wo}`,borderLeft:`1px solid ${Wo}`,padding:"10px",...ye==="row"&&(0,y.isAVSFieldVisible)(te.postal_code,s)?{borderRadius:"0",borderTopLeftRadius:Yt,borderBottomLeftRadius:Yt,borderRight:"none"}:{borderRadius:Yt}},children:(0,c.jsxs)("select",{id:"flopay-billing-country",name:"billing-country",value:Mt,onChange:ne=>{gt.current.country=!0,Zt.current=ne.target.value,wn(ne.target.value),lt?.(ne.target.value),Ht.current="",pn("")},disabled:j,autoComplete:"billing country","data-testid":"flopay-country",style:{...K(),cursor:"pointer"},children:[Mt===""?(0,c.jsx)("option",{value:"",children:"Select country"}):null,y.COUNTRY_OPTIONS.map(ne=>(0,c.jsxs)("option",{value:ne.code,children:[ne.flag," ",ne.name]},ne.code))]})}),(0,y.isAVSFieldVisible)(te.postal_code,s)&&(0,c.jsx)("div",{style:{flex:ye==="row"?1:void 0,backgroundColor:yo,border:`1px solid ${Ac}`,padding:"10px",...ye==="row"&&(0,y.isAVSFieldVisible)(te.country,s)?{borderRadius:"0",borderTopRightRadius:Yt,borderBottomRightRadius:Yt}:{borderRadius:Yt}},children:(0,c.jsx)("input",{className:"flopay-shared-input",id:"flopay-billing-postal-code",name:"billing-postal-code",placeholder:(0,y.getPostalCodeLabel)(Mt),autoComplete:"billing postal-code",value:Dn,onChange:ne=>{xt("zip"),gt.current.zip=!0,wt.current=ne.target.value,On(ne.target.value),Te?.(ne.target.value)},onPointerDown:()=>xt("zip"),onKeyDown:()=>xt("zip"),onBlur:()=>{or("zip")&&Tn(!0)},disabled:j,required:hn.required,"aria-invalid":Ra||void 0,"aria-describedby":Ra?"flopay-billing-postal-code-error":void 0,"data-testid":"flopay-zip",style:K()})})]}),Ra&&(0,c.jsx)("div",{id:"flopay-billing-postal-code-error",role:"alert","data-testid":"flopay-zip-error",style:Ho,children:hn.empty?`${(0,y.getPostalCodeLabel)(s)} is required`:au(s)})]})})()}),ie&&Dc,Ye&&(0,c.jsx)(Ro,{margin:"0.75rem 0",styleOverride:E.errorBanner,children:Ye})]}),_a={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"},Ks=s=>V?!T||!kr?(0,c.jsx)("pre",{"data-testid":s,style:_a,children:"FloPay/DirectPayPal-debug - not enabled"}):(0,c.jsx)("pre",{"data-testid":s,style:_a,children:["FloPay/DirectPayPal-debug (parent gate)",` showPayPal=${T}`,` directPaypalConfigured=${kr}`,` inAppBrowserDetected=${String(Sa)}`,` shouldRenderDirectPayPal=${zo}`,` shouldRenderStripePayPal=${qo}`,` hasPaypalStripeInstance=${!!fs}`].join(`
|
|
39
|
+
`)}):null,Gs=s=>V?!Y||!Un?(0,c.jsx)("pre",{"data-testid":s,style:_a,children:"FloPay/Stripe-debug - not enabled"}):(0,c.jsx)("pre",{"data-testid":s,style:_a,children:["FloPay/Stripe-debug (parent gate)",` showStripe=${Y}`,` currency=${jt}`,` amountInCents=${Oo}`,` enabledPaymentMethods: ${JSON.stringify(de??[])}`,` enabledPaymentMethodsProvided=${Lo}`,` hasEnabledMethods=${ba}`,` expressMethods: ${JSON.stringify(va)}`,` walletExpressMethods: ${JSON.stringify(po)}`,` paymentElementMethods: ${JSON.stringify(No)}`,` paymentElementMethodsForCurrency: ${JSON.stringify(Ca)}`,` hasStripeInstance=${!!Un}`,` shouldRenderWallets=${mo}`,` shouldRenderPaymentElement=${$o}`].join(`
|
|
40
|
+
`)}):null,Ys=dt==="apm-expanding"||dt==="apm-form"||dt==="apm-collapsing",go;dt==="apm-expanding"?go=$l:dt==="apm-collapsing"&&(go=jl);let Ea=tn?oc(gi,tn):null;if(oe==="buttons"){let s=dt==="buttons"||dt==="expanding"||dt==="apm-expanding",S=dt==="expanding"||dt==="card"||dt==="collapsing",K=ft===void 0?{boxSizing:"border-box",height:ma,padding:"0 1rem"}:{padding:"0.9rem 1rem"},Ee;dt==="expanding"||dt==="apm-expanding"?Ee=eu:(dt==="collapsing"||dt==="apm-collapsing")&&(Ee=Qd);let ne;return dt==="expanding"?ne=$l:dt==="collapsing"&&(ne=jl),(0,c.jsxs)("form",{onSubmit:vi,className:I,noValidate:!0,style:{position:"relative"},children:[(0,c.jsx)(Qi,{}),L&&(0,c.jsx)(er,{status:L,errorMessage:Ye,authorized:Nn}),(0,c.jsxs)("div",{style:{display:"grid"},children:[(0,c.jsxs)("div",{"data-testid":"flopay-buttons-panel","aria-hidden":!s&&!Ee?!0:void 0,style:{gridArea:"1 / 1",display:"flex",flexDirection:"column",gap:"0.5rem",...!s&&!Ee?nu:{},...Ee?{animation:Ee,pointerEvents:"none"}:{}},children:[Ks("flopay-direct-paypal-gate-debug"),Gs("flopay-stripe-gate-debug"),zo&&ut&&(0,c.jsxs)(c.Fragment,{children:[m&&(0,c.jsx)("div",{"data-testid":"flopay-paypal-direct-retry-notice",style:{padding:"8px 10px",background:"#fef3c7",border:"1px solid #fcd34d",borderRadius:6,color:"#78350f",fontSize:13,lineHeight:1.4},children:"Please confirm your PayPal payment to complete checkout."}),(0,c.jsx)(ta.Provider,{value:f,children:(0,c.jsx)(ra,{sessionId:e,nonce:t,billingApiUrl:Ne,email:_.email,billingName:Ue||void 0,onBuyerIdentityReady:J,clientId:ut.clientId,environment:ut.environment,currency:jt.toUpperCase(),isSubscription:Et,providerObjectType:Ge,approvalPresentation:wa==="popup"?void 0:wa,onTokenizedBody:xn,onComplete:l,onErrorChange:we,onDecline:u,onTechnicalFailure:co,onButtonClick:me,runBeforeButtonClick:cr,isProcessing:j,onLoadStateChange:hi,onInitializationStateChange:bi,session:vt,existingOrderId:m?.orderId,debug:V},m?.orderId??"fresh")})]}),qo&&(0,c.jsx)(Jt.Elements,{stripe:Uo,options:bs,children:(0,c.jsx)(Kl,{sessionId:e,nonce:t,email:_.email,billingName:Ue||void 0,onBuyerIdentityReady:J,billingApiUrl:Ne,onTokenizedBody:xn,onErrorChange:we,isProcessing:j,onButtonClick:me,onDecline:u,onTechnicalFailure:co,runBeforeButtonClick:cr,onLoadStateChange:Is,placeholderBorderRadius:Zr,popupCapabilityOwner:f,externalTelemetryContext:Fs,presentationMode:uo})}),mo?(0,c.jsx)(Jt.Elements,{stripe:Un,options:hs,children:(0,c.jsx)(Gl,{sessionId:e,nonce:t,email:_.email,billingName:Ue||void 0,onBuyerIdentityReady:J,billingApiUrl:Ne,intentKind:Ae>0?"payment":"setup",expressMethods:po,onTokenizedBody:xn,onErrorChange:we,onButtonClick:me,onDecline:u,onTechnicalFailure:co,runBeforeButtonClick:cr,onLoadStateChange:_s,placeholderBorderRadius:Zr,popupCapabilityOwner:f,externalTelemetryContext:qe})}):null,!mo&&Ms?(0,c.jsx)("div",{style:{height:ma,borderRadius:Zr,background:"#e5e7eb",animation:"flopay-pulse 1.5s ease-in-out infinite"}}):null,$o&&(0,c.jsx)(Yl,{sessionId:e,nonce:t,email:_.email,billingName:[_.firstName,_.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:J,billingApiUrl:Ne,paymentElementMethods:Ca,stripeInstance:Un,paymentElementBaseOptions:gi,onTokenizedBody:xn,onErrorChange:we,onButtonClick:me,onDecline:u,runBeforeButtonClick:cr,onLoadStateChange:Ts,isProcessing:j,submitButtonColor:Qr,submitButtonBorderRadius:Yt,submitButtonStyle:E.submitButton,onExpandApm:In,expandedApmMethod:tn,themeId:je,buttonAppearance:{backgroundColor:E.cardButton?.backgroundColor,borderColor:E.cardInputBorder,textColor:E.cardButton?.color,borderRadius:Zr}}),ie&&(0,c.jsx)("button",{type:"button",onClick:async()=>{j||!(await cr("card")).proceed||(me?.("card"),sr())},disabled:j,style:{width:"100%",...K,...E.cardButton,...ss({themeBundle:It,resolvedPrimaryColor:Qr,resolvedBorderRadius:Yt,submitButtonStyle:E.submitButton,explicitPrimaryColor:Mn?.colorPrimary}),fontSize:E.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:Se=>{!j&&(It||Mn?.colorPrimary)&&(Se.currentTarget.style.backgroundColor=Bc)},onMouseLeave:Se=>{(It||Mn?.colorPrimary)&&(Se.currentTarget.style.backgroundColor=Qr)},onMouseDown:Se=>{Se.currentTarget.style.transform="scale(0.985)"},onMouseUp:Se=>{Se.currentTarget.style.transform="scale(1)"},children:(0,c.jsx)(bo,{content:ft})}),Ye&&dt==="buttons"&&(0,c.jsx)(Ro,{margin:"0.25rem 0",styleOverride:E.errorBanner,children:Ye})]}),ie&&S&&(0,c.jsx)("div",{style:{gridArea:"1 / 1",...ne?{animation:ne}:{},...dt==="collapsing"?{pointerEvents:"none"}:{}},children:Hs}),Y&&Ys&&tn&&Ea&&Un&&(0,c.jsx)("div",{style:{gridArea:"1 / 1",...go?{animation:go}:{},...dt==="apm-collapsing"?{pointerEvents:"none"}:{}},children:(0,c.jsxs)("div",{style:{backgroundColor:Si,borderRadius:_i,...Ko,padding:Ri},children:[(0,c.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[(0,c.jsxs)("button",{type:"button","data-testid":"flopay-apm-back-button",onClick:x,style:{display:"inline-flex",alignItems:"center",gap:wi?0:"0.5rem",background:"none",border:"none",cursor:"pointer",color:"#4b5563",fontSize:E.backButtonFontSize??"0.85rem",fontWeight:500,padding:0,transition:"color 0.15s",flexShrink:0,...E.backButton},"aria-label":"Back to payment methods",children:[(0,c.jsx)("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",transition:"background-color 0.15s",...E.backButtonIcon},children:(0,c.jsx)("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:(0,c.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,c.jsx)(Po,{content:ke})]}),(0,c.jsx)("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:E.titleFontSize??"1.05rem",color:ki,paddingRight:80,...E.title},children:`Pay with ${(0,y.getStripeMethodDisplayName)(tn)}`})]}),(0,c.jsx)(Jt.Elements,{stripe:Un,options:Ea,children:(0,c.jsx)(ns,{method:tn,sessionId:e,nonce:t,email:_.email,billingName:[_.firstName,_.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:J,billingApiUrl:Ne,onTokenizedBody:xn,onErrorChange:we,onDecline:u,onCancel:x,runBeforeButtonClick:cr,onButtonClick:me,isProcessing:j,submitButtonColor:Qr,submitButtonBorderRadius:Yt,submitButtonStyle:E.submitButton,errorText:Ye})},tn)]})})]})]})}return Ys&&tn&&Ea&&Un&&Y?(0,c.jsxs)("form",{onSubmit:vi,className:I,noValidate:!0,style:{position:"relative"},children:[(0,c.jsx)(Qi,{}),L&&(0,c.jsx)(er,{status:L,errorMessage:Ye,authorized:Nn}),(0,c.jsx)("div",{style:{...go?{animation:go}:{},...dt==="apm-collapsing"?{pointerEvents:"none"}:{}},children:(0,c.jsxs)("div",{style:{backgroundColor:Si,borderRadius:_i,...Ko,padding:Ri},children:[(0,c.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[(0,c.jsxs)("button",{type:"button","data-testid":"flopay-apm-back-button-default",onClick:x,style:{display:"inline-flex",alignItems:"center",gap:wi?0:"0.5rem",background:"none",border:"none",cursor:"pointer",color:"#4b5563",fontSize:E.backButtonFontSize??"0.85rem",fontWeight:500,padding:0,transition:"color 0.15s",flexShrink:0,...E.backButton},"aria-label":"Back to payment methods",children:[(0,c.jsx)("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",transition:"background-color 0.15s",...E.backButtonIcon},children:(0,c.jsx)("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:(0,c.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,c.jsx)(Po,{content:ke})]}),(0,c.jsx)("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:E.titleFontSize??"1.05rem",color:ki,paddingRight:80,...E.title},children:`Pay with ${(0,y.getStripeMethodDisplayName)(tn)}`})]}),(0,c.jsx)(Jt.Elements,{stripe:Un,options:Ea,children:(0,c.jsx)(ns,{method:tn,sessionId:e,nonce:t,email:_.email,billingName:[_.firstName,_.lastName].filter(Boolean).join(" ").trim()||void 0,onBuyerIdentityReady:J,billingApiUrl:Ne,onTokenizedBody:xn,onErrorChange:we,onDecline:u,onCancel:x,runBeforeButtonClick:cr,onButtonClick:me,isProcessing:j,submitButtonColor:Qr,submitButtonBorderRadius:Yt,submitButtonStyle:E.submitButton,errorText:Ye})},tn)]})})]}):(0,c.jsxs)("form",{onSubmit:vi,className:I,noValidate:!0,style:{position:"relative"},children:[(0,c.jsx)(Qi,{}),L&&(0,c.jsx)(er,{status:L,errorMessage:Ye,authorized:Nn}),(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[Ks("flopay-direct-paypal-gate-debug-default"),Gs("flopay-stripe-gate-debug-default"),zo&&ut&&(0,c.jsxs)(c.Fragment,{children:[m&&(0,c.jsx)("div",{"data-testid":"flopay-paypal-direct-retry-notice-default",style:{padding:"8px 10px",background:"#fef3c7",border:"1px solid #fcd34d",borderRadius:6,color:"#78350f",fontSize:13,lineHeight:1.4},children:"Please confirm your PayPal payment to complete checkout."}),(0,c.jsx)(ta.Provider,{value:f,children:(0,c.jsx)(ra,{sessionId:e,nonce:t,billingApiUrl:Ne,email:_.email,billingName:Ue||void 0,onBuyerIdentityReady:J,clientId:ut.clientId,environment:ut.environment,currency:jt.toUpperCase(),isSubscription:Et,providerObjectType:Ge,approvalPresentation:wa==="popup"?void 0:wa,onTokenizedBody:xn,onComplete:l,onErrorChange:we,onDecline:u,onTechnicalFailure:co,onButtonClick:me,runBeforeButtonClick:cr,isProcessing:j,onLoadStateChange:hi,onInitializationStateChange:bi,session:vt,existingOrderId:m?.orderId,debug:V},m?.orderId??"fresh")})]}),qo&&(0,c.jsx)(Jt.Elements,{stripe:Uo,options:bs,children:(0,c.jsx)(Kl,{sessionId:e,nonce:t,email:_.email,billingName:Ue||void 0,onBuyerIdentityReady:J,billingApiUrl:Ne,onTokenizedBody:xn,onErrorChange:we,isProcessing:j,onButtonClick:me,onDecline:u,onTechnicalFailure:co,runBeforeButtonClick:cr,onLoadStateChange:Is,placeholderBorderRadius:Zr,popupCapabilityOwner:f,externalTelemetryContext:Fs,presentationMode:uo})}),mo&&(0,c.jsx)(Jt.Elements,{stripe:Un,options:hs,children:(0,c.jsx)(Gl,{sessionId:e,nonce:t,email:_.email,billingName:Ue||void 0,onBuyerIdentityReady:J,billingApiUrl:Ne,intentKind:Ae>0?"payment":"setup",expressMethods:po,onTokenizedBody:xn,onErrorChange:we,onButtonClick:me,onDecline:u,onTechnicalFailure:co,runBeforeButtonClick:cr,onLoadStateChange:_s,placeholderBorderRadius:Zr,popupCapabilityOwner:f,externalTelemetryContext:qe})}),$o&&(0,c.jsx)(Yl,{sessionId:e,nonce:t,email:_.email,billingName:[_.firstName,_.lastName].filter(Boolean).join(" ").trim()||void 0,billingApiUrl:Ne,paymentElementMethods:Ca,stripeInstance:Un,paymentElementBaseOptions:gi,onTokenizedBody:xn,onErrorChange:we,onButtonClick:me,onDecline:u,runBeforeButtonClick:cr,onLoadStateChange:Ts,isProcessing:j,submitButtonColor:Qr,submitButtonBorderRadius:Yt,submitButtonStyle:E.submitButton,themeId:je,onExpandApm:In,expandedApmMethod:tn,buttonAppearance:{backgroundColor:E.cardButton?.backgroundColor,borderColor:E.cardInputBorder,textColor:E.cardButton?.color,borderRadius:Zr}})]}),ie&&(Rc||Ic||_c)&&(0,c.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",margin:"0.5rem 0 0.75rem",color:"#999",fontSize:"0.85rem"},children:[(0,c.jsx)("div",{style:{flex:1,height:1,backgroundColor:"#ddd"}}),(0,c.jsx)("span",{children:"or pay with card"}),(0,c.jsx)("div",{style:{flex:1,height:1,backgroundColor:"#ddd"}})]}),ie&&Hs]})}var M=require("react/jsx-runtime"),Do=44,ms="flopay_checkout_saved_payment_resume",si=new Map,ai=new Map;function ac(e,t){t.settled&&t.consumers===0&&si.get(e)===t&&si.delete(e)}function uu(e,t,n){let r=ai.get(e);if(r&&(!r.sdkGeneratedIdempotencyKey||!t||r.sdkGeneratedIdempotencyKey===t))return r.attempt;let o=n(),a={attempt:o,sdkGeneratedIdempotencyKey:t};ai.set(e,a);let l=()=>{ai.get(e)===a&&ai.delete(e)};return o.then(l,l),o}function fa(e){return new Promise(t=>setTimeout(t,e))}function ii(e,t,n){let r=Na({billingApiUrl:e,sdkPackage:"@flopay/react",sdkVersion:Xe.SDK_VERSION,enabled:t!==!1});return r.beginCheckout(n),r}function ga(e){e.flush().catch(()=>{}).finally(()=>e.destroy())}function ls(e,t,n,r,o,a){let l=ii(e,t,n);l.error({errorCode:r,stage:o,paymentMethodCategory:"unknown",...a,...o==="session_read"?{requestCategory:"session_read"}:{}}),ga(l)}function ic(e,t,n,r){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,...r===void 0?{}:{attempt:r},statusClass:"2xx"})}function sc(e,t,n,r,o){let a=(0,Xe.classifyTelemetryFailure)(t,"CHECKOUT_SESSION_CREATE_FAILED","unknown");return e.performance({stage:n,durationMs:Math.max(0,e.now()-r),durationMode:"machine",requestCategory:n,attempt:o,statusClass:a.statusClass}),t instanceof Xe.FloPayError&&t.code==="session_auto_completed"?!1:t instanceof Xe.FloPayError&&t.type==="validation_error"?(e.terminal({outcome:"validation_rejected",stage:n,paymentMethodCategory:"unknown"}),!1):a.statusClass==="4xx"?(e.terminal({outcome:"validation_rejected",stage:n,paymentMethodCategory:"unknown",requestCategory:n,statusClass:"4xx"}),!1):(e.error({...a,stage:n,paymentMethodCategory:"unknown",requestCategory:n}),!0)}function uc(e,t){let n=e?.data.paypal?.publishableKey;if(n)return{clientId:n,environment:e?.data.paypal?.environment,providerObjectType:e?.data.paypal?.providerObjectType,approvalPresentation:e?.data.paypal?.approvalPresentation,...t?{existingOrderId:t}:{}}}function cs(e){return!e||e.data.stripe?.publishableKey?!1:!!uc(e)?.clientId}var pu={name:"provider_unavailable",initialize:()=>Promise.resolve(),getRawProvider:()=>null,destroy:()=>{}};function mu(e){return new $r.FloPay(pu,{publishableKey:"provider_unavailable",...e})}async function ds(e,t){let{publishableKey:n,paypalPublishableKey:r}=Wi(e);return{...await Hi({publishableKey:n,paypalPublishableKey:r,...t}),publishableKey:n,paypalPublishableKey:r}}function ys(){return typeof window<"u"&&typeof window.sessionStorage<"u"}function yu(){if(!ys())return null;try{let e=window.sessionStorage.getItem(ms);return e?JSON.parse(e):null}catch{return null}}function lc(e){if(ys())try{window.sessionStorage.setItem(ms,JSON.stringify(e))}catch(t){console.warn("[FloPayCheckout] Failed to persist PayPal resume state.",t)}}function us(){if(ys())try{window.sessionStorage.removeItem(ms)}catch(e){console.warn("[FloPayCheckout] Failed to clear PayPal resume state.",e)}}function fu(){if(typeof window>"u")return;let e=new URL(window.location.href),t=["payment_intent","payment_intent_client_secret","redirect_status"],n=!1;for(let r of t)e.searchParams.has(r)&&(e.searchParams.delete(r),n=!0);n&&window.history.replaceState(window.history.state,"",e.toString())}function cc(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 ps(e,t){return e?"custom_layout":t==="buttons"?"buttons_layout":"default_layout"}function gu(e,t){return e?"unknown":t==="buttons"?"buttons":"embedded"}function dc(e){return e?.gateways?.stripe?"stripe":e?.gateways?.paypal?"paypal":void 0}function hu(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 li({sessionId:e,nonce:t,createSession:n,billingApiUrl:r,telemetry:o,appearance:a,locale:l,loading:d,error:u,onComplete:p,onError:b,onInstrument:v,onDecline:B,onCountryChange:I,onZipChange:w,showPayPal:h=!0,showStripe:O=!0,walletPresentation:G="auto",enabledPaymentMethods:T,showApplePay:Y=!0,showGooglePay:U=!0,debug:de=!1,layout:X,theme:he,buttonsTheme:Fe,buttonsStyles:oe,cardButtonContent:je,cardBackButtonContent:yt,cardTitleContent:re,showSecurityFooter:De,onButtonClick:ft,onBeforeButtonClick:ke,enableAVS:Oe,cardFieldOrder:be,cardPreFormSlot:me,avsLayout:Ie,submitLabel:Ve,className:rt,initialErrorMessage:R=null,initialPayPalOrderId:We,children:ye,checkoutMode:N,confirmLabel:ve,renderConfirmButton:ue,onSessionCompleted:He}){let Q=(0,Xe.resolveBillingApiUrl)(r),ot=(0,C.useMemo)(()=>(0,Xe.resolveTheme)(he),[he]),lt=a??ot?.appearance,Te=n?"embedded_checkout":"standard_checkout",Le=ps(ye,X),[ct,at]=(0,C.useState)(null),[Ae,jt]=(0,C.useState)(null),Vt=(0,C.useRef)(null),ut=(0,C.useRef)(null),Et=(0,C.useRef)(0),[q,fe]=(0,C.useState)(null),et=(0,C.useRef)(null),[V,xe]=(0,C.useState)(null),bt=(0,C.useMemo)(()=>n?Eo(n):"",[n]),Ke=n?`create:${bt}`:`session:${e??""}`,$=dc(V),Je=(0,C.useRef)(new Set),f=(0,C.useRef)(Ke),P=(0,C.useRef)(Ke);ro(()=>{P.current=Ke,f.current!==Ke&&(f.current=Ke,Je.current.clear())},[Ke]);let H=(0,C.useCallback)(x=>{if(P.current===Ke){if(Di.has(x.name)){if(Je.current.has(x.name))return;Je.current.add(x.name)}st(()=>v?.(x))}},[Ke,v]),ee=Io(H,Ke),qe=(0,C.useRef)(!1),vt=(0,C.useCallback)(x=>{if(qe.current)return;let L=x.gateway||!$?x:{...x,gateway:$};H(L)},[H,$]);(0,C.useEffect)(()=>{ee({class:"lifecycle",name:"checkout.mount"})},[ee]);let[Ge,Z]=(0,C.useState)(e??""),it=e??Ge,Ct=n?"":it,[Nt,Ne]=(0,C.useState)(!0),[Ft,ze]=(0,C.useState)(null),[Fn,Rn]=(0,C.useState)(0),[Mt,wn]=(0,C.useState)("full"),[Dn,On]=(0,C.useState)(!1),[rn,Ce]=(0,C.useState)(R),[St,Tt]=(0,C.useState)(null),[vn,Bt]=(0,C.useState)(null),[Vn,pn]=(0,C.useState)(!1),[Wt,an]=(0,C.useState)(void 0),[Wn,mn]=(0,C.useState)(""),[wt,Zt]=(0,C.useState)(!1),[yn,Dt]=(0,C.useState)(!1),[Qt,Ht]=(0,C.useState)(!1),fn=(0,C.useRef)(null),gt=(0,C.useRef)(0),te=(0,C.useRef)(void 0),[Ln,Nn]=(0,C.useState)("loading"),[hr,Cn]=(0,C.useState)(0),sn=(0,C.useRef)(!1),_n=(0,C.useRef)(!1),Re=(0,C.useRef)(!1),ht=(0,C.useRef)(null),ie=(0,C.useRef)(null),F=(0,C.useMemo)(()=>({checkoutMode:N??Mt,layout:gu(ye,X)}),[N,ye,Mt,X]),Ze=(0,C.useRef)(p);Ze.current=p;let se=(0,C.useRef)(b);se.current=b;let Hn=(0,C.useRef)(B);Hn.current=B;let gn=(0,C.useCallback)(x=>Ka(ht,async L=>{try{return await x(L)}catch(A){throw L.aborted?Jr(A):A}}),[]);(0,C.useEffect)(()=>()=>{ht.current?.abort(),ht.current=null},[]);let Kt=(0,C.useCallback)((x,L)=>{Vt.current=x,jt(x),et.current=L,fe(L)},[]),Kn=(0,C.useCallback)(()=>{let x=ut.current;x&&(ut.current=null,x.destroy())},[]);(0,C.useEffect)(()=>{dn(Ae)?.setCheckoutContext(F),q&&q!==Ae&&dn(q)?.setCheckoutContext(F)},[Ae,q,F]);let nt=(0,C.useRef)(He);nt.current=He;let jr=(0,C.useCallback)(x=>{Nn(x),!(x!=="exhausted"||Re.current)&&(Re.current=!0,se.current?.(new Xe.FloPayError("PayPal is temporarily unavailable. Please try again.","api_error",{code:"paypal_init_timeout"})))},[]),Gt=(0,C.useCallback)(()=>{Nn("retrying"),Cn(x=>x+1)},[]);(0,C.useEffect)(()=>{Nn("loading"),Cn(0),Re.current=!1},[it]),(0,C.useEffect)(()=>{console.info("[FloPay] Checkout initialized",{sdk_version:Xe.SDK_VERSION,checkout_type:Te,checkout_layout:Le,billing_api_url:Q})},[Le,Te,Q]);let hn=(0,C.useMemo)(()=>n?Eo(n,!0):"",[n]),Mr=(0,C.useMemo)(()=>Wn===hn?Wt:void 0,[Wt,Wn,hn]),Br=(0,C.useMemo)(()=>n?Ai(n,Mr):void 0,[n,Mr]),En=N??Br?.checkoutMode??"full",en=(0,C.useMemo)(()=>Br?{...Br,checkoutMode:En}:void 0,[Br,En]);(0,C.useEffect)(()=>{an(void 0),mn(hn),te.current=void 0,fn.current=null,Ht(!1)},[hn]),(0,C.useEffect)(()=>{Ce(R)},[R]);let br=(0,C.useCallback)((x,L,A)=>{st(()=>{Hn.current?.(cn(x,L,A))})},[]),Tn=(0,C.useCallback)(async(x,L)=>{Ce(null),Bt(null),pn(!1),Tt("processing");let A=L?.sessionId??x.id,le=x.clientSecret||t,Me=dc(x),pt=Vt.current??et.current,pe=dn(pt),Be=pt?null:ii(Q,o,F),W={log:E=>{pe?pe.log(E):Be?.log(E)},error:E=>{pe?pe.error(E):Be?.error(E)},terminal:E=>{pe?pe.terminal(E):Be?.terminal(E)},performance:E=>{pe?pe.performance(E):Be?.performance(E)},now:()=>pe?.now()??Be?.now()??0,elapsed:E=>pe?.elapsed(E)??Math.max(0,(Be?.now()??E)-E)},m=W.now(),g=!!(L?.initialAutoProcessingError||L?.initialAutoProcessingPending),D=!1,z,ce=()=>{D||(D=!0,g=!0,z=W.now(),W.log({name:"checkout.recovery.started",stage:"recovery",paymentMethodCategory:"saved"}),W.log({name:"operation.recovery.started",stage:"recovery",paymentMethodCategory:"saved"}))},J=!1,Ye=()=>{J||(J=!0,W.log({name:"payment.processing.completed",stage:"processing",paymentMethodCategory:"saved"}),W.performance({stage:"processing",durationMs:W.elapsed(m),durationMode:"machine",paymentMethodCategory:"saved",requestCategory:"process_payment"}),z!==void 0&&W.performance({stage:"recovery",durationMs:W.elapsed(z),durationMode:"machine",paymentMethodCategory:"saved"}))};W.log({name:"payment.method.selected",stage:"processing",paymentMethodCategory:"saved"}),qe.current=!0;try{W.log({name:"payment.processing.started",stage:"processing",paymentMethodCategory:"saved"})}finally{qe.current=!1}ee({class:"lifecycle",name:"payment.processing.started",provider:Me}),g&&ce();let It;try{let E=Il(L?.initialAutoProcessingError),Pe=L?.initialAutoProcessingError?.type==="3ds_required"&&!L.initialAutoProcessingError.threeDSecureToken&&L.initialAutoProcessingError.nextActionRedirectUrl?{type:"next_action_required",nextActionRedirectUrl:L.initialAutoProcessingError.nextActionRedirectUrl}:null,At,ge=j=>(ce(),gn(ae=>Ao(j,{billingApiUrl:Q,sessionId:A,nonce:le,session:x,signal:ae})));if(Pe)At=await ge(Pe);else if(E)ce(),E.type==="paypal_redirect_required"&&ie.current?.publishableKey&&lc({sessionId:A,publishableKey:ie.current.publishableKey,paypalPublishableKey:ie.current.paypalPublishableKey}),At=await gn(j=>Ya(E,{flopay:Vt.current,paypalFlopay:et.current,attempt3DS:L?.attempt3DS,billingApiUrl:Q,sessionId:A,session:x,telemetry:!1,signal:j})),E.type==="paypal_redirect_required"&&us();else if(L?.initialAutoProcessingPending){let j=L.initialAutoProcessingPending,ae=new $r.PaymentAPI(Q,{telemetry:!1}),_=await gn(_e=>ae.waitForCheckoutSessionCompletion(j.sessionId,{initialDelayMs:j.retryAfterMs,nonce:le,statusUrl:j.statusUrl,signal:_e})),Ue=Gr(_,x),Rt=_.autoProcessingError?.type==="3ds_required"&&_.autoProcessingError.nextActionRedirectUrl?{type:"next_action_required",nextActionRedirectUrl:_.autoProcessingError.nextActionRedirectUrl}:null;if(Rt)At=await ge(Rt);else{if(!Nr(Ue))throw Co(Ue);At=Lr(Ue,A)}}else{if(L?.initialAutoProcessingError)throw Er(L.initialAutoProcessingError,"Automatic payment failed. Please try again.",{checkoutMethod:L.initialAutoProcessingError.checkoutMethod});if(L?.fromCreateSession)return L?.fallbackToFull&&(wn("full"),cc("full")),!1;{let j=await xo({billingApiUrl:Q,sessionId:A,session:x,nonce:le,telemetry:!1});j.type==="success"?At=j.result:j.type==="next_action_required"?At=await ge(j):(ce(),j.type==="paypal_redirect_required"&&ie.current?.publishableKey&&lc({sessionId:A,publishableKey:ie.current.publishableKey,paypalPublishableKey:ie.current.paypalPublishableKey}),At=await gn(ae=>Ya(j,{flopay:Vt.current,paypalFlopay:et.current,attempt3DS:L?.attempt3DS,billingApiUrl:Q,sessionId:A,session:x,telemetry:!1,signal:ae})),j.type==="paypal_redirect_required"&&us())}}A&&To(A),Ye(),g&&(W.log({name:"checkout.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"}),W.log({name:"operation.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"})),W.terminal({outcome:At.status==="authorized"?"payment_authorized":"payment_succeeded",paymentMethodCategory:"saved"}),pn(At.status==="authorized"),Tt("success"),await fa(600),It=()=>Ze.current?.(At)}catch(E){let Pe=Hr(la(E),A);if(Pe.code==="three_ds_aborted")return!1;let At=Pe.checkoutMethod??sa;Ce(Pe.message),Bt(Pe.message),pn(!1),L?.fallbackToFull&&(W.log({name:"operation.fallback",stage:"recovery",paymentMethodCategory:"saved"}),wn("full"),cc("full")),Ye();let ge=Pe.statusCode===void 0?void 0:(0,Xe.telemetryStatusClass)(Pe.statusCode,"unknown"),j=ge==="4xx"?{requestCategory:"process_payment",statusClass:ge}:{},ae=ge===void 0||ge==="4xx";if(ae&&(Pe.telemetryOutcome==="payment_declined"||!!(Pe.declineCode||Pe.code?.toLowerCase().includes("declin"))))W.terminal({outcome:"payment_declined",paymentMethodCategory:"saved",...j});else if(ae&&(Pe.telemetryOutcome==="validation_rejected"||Pe.type==="validation_error"))W.terminal({outcome:"validation_rejected",paymentMethodCategory:"saved",...j});else{let Rt=(0,Xe.classifyTelemetryFailure)(E,g?"RECOVERY_FAILED":"PAYMENT_PROCESSING_FAILED","unknown"),_e=Pe.telemetryRequestCategory??"process_payment";qe.current=!0;try{W.error({...Rt,...Pe.telemetryFailureCategory?{failureCategory:Pe.telemetryFailureCategory}:{},stage:g?"recovery":"processing",paymentMethodCategory:"saved",requestCategory:_e})}finally{qe.current=!1}ee({class:"technical_error",errorCode:"PAYMENT_PROCESSING_FAILED",requestCategory:_e,provider:Me})}return st(()=>se.current?.(Pe)),br(At,Pe,{code:Pe.code,declineCode:Pe.declineCode}),Tt("error"),await Promise.allSettled([fa(400),L?.ensureProvidersReady?L.ensureProvidersReady():Promise.resolve()]),g&&(W.log({name:"checkout.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"}),W.log({name:"operation.recovery.completed",stage:"recovery",paymentMethodCategory:"saved"})),!1}finally{Ye(),Be&&ga(Be),Tt(null),Bt(null)}return st(It),!0},[br,ee,t,Q,gn,o,F]);(0,C.useEffect)(()=>{if(typeof window>"u"||_n.current)return;let x=new URLSearchParams(window.location.search),L=x.get("payment_intent_client_secret");if(!L)return;let A=yu();A&&(_n.current=!0,(async()=>{let le,Me=0;Ce(null),Bt(null),Tt("processing"),On(!0);try{if(x.get("redirect_status")==="failed")throw Object.assign(new Xe.FloPayError("PayPal payment was declined. Please try again.","api_error",{declineCode:"paypal_redirect_failed"}),{checkoutMethod:"paypal"});let{flopay:pt,paypalFlopay:pe}=await Hi({publishableKey:A.publishableKey,paypalPublishableKey:A.paypalPublishableKey,billingApiUrl:Q,locale:l,telemetry:o});le=dn(pe??pt),le?.setCheckoutContext(F),Me=le?.now()??0,le?.log({name:"provider.redirect.resumed",stage:"redirect_resume",provider:"paypal",paymentMethodCategory:"paypal"}),le?.log({name:"operation.recovery.started",stage:"recovery",provider:"paypal",paymentMethodCategory:"paypal"});let Be=(pe??pt)?.getRawProvider();if(!Be)throw Object.assign(new Xe.FloPayError("PayPal is not available.","api_error"),{checkoutMethod:"paypal"});let{paymentIntent:W,error:m}=await Be.retrievePaymentIntent(L);if(m)throw Object.assign(new Xe.FloPayError(m.message??"Failed to retrieve PayPal payment status.","api_error",{code:m.code}),{checkoutMethod:"paypal"});let g=al(W?.status);if(!W||g==="failed")throw Object.assign(new Xe.FloPayError("PayPal payment was not completed. Please try again.","api_error"),{checkoutMethod:"paypal"});let D=typeof W.payment_method=="string"?W.payment_method:W.payment_method?.id,z=g;if(A.sessionId){let Ye=(await new $r.PaymentAPI(Q,{telemetry:!1}).getUnifiedCheckoutSession(A.sessionId)).data.session;if(Ye&&Ye.status!=="complete"){let It=await xo({billingApiUrl:Q,sessionId:A.sessionId,session:Ye,telemetry:!1,tokenizedData:{id:D??W.id,type:"card",threeDSecureActionResultTokenId:W.id,isPaypal:!0}});if(It.type!=="success")throw Object.assign(new Xe.FloPayError("Failed to finalize PayPal payment.","api_error"),{checkoutMethod:"paypal"});z=It.result.status}}A.sessionId&&To(A.sessionId),le?.log({name:"operation.recovery.completed",stage:"recovery",provider:"paypal",paymentMethodCategory:"paypal"}),le?.performance({stage:"redirect_resume",durationMs:le.elapsed(Me),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"}),le?.terminal({outcome:"payment_succeeded",provider:"paypal",paymentMethodCategory:"paypal"}),Tt("success"),await fa(600),st(()=>Ze.current?.({status:z,paymentIntentId:W.id,paymentMethodId:D,checkoutMethod:"paypal"}))}catch(pt){let pe=Hr(la(pt),A.sessionId),Be=pe.checkoutMethod??"paypal",W=!!(pe.declineCode||pe.code?.toLowerCase().includes("declin"));if(le)le.performance({stage:"redirect_resume",durationMs:le.elapsed(Me),durationMode:"machine",provider:"paypal",paymentMethodCategory:"paypal"}),W?le.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal"}):le.error({errorCode:"REDIRECT_RESUME_FAILED",stage:"redirect_resume",provider:"paypal",paymentMethodCategory:"paypal"});else if(W){let m=ii(Q,o,F);m.terminal({outcome:"payment_declined",provider:"paypal",paymentMethodCategory:"paypal"}),ga(m)}else ls(Q,o,F,"REDIRECT_RESUME_FAILED","redirect_resume");Ce(pe.message),Bt(pe.message),st(()=>se.current?.(pe)),br(Be,pe,{code:pe.code,declineCode:pe.declineCode}),Tt("error"),await fa(400)}finally{us(),fu(),Tt(null),Bt(null),On(!1)}})())},[br,l,Q,o,F]);let Fr=(0,C.useRef)(null),An=(0,C.useMemo)(()=>en?Eo(en):"",[en]),Pr=(0,C.useRef)(en);Pr.current=en,(0,C.useEffect)(()=>{Z(e??"")},[e]),(0,C.useEffect)(()=>{sn.current=!1,Ce(R),Bt(null),pn(!1),Tt(null)},[An,R,e]);async function vr(x,L,A){let le=ii(Q,o,F),Me=new $r.PaymentAPI(Q,{telemetry:!1}),pt=!1;try{let pe=x.idempotencyKey===void 0?void 0:(0,Xe.resolveIdempotencyKey)(x.idempotencyKey),Be=Ni(L,A),W=zi(L,A);Be?.canonicalIdentity===A&&W&&W.canonicalIdentity===void 0&&(Wa(L,A,W.idempotencyKey),W={...W,canonicalIdentity:A});let m=pe??(W?.canonicalIdentity===A?W.idempotencyKey:void 0),g,D=!1;le.log({name:Be?"operation.cache.hit":"operation.cache.miss",stage:"session_create",requestCategory:"session_create"});let z=Be?.sid??null,ce=null,J,Ye,It=!1;if(z)try{ce=await Me.getUnifiedCheckoutSession(z,Be?.nonce),Be&&Be.canonicalIdentity===void 0&&(Cl(ce.data.session,x)?(Va(L,A,z,Be.nonce??ce.data.session?.clientSecret),W&&W.canonicalIdentity===void 0&&(Wa(L,A,W.idempotencyKey),m??(m=W.idempotencyKey))):(ja(L,A),W=null,m=pe,z=null,ce=null));let Pe=ce?.data.session?.status,At=ce?.data.session,ge=At?.clientSecret||Be?.nonce;if(z&&At?.buyerIdentified===!1&&ge&&(Ye=vo(Me,z,ge,x.account)),z&&ce&&Pe==="complete"){if(Ui(z))return{sid:z,result:ce};ja(L,A),z=null,ce=null,D=!0}}catch{le.log({name:"operation.fallback",stage:"session_read",requestCategory:"session_read"}),Be?.canonicalIdentity===void 0?(ja(L,A),m=pe):$a(L,A),z=null}if(!z){!pe&&(D||!m)&&(m=(0,Xe.resolveIdempotencyKey)(),g=m),m&&Wa(L,A,m);let Pe=le.now(),At=0;le.log({name:"session.create.started",stage:"session_create",requestCategory:"session_create"});let ge={...x,idempotencyKey:m,avsCheck:!!Oe,avsConfig:typeof Oe=="object"?Oe:void 0,checkoutType:"embedded_checkout",checkoutLayout:ps(ye,X)};Object.defineProperty(ge,$r.SESSION_CREATE_TELEMETRY,{configurable:!1,enumerable:!1,value:{onAttempt:_=>{At=Math.max(At,_)}}});let j=()=>{ic(le,"session_create",Pe,At)},ae=_=>{sc(le,_,"session_create",Pe,At)&&ee({class:"technical_error",errorCode:"CHECKOUT_SESSION_CREATE_FAILED",requestCategory:"session_create"})};try{if((0,Xe.isDetachedSessionEligible)(ge)){let _=await Me.createDetachedSession(ge);_.claimed.catch(()=>{}),ce=_.shell,z=_.sessionId,Ye=_.claim;let Ue=le.now();le.log({name:"session.claim.started",stage:"session_claim",requestCategory:"session_claim"}),J=_.claimed.then(Rt=>{let _e=Rt.data.session?.id??_.sessionId;return _e&&Va(L,A,_e,Rt.data.session?.clientSecret??_.nonce),ic(le,"session_claim",Ue),j(),Rt},Rt=>{throw $a(L,A),sc(le,Rt,"session_claim",Ue,0)&&ee({class:"technical_error",errorCode:"CHECKOUT_SESSION_CREATE_FAILED",requestCategory:"session_claim"}),Rt}).finally(()=>ga(le)),J.catch(()=>{}),pt=!0,le.log({name:"session.shell.ready",stage:"session_shell",requestCategory:"session_create",paymentMethodCategory:"card",statusClass:"2xx"}),le.performance({stage:"session_shell",durationMs:le.now()-Pe,durationMode:"machine",requestCategory:"session_create",attempt:At,statusClass:"2xx",paymentMethodCategory:"card"})}else ce=await Me.createAndFetchSession(ge),j()}catch(_){throw ae(_),_}z=ce.data.session?.id??z??"",z&&!J&&Va(L,A,z,ce.data.session?.clientSecret)}let E=ce?.data.session;return!Ye&&z&&E?.buyerIdentified===!1&&E.clientSecret&&(Ye=vo(Me,z,E.clientSecret,x.account)),{sid:z??"",result:ce,sdkGeneratedIdempotencyKey:g,...J?{claimed:J}:{},...Ye?{claim:Ye}:{},...It?{claimRequiresIdentity:!0}:{}}}finally{pt||ga(le)}}let rr=(0,C.useRef)(vr);ro(()=>{rr.current=vr},[vr]);let Gn=(0,C.useCallback)(async(x,L)=>{let A=Pr.current;if(!A)throw new Xe.FloPayError("createSession is required to bootstrap checkout.","validation_error");let le=Ai(A,x),Me=Eo(le),pt=vl(le),pe=si.get(Me);if(!pe){let m={canonicalIdentity:Me,promise:rr.current(le,pt,Me),consumers:0,settled:!1};pe=m,si.set(Me,m);let g=()=>{m.settled=!0,ac(Me,m)};m.promise.then(g,g)}pe.consumers+=1;let Be=!1,W=()=>{Be||(Be=!0,pe.consumers-=1,ac(Me,pe))};L?.(W);try{let m=await pe.promise;Fr.current=Me,x&&(mn(hn),an(E=>nl(E,x)));let{sid:g,result:D,claimed:z,claim:ce,claimRequiresIdentity:J}=m;if(te.current=ce,Ht(J===!0),at(D),D.data.session&&xe(D.data.session),g&&Z(g),z){gt.current+=1;let E=gt.current;fn.current=z,Dt(!0),z.then(Pe=>{gt.current===E&&(fn.current===z&&(fn.current=null),at(Pe),Pe.data.session&&xe(Pe.data.session),Dt(!1),Ht(!1))},Pe=>{gt.current===E&&(fn.current===z&&(fn.current=null),Dt(!1),Ht(!1),ze(Pe instanceof Xe.FloPayError?Pe:new Xe.FloPayError(Pe instanceof Error?Pe.message:"Failed to create session","api_error")))})}else gt.current+=1,fn.current=null,Dt(!1),Ht(!1);let{flopay:Ye,paypalFlopay:It}=await ds(D,{billingApiUrl:Q,locale:l,telemetry:o});return Kt(Ye,It),Ne(!1),m}catch(m){throw Fr.current===Me&&(Fr.current=null),m}finally{L||W()}},[hn,Kt,l,Q,o]),Yn=(0,C.useRef)(Tn);Yn.current=Tn;let xt=(0,C.useRef)(Gn);xt.current=Gn;let or=(0,C.useCallback)(async x=>{if(!hu(x)||wt)return{sessionId:Ge,session:V};Zt(!0);try{let L=await Gn(x);return{sessionId:L.sid,session:L.result.data.session??null}}finally{Zt(!1)}},[Gn,wt,Ge,V]),kn=(0,C.useCallback)(async x=>{let L=te.current;if(!L)return;let A=gt.current,le=await L(x);gt.current===A&&(at(le),le.data.session&&xe(le.data.session))},[]),Xn=(0,C.useCallback)(async()=>{await fn.current},[]),Cr=(0,C.useCallback)(async()=>(await Xn(),{proceed:!0}),[Xn]);(0,C.useEffect)(()=>{let x=!1,L,A=++Et.current;Kn(),ze(null),Rn(0);let le=()=>{x=!0,Et.current===A&&(Et.current+=1,Kn())},Me=Pr.current;if(An&&Me)return wn(En),Ne(!1),Fr.current===An?le:(xe(rl(Me,N)),(async()=>{let Be=typeof window<"u"&&new URLSearchParams(window.location.search).has("payment_intent"),W=En==="auto"&&!sn.current&&!Be;W&&(Ce(null),Bt(null),Tt("processing"));try{let m=await xt.current(void 0,ce=>{L=ce}),g=m.result.data.session??null;ie.current=Wi(m.result);let D=cs(m.result),z=Ui(m.sid||g?.id);if(!x&&W&&g&&!D&&!z){sn.current=!0,await uu(An,m.sdkGeneratedIdempotencyKey,()=>Yn.current(g,{attempt3DS:!0,fallbackToFull:!0,fromCreateSession:!0,initialAutoProcessingError:m.result.autoProcessingError,initialAutoProcessingPending:m.result.autoProcessingPending,autoProcessingAttempted:m.result.autoProcessingAttempted,sessionId:m.sid||g.id}));return}!x&&W&&((D||z)&&(sn.current=!0),Tt(null),Bt(null))}catch(m){if(x)return;let g=xa(m);if(W&&g==="session_auto_completed"){sn.current=!0,Tt("success"),await fa(600),x||(st(()=>{Ze.current?.({status:"succeeded"})}),Tt(null),Bt(null));return}W&&(Tt(null),Bt(null));let D=m instanceof Xe.FloPayError?m:new Xe.FloPayError(m instanceof Error?m.message:"Failed to create session","api_error");ze(D)}finally{L?.(),L=void 0}})(),()=>{le(),L?.()});Ne(!0);async function pt(){let Be=!1,W=null;try{let m=new $r.PaymentAPI(Q,{telemetry:!1}),g=await m.getUnifiedCheckoutSession(it,t);if(W=g,x)return;at(g);let D=g.data.session??null;if(xe(D),!D)throw new Xe.FloPayError("No session data returned","api_error");let z=D.checkoutMode;if(z==="setup")throw new Xe.FloPayError("This is a card setup session. Use FloPayCardSetup instead of FloPayCheckout.","validation_error",{code:"InvalidCardSetupSurface",param:"sessionId"});if(D.status==="authorized"){Ne(!1),st(()=>{Ze.current?.(Lr(D,it)),nt.current?.(D.successUrl??"")});return}if(D.status==="complete"){Ne(!1),st(()=>{nt.current?.(D.successUrl??"")});return}if(D.status==="expired")throw Aa(D);Be=!0;let ce=N??z??"full";wn(ce),gt.current+=1;let J=D.clientSecret||t;te.current=D.buyerIdentified===!1&&J?vo(m,it,J,{...D.customer?.id?{userId:D.customer.id}:{}}):void 0,Dt(!1),Ht(!1);let Ye=typeof window<"u"&&new URLSearchParams(window.location.search).has("payment_intent"),It=cs(g);if(ce==="auto"&&!sn.current&&!Ye&&!It){sn.current=!0;let E=pe(g);try{if(await Yn.current(D,{attempt3DS:!0,fallbackToFull:!0,ensureProvidersReady:()=>E,sessionId:it||D.id}),x)return;await E,x||Ne(!1);return}catch{if(x)return;await E,x||Ne(!1);return}}await pe(g),x||Ne(!1)}catch(m){if(x)return;let g=tl(m,Be);if(Be&&ee({class:"technical_error",errorCode:"SDK_INITIALIZATION_FAILED"}),g){let{errorCode:z,stage:ce,...J}=g;ls(Q,o,F,z,ce,J)}if(g?.stage==="provider_load"&&(N??W?.data.session?.checkoutMode??"full")==="full"&&el(W,h,O)){let z=mu({billingApiUrl:Q,locale:l,telemetry:o});ut.current=z,Kt(z,null),Rn(1),Ne(!1);return}let D=m instanceof Xe.FloPayError&&g?.stage!=="provider_load"?m:Qs();D!==m&&st(()=>se.current?.(D)),ze(D),Ne(!1)}}async function pe(Be){let{flopay:W,paypalFlopay:m,...g}=await ds(Be,{billingApiUrl:Q,locale:l,telemetry:o});ie.current={publishableKey:g.publishableKey,paypalPublishableKey:g.paypalPublishableKey},Kt(W,m),Rn(0)}return pt(),le},[N,An,En,Ct,t,h,O]);let dt=(0,C.useCallback)(async()=>{if(!ct||Fn!==1)return;let x=Et.current;Rn(2);try{let{flopay:L,paypalFlopay:A}=await ds(ct,{billingApiUrl:Q,locale:l,telemetry:o});if(Et.current!==x)return;Kn(),Kt(L,A),Rn(0)}catch(L){if(Et.current!==x)return;let{errorCode:A,stage:le,...Me}=Ei(L);ls(Q,o,F,A,le,Me)}},[Kn,Kt,l,Fn,Q,o,F,ct]),on=!!(it&&(V?.clientSecret||t)),tn=Dn||!on,Dr=(0,C.useCallback)(async()=>{if(!(Dn||!on||!V)){On(!0),Ce(null);try{await Tn(V,{attempt3DS:!0,fallbackToFull:!0,sessionId:it||V.id})}finally{On(!1)}}},[it,Dn,on,Tn,V]),zn=uc(ct,We),Vr=cs(ct),ar=(0,C.useMemo)(()=>{if(!(!ct||!V||!ct.data.stripe?.publishableKey))return{billingApiUrl:Q}},[ct,V,Q]),ir=!!(n&&!ye&&X==="buttons"&&ke&&En==="full"),bn=!!(it&&(V?.vault?.html||Wr(V))),sr=(0,C.useMemo)(()=>({session:V,loading:Nt,error:Ft,checkoutMode:Mt,inlineSessionDraft:en,applyInlineSessionPatch:ir?or:void 0,inlineSessionPatchProcessing:wt,claimPending:yn,claimRequiresIdentity:Qt,claimBuyerIdentity:kn,waitForDataAttachment:Xn}),[V,Nt,Ft,Mt,en,ir,or,wt,yn,Qt,kn,Xn]),Or=!!n&&X==="buttons"&&!Vr&&!bn&&(!Ae||!ar),In=St?(0,M.jsx)(er,{status:St,errorMessage:vn,authorized:Vn}):null;if(Nt&&!bn){if(d)return(0,M.jsxs)(M.Fragment,{children:[d,In]});if(X==="buttons"){let x=ot?.buttonsLayout?.cardButton?.borderRadius??ot?.appearance.variables?.borderRadius??8,L=A=>(0,M.jsx)("div",{style:{height:A,borderRadius:x,background:"#e5e7eb",animation:"flopay-loading-pulse 1.5s ease-in-out infinite"}});return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[h&&L(Do),O&&(Y||U)&&L(Do),O&&L(Do),(0,M.jsx)("style",{children:"@keyframes flopay-loading-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }"})]}),In]})}return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)("div",{style:{display:"flex",justifyContent:"center",padding:32},children:[(0,M.jsx)("div",{style:{width:24,height:24,border:"2px solid #e5e7eb",borderTopColor:"#6b7280",borderRadius:"50%",animation:"spin 0.6s linear infinite"}}),(0,M.jsx)("style",{children:"@keyframes spin { to { transform: rotate(360deg); } }"})]}),In]})}return Ft?u?(0,M.jsx)(pr.Provider,{value:sr,children:u(Ft)}):(0,M.jsx)(pr.Provider,{value:sr,children:(0,M.jsx)("div",{role:"alert","data-testid":"flopay-load-error",style:{padding:24,textAlign:"center",color:"#dc2626",fontSize:14},children:Ft.message})}):Or?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(pr.Provider,{value:sr,children:(0,M.jsx)(Pu,{onButtonClick:ft,showPayPal:h,showStripe:O,showApplePay:Y,showGooglePay:U,theme:he,buttonsTheme:Fe,buttonsStyles:oe,cardButtonContent:je,cardBackButtonContent:yt,cardTitleContent:re})}),In]}):Vr&&V&&zn?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(pr.Provider,{value:sr,children:(0,M.jsxs)("div",{className:rt,style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[rn&&(0,M.jsx)(Ro,{icon:!1,children:rn}),Ln==="retrying"&&(0,M.jsx)("div",{role:"status","aria-live":"polite",children:"PayPal is temporarily unavailable. Retrying\u2026"}),Ln==="exhausted"&&(0,M.jsxs)("div",{role:"alert",children:[(0,M.jsx)("div",{children:"PayPal is temporarily unavailable. Please try again."}),(0,M.jsx)("button",{type:"button",onClick:Gt,children:"Retry PayPal"})]}),Ln!=="exhausted"&&(0,M.jsx)("div",{"aria-hidden":Ln==="retrying"?!0:void 0,style:Ln==="retrying"?{position:"relative",height:0,opacity:0,pointerEvents:"none"}:void 0,children:(0,M.jsx)(Pl,{sessionId:it,nonce:V.clientSecret||void 0,billingApiUrl:Q,email:V.customer?.email||en?.account?.email,billingName:[V.customer?.firstName,V.customer?.lastName].filter(Boolean).join(" ")||[en?.account?.firstName,en?.account?.lastName].filter(Boolean).join(" ")||void 0,onBuyerIdentityReady:kn,clientId:zn.clientId,environment:zn.environment,currency:(V.currency??"usd").toUpperCase(),isSubscription:V.mode==="subscription",providerObjectType:zn.providerObjectType,approvalPresentation:zn.approvalPresentation,existingOrderId:zn.existingOrderId,onComplete:p,onErrorChange:Ce,onDecline:B,onButtonClick:ft,runBeforeButtonClick:Cr,onInitializationStateChange:jr,allowAutomaticRetry:hr===0,session:V,telemetry:o,telemetryContext:F,onInstrument:vt,debug:de},`${Ke}:paypal-init-${hr}`)})]})}),In]}):Mt==="confirm"?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(pr.Provider,{value:sr,children:(0,M.jsx)(aa,{flopay:Ae,paypalFlopay:q,options:ar??{billingApiUrl:Q},onInstrument:vt,children:(0,M.jsxs)("div",{className:rt,children:[rn&&(0,M.jsx)("div",{style:{color:"#dc2626",fontSize:"0.875rem",marginBottom:"0.75rem",textAlign:"center"},children:rn}),ue?ue({onConfirm:Dr,isProcessing:tn}):(0,M.jsx)("button",{type:"button",onClick:Dr,disabled:tn,style:{width:"100%",padding:"0.875rem",backgroundColor:"#4A49FF",color:"white",border:"none",borderRadius:"8px",fontSize:"1rem",fontWeight:600,cursor:tn?"not-allowed":"pointer",opacity:tn?.6:1},children:Dn?"Processing...":ve??"Confirm Purchase"})]})},Ke)}),In]}):(!Ae||!ar)&&!(bn&&Mt==="full")?(0,M.jsx)(M.Fragment,{children:In}):(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(pr.Provider,{value:sr,children:(0,M.jsxs)(aa,{flopay:Ae,paypalFlopay:q,options:ar??{billingApiUrl:Q},onInstrument:vt,children:[Fn===1&&(0,M.jsx)("button",{type:"button",onClick:dt,children:"Retry payment methods"}),ye?(0,M.jsxs)(M.Fragment,{children:[rn&&(0,M.jsx)("div",{style:{padding:"0.75rem 1rem",marginBottom:"0.75rem",backgroundColor:"#FEF3C7",border:"1px solid #F59E0B",borderRadius:"8px",color:"#92400E",fontSize:"0.875rem"},children:rn}),(0,M.jsx)(bu,{sessionId:it,nonce:V?.clientSecret||void 0,billingApiUrl:Q,session:V,submitLabel:Ve,walletPresentation:G,children:ye})]}):(0,M.jsx)(oi,{sessionId:it,nonce:V?.clientSecret||void 0,telemetry:o,email:V?.customer?.email||en?.account?.email,userId:V?.customer?.id||en?.account?.userId,firstName:V?.customer?.firstName||en?.account?.firstName,lastName:V?.customer?.lastName||en?.account?.lastName,totalAmount:V?Math.round((0,Xe.buildCheckoutDisplayData)(V).total*100):0,currency:V?.currency?.toLowerCase()??"usd",onComplete:p,onError:b,onDecline:B,error:rn,onErrorChange:Ce,showPayPal:h,showStripe:O,walletPresentation:G,enabledPaymentMethods:Fn?[]:T??ct?.data.stripe?.enabledPaymentMethods??V?.gateways?.stripe?.enabledPaymentMethods,enabledPaymentMethodCountries:ct?.data.stripe?.enabledPaymentMethodCountries,showApplePay:Y,showGooglePay:U,layout:X,theme:he,buttonsTheme:Fe,buttonsStyles:oe,appearance:lt,cardButtonContent:je,cardBackButtonContent:yt,cardTitleContent:re,onButtonClick:ft,onBeforeButtonClick:ke,onBuyerIdentityReady:kn,enableAVS:Oe,...be?{cardFieldOrder:be}:{},...me?{cardPreFormSlot:me}:{},avsLayout:Ie,country:V?.customer?.country,city:V?.customer?.city,state:V?.customer?.state,onCountryChange:I,onZipChange:w,avsCheck:!!Oe,checkoutType:n?"embedded_checkout":"standard_checkout",checkoutLayout:ps(ye,X),className:rt,submitLabel:Ve,directPaypal:zn,isSubscription:V?.mode==="subscription",session:V,dataAttachmentPending:yn,dataAttachmentRequiresIdentity:Qt,debug:de})]},Ke)}),In]})}function bu({sessionId:e,nonce:t,billingApiUrl:n,session:r,submitLabel:o,walletPresentation:a,children:l}){return(0,M.jsx)(M.Fragment,{children:C.default.Children.map(l,d=>{if(!C.default.isValidElement(d))return d;let u=d.props,p={};return u.sessionId||(p.sessionId=e),!u.nonce&&t&&(p.nonce=t),u.billingApiUrl||(p.billingApiUrl=n),u.submitLabel===void 0&&o!==void 0&&(p.submitLabel=o),u.walletPresentation===void 0&&(p.walletPresentation=a),r?.customer&&(u.email||(p.email=r.customer.email),u.userId||(p.userId=r.customer.id),u.firstName||(p.firstName=r.customer.firstName),u.lastName||(p.lastName=r.customer.lastName)),Object.keys(p).length===0?d:C.default.cloneElement(d,p)})})}function Pu({onButtonClick:e,showPayPal:t,showStripe:n=!0,showApplePay:r,showGooglePay:o,theme:a,buttonsTheme:l,buttonsStyles:d,cardButtonContent:u,cardBackButtonContent:p,cardTitleContent:b}){let[v,B]=(0,C.useState)(!1),I=(0,C.useMemo)(()=>(0,Xe.resolveTheme)(a),[a]),w=(0,C.useMemo)(()=>{let T=I?.buttonsLayout??(0,Xe.resolveButtonsLayoutTheme)(l);return d?{...T,...d,cardButton:{...T.cardButton,...d.cardButton},cardFormContainer:{...T.cardFormContainer,...d.cardFormContainer},backButton:{...T.backButton,...d.backButton},backButtonIcon:{...T.backButtonIcon,...d.backButtonIcon},submitButton:{...T.submitButton,...d.submitButton},title:{...T.title,...d.title}}:T},[I,l,d]),h=I?.buttonsLayout?.cardButton?.borderRadius??I?.appearance.variables?.borderRadius??8,O=T=>(0,M.jsx)("div",{style:{height:T,borderRadius:h,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}}),G=u===void 0?{boxSizing:"border-box",height:Do,padding:"0 1rem"}:{padding:"0.9rem 1rem"};if(v){let T=w.cardInputBorder??"#e5e7eb",Y=w.cardInputBackground??"white",U=ho(p),de=ho(b);return(0,M.jsxs)("div",{style:{backgroundColor:w.cardFormContainer?.backgroundColor??"white",borderRadius:"8px",animation:"flopay-interim-expand 0.35s cubic-bezier(0.4, 0, 0.2, 1) both",overflow:"hidden",...w.cardFormContainer},children:[(0,M.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"0.75rem 0 0.625rem"},children:[(0,M.jsxs)("button",{type:"button",onClick:()=>B(!1),"aria-label":"Back to payment methods",style:{display:"inline-flex",alignItems:"center",gap:U?0:"0.5rem",background:"none",border:"none",color:"#4b5563",fontSize:"0.85rem",fontWeight:500,padding:0,flexShrink:0,opacity:1,cursor:"pointer",...w.backButton},children:[(0,M.jsx)("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"50%",backgroundColor:"#f3f4f6",...w.backButtonIcon},children:(0,M.jsx)("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:(0,M.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,M.jsx)(Po,{content:p})]}),de?(0,M.jsx)("div",{style:{flex:1}}):(0,M.jsx)("div",{style:{flex:1,textAlign:"center",fontWeight:600,fontSize:"1.05rem",color:"#262833",paddingRight:80,...w.title},children:(0,M.jsx)(Yo,{content:b})})]}),(0,M.jsx)("div",{style:{backgroundColor:Y,border:`1px solid ${T}`,borderTopLeftRadius:8,borderTopRightRadius:8,padding:12,height:45},children:(0,M.jsx)("div",{style:{width:"60%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),(0,M.jsxs)("div",{style:{display:"flex"},children:[(0,M.jsx)("div",{style:{flex:1,backgroundColor:Y,borderTop:"none",borderRight:"none",borderBottom:`1px solid ${T}`,borderLeft:`1px solid ${T}`,borderBottomLeftRadius:8,padding:12,height:45},children:(0,M.jsx)("div",{style:{width:"50%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),(0,M.jsx)("div",{style:{flex:1,backgroundColor:Y,borderTop:"none",borderRight:`1px solid ${T}`,borderBottom:`1px solid ${T}`,borderLeft:`1px solid ${T}`,borderBottomRightRadius:8,padding:12,height:45},children:(0,M.jsx)("div",{style:{width:"40%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})})]}),(0,M.jsx)("div",{style:{backgroundColor:Y,border:`1px solid ${T}`,borderRadius:8,marginTop:8,padding:12,height:45},children:(0,M.jsx)("div",{style:{width:"45%",height:14,borderRadius:4,background:"#e5e7eb",animation:"flopay-interim-pulse 1.5s ease-in-out infinite"}})}),(0,M.jsx)("div",{style:{height:50,borderRadius:8,marginTop:16,background:"#c8c8ff",animation:"flopay-interim-pulse 1.5s ease-in-out infinite",...w.submitButton,opacity:.5}}),(0,M.jsx)("style",{children:`
|
|
41
41
|
@keyframes flopay-interim-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }
|
|
42
42
|
@keyframes flopay-interim-expand {
|
|
43
43
|
0% { opacity: 0; max-height: 0; transform: translateY(-12px); }
|
|
44
44
|
40% { opacity: 1; }
|
|
45
45
|
100% { opacity: 1; max-height: 600px; transform: translateY(0); }
|
|
46
46
|
}
|
|
47
|
-
`})]})}return(0,x.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[t&&O(Fo),n&&(r||o)&&O(Fo),n&&(0,x.jsx)("button",{type:"button",onClick:()=>{e?.("card"),M(!0)},style:{width:"100%",...G,backgroundColor:"white",color:"#262833",border:"1px solid #d1d5db",borderRadius:"8px",fontSize:w.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,...w.cardButton},onMouseDown:T=>{T.currentTarget.style.transform="scale(0.985)"},onMouseUp:T=>{T.currentTarget.style.transform="scale(1)"},children:(0,x.jsx)(ho,{content:u})}),(0,x.jsx)("style",{children:"@keyframes flopay-interim-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }"})]})}var tr=require("react/jsx-runtime"),Pu=44;function uc(e){return new Promise(t=>setTimeout(t,e))}function vu(e,t){return e instanceof nr.FloPayError?e:new nr.FloPayError(e instanceof Error?e.message:t,"api_error")}function Cu(e,t){return!(!t||e.type==="validation_error"||e.checkoutMethod&&e.checkoutMethod!=="card"&&e.checkoutMethod!=="paypal")}function Su(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 pc({sessionId:e,nonce:t,createSession:n,paymentMethodId:r,checkoutMethod:o,clientId:a,products:l,items:d,subscriptions:u,account:p,successUrl:b,cancelUrl:v,couponCodes:M,tagsData:I,utmMetadata:w,billingApiUrl:h,locale:O,theme:G,appearance:T,buttonsTheme:Y,buttonsStyles:U,onSuccess:de,onError:X,onDecline:he,children:De,disabled:re=!1,type:Ve="button",style:yt,...te}){let Oe=(0,Qe.useMemo)(()=>(0,nr.resolveBillingApiUrl)(h),[h]),ft=(0,Qe.useMemo)(()=>Su({createSession:n,clientId:a,products:l,items:d,subscriptions:u,account:p,successUrl:b,cancelUrl:v,couponCodes:M,tagsData:I,utmMetadata:w}),[p,v,a,M,n,l,d,u,b,I,w]),[ke,Le]=(0,Qe.useState)(!1),[be,me]=(0,Qe.useState)(null),[Ie,We]=(0,Qe.useState)(null),[rt,R]=(0,Qe.useState)(!1),[He,ye]=(0,Qe.useState)(null),[N,ve]=(0,Qe.useState)(null),ue=(0,Qe.useRef)(!0),Ke=(0,Qe.useRef)(null),Z=(0,Qe.useRef)(N),ot=(0,Qe.useRef)(de),lt=(0,Qe.useRef)(X),Ae=(0,Qe.useRef)(he),Ne=(0,Qe.useCallback)(f=>Ha(Ke,async P=>{try{return await f(P)}catch(H){throw P.aborted?Xr(H):H}}),[]);(0,Qe.useEffect)(()=>{Z.current=N},[N]),(0,Qe.useEffect)(()=>{ot.current=de},[de]),(0,Qe.useEffect)(()=>{lt.current=X},[X]),(0,Qe.useEffect)(()=>{Ae.current=he},[he]),(0,Qe.useEffect)(()=>(ue.current=!0,()=>{ue.current=!1,Ke.current?.abort()}),[]),(0,Qe.useEffect)(()=>{if(typeof window>"u")return;let f=P=>{P.key==="Escape"&&ve(null)};return window.addEventListener("keydown",f),()=>{window.removeEventListener("keydown",f)}},[]);let ct=(0,Qe.useCallback)((f,P=ia)=>{Ae.current?.(cn(P,f,{code:f.code,declineCode:f.declineCode}))},[]),at=(0,Qe.useCallback)(async f=>{ue.current&&(We(null),R(f.result.status==="authorized"),me("success"),await uc(600),ue.current&&st(()=>ot.current?.(f)))},[]),xe=(0,Qe.useCallback)(async(f,P)=>{ue.current&&(lt.current?.(f),P?.emitDecline&&ct(f,P.method),We(f.message),R(!1),me("error"),await uc(400))},[ct]),jt=(0,Qe.useCallback)(async(f,P,H)=>{let ne=f.data.session??null;if(!ne)throw new nr.FloPayError("No session data returned","api_error");let $e=ne.clientSecret||t;if(Nr(ne)){await at({result:Lr(ne,P),session:ne,sessionId:ne.id||P,autoCompleted:!1});return}if(ne.status==="expired")throw Ta(ne);try{if(f.autoProcessingPending){let Re=f.autoProcessingPending,ae=new li.PaymentAPI(Oe),it=await Ne(ze=>ae.waitForCheckoutSessionCompletion(Re.sessionId,{initialDelayMs:Re.retryAfterMs,nonce:$e,statusUrl:Re.statusUrl,signal:ze})),Ct=Kr(it,ne),Nt=it.autoProcessingError?.type==="3ds_required"&&it.autoProcessingError.nextActionRedirectUrl?{type:"next_action_required",nextActionRedirectUrl:it.autoProcessingError.nextActionRedirectUrl}:null;if(Nt&&P&&$e){let ze=await Ne(Ft=>To(Nt,{billingApiUrl:Oe,sessionId:P,nonce:$e,session:ne,signal:Ft,telemetry:!0}));await at({result:ze,session:ne,sessionId:ne.id||P,autoCompleted:!1});return}if(it.autoProcessingError)throw Er(it.autoProcessingError,"Automatic payment failed. Please try again.",{checkoutMethod:it.autoProcessingError.checkoutMethod});if(!Nr(Ct))throw vo(Ct);await at({result:Lr(Ct,P),session:Ct,sessionId:Ct.id||P,autoCompleted:!1});return}if(f.autoProcessingError){let Re=f.autoProcessingError.nextActionRedirectUrl;if(f.autoProcessingError.type==="3ds_required"&&Re&&P&&$e){let ae=await Ne(ze=>ji({billingApiUrl:Oe,sessionId:P,nonce:$e,nextActionRedirectUrl:Re,signal:ze}));if(ae.status==="declined")throw Er({type:ae.declineReason??"decline",message:"Card was declined.",gatewayErrorCode:ae.gatewayDeclineReason??void 0},"Card was declined.",{checkoutMethod:f.autoProcessingError.checkoutMethod});let Ct=await new li.PaymentAPI(Oe).waitForCheckoutSessionCompletion(P,{initialDelayMs:0,nonce:$e}),Nt=Kr(Ct,ne);if(!Nr(Nt))throw Er({type:"unknown",message:"Card authentication was not completed."},"Card authentication was not completed.",{checkoutMethod:f.autoProcessingError.checkoutMethod});await at({result:Lr(Nt,P),session:Nt,sessionId:Nt.id||P,autoCompleted:!1});return}throw Er(f.autoProcessingError,"Automatic payment failed. Please try again.",{checkoutMethod:f.autoProcessingError.checkoutMethod})}if(H?.fromCreateSession&&f.autoProcessingAttempted===!0)throw Er({type:"unknown",message:"Automatic payment failed. Please try again."},"Automatic payment failed. Please try again.");let vt=await Ao({billingApiUrl:Oe,sessionId:P??ne.id,session:ne,nonce:$e});if(vt.type==="next_action_required"&&$e){let Re=P??ne.id,ae=await Ne(it=>To(vt,{billingApiUrl:Oe,sessionId:Re,nonce:$e,session:ne,signal:it,telemetry:!0}));await at({result:ae,session:ne,sessionId:ne.id||Re,autoCompleted:!1});return}if(vt.type!=="success")throw Er({type:"unknown",message:"Automatic payment failed. Please try again."},"Automatic payment failed. Please try again.");await at({result:vt.result,session:ne,sessionId:ne.id||P,autoCompleted:!1})}catch(vt){let Re=sa(vt);if(Re.code==="three_ds_aborted")return;if(Re.code==="checkout_processing_timeout"){if(!ue.current)return;ye(Re.message),st(()=>lt.current?.(Re));return}let ae=ne.id||P;await xe(Re,{emitDecline:!0,method:Re.checkoutMethod??ia}),Cu(Re,ae)&&ae&&ue.current&&ve({sessionId:ae,errorMessage:Re.message,nonce:$e||void 0,payPalOrderId:Re.orderId})}},[t,Oe,Ne,xe,at]),Vt=(0,Qe.useCallback)(async f=>{if(te.onClick?.(f),!(f.defaultPrevented||re||ke)){if(ve(null),ye(null),e&&ft){let P=new nr.FloPayError("Provide either sessionId or create-session props, not both.","validation_error");await xe(P),ue.current&&(me(null),We(null));return}if(!e&&!ft){let P=new nr.FloPayError("Provide a sessionId or the props required to create an automatic payment session.","validation_error");await xe(P),ue.current&&(me(null),We(null));return}Le(!0),We(null),R(!1),me("processing");try{let P=new li.PaymentAPI(Oe);if(e){let H=await P.getUnifiedCheckoutSession(e,t);await jt(H,e);return}try{let H=await P.createAndFetchSession({...ft});await jt(H,H.data.session?.id??null,{fromCreateSession:!0})}catch(H){if(Aa(H)==="session_auto_completed"){await at({result:{status:"succeeded"},session:null,sessionId:null,autoCompleted:!0});return}throw H}}catch(P){await xe(vu(P,"Automatic payment failed. Please try again."))}finally{ue.current&&(me(null),We(null),Le(!1))}}},[te.onClick,ft,re,ke,t,jt,Oe,e,xe,at]),ut=(0,Qe.useCallback)(f=>{let P=Z.current;ve(null),ot.current?.({result:f,session:null,sessionId:P?.sessionId??null,autoCompleted:!1})},[]),Et=(0,Qe.useCallback)(f=>{lt.current?.(f)},[]),q=(0,Qe.useCallback)(f=>{Ae.current?.(f)},[]),fe=(0,Qe.useMemo)(()=>(0,nr.resolveTheme)(G),[G]),et=(0,Qe.useMemo)(()=>{let f=fe?.buttonsLayout??(0,nr.resolveButtonsLayoutTheme)(Y);return U?{...f,...U,cardButton:{...f.cardButton,...U.cardButton}}:f},[fe,Y,U]),V=(0,Qe.useMemo)(()=>{let f=fe?.appearance;return T?f?{...f,...T,variables:{...f.variables,...T.variables}}:T:f},[T,fe]),Me=V?.variables,bt=Me?.colorPrimary??"#4A49FF",Ge=Me?.colorPrimaryHover??Bo(bt,.12),$=Me?.borderRadius??"8px";return(0,tr.jsxs)(tr.Fragment,{children:[(0,tr.jsx)("button",{...te,type:Ve,onClick:Vt,disabled:re||ke,"aria-busy":ke,style:{width:"100%",...De===void 0?{boxSizing:"border-box",height:Pu,padding:"0 1rem"}:{padding:"0.9rem 1rem"},...et.cardButton,...is({themeBundle:fe,resolvedPrimaryColor:bt,resolvedBorderRadius:$,submitButtonStyle:et.submitButton,explicitPrimaryColor:Me?.colorPrimary}),fontSize:et.cardButtonFontSize??"0.95rem",fontWeight:600,cursor:re||ke?"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:re||ke?.6:1,...yt},onMouseEnter:f=>{te.onMouseEnter?.(f),!f.defaultPrevented&&!re&&!ke&&(fe||Me?.colorPrimary)&&(f.currentTarget.style.backgroundColor=Ge)},onMouseLeave:f=>{te.onMouseLeave?.(f),!f.defaultPrevented&&(fe||Me?.colorPrimary)&&(f.currentTarget.style.backgroundColor=bt)},onMouseDown:f=>{te.onMouseDown?.(f),f.defaultPrevented||(f.currentTarget.style.transform="scale(0.985)")},onMouseUp:f=>{te.onMouseUp?.(f),f.defaultPrevented||(f.currentTarget.style.transform="scale(1)")},children:(0,tr.jsx)(ho,{content:De})}),He&&(0,tr.jsx)("p",{role:"status","data-testid":"flopay-automatic-payment-pending-notice",style:{margin:"0.5rem 0 0",fontSize:"0.875rem",textAlign:"center"},children:He}),be&&(0,tr.jsx)(er,{status:be,errorMessage:Ie,authorized:rt}),N&&(0,tr.jsx)("div",{"data-testid":"flopay-automatic-payment-fallback",role:"dialog","aria-modal":"true",onClick:f=>{f.target===f.currentTarget&&ve(null)},style:{position:"fixed",inset:0,background:"rgba(0, 0, 0, 0.45)",display:"flex",alignItems:"center",justifyContent:"center",padding:"1.5rem",zIndex:1100},children:(0,tr.jsx)("div",{style:{width:"100%",maxWidth:520,maxHeight:"90vh",overflowY:"auto",background:"white",borderRadius:20,padding:"1.5rem",boxShadow:"0 24px 80px rgba(15, 23, 42, 0.28)",display:"flex",flexDirection:"column",gap:"1rem"},children:(0,tr.jsx)(si,{sessionId:N.sessionId,nonce:N.nonce,checkoutMode:"full",billingApiUrl:Oe,locale:O,theme:G,...V?{appearance:V}:{},buttonsTheme:Y,buttonsStyles:U,initialErrorMessage:N.errorMessage,initialPayPalOrderId:N.payPalOrderId,cardTitleContent:null,onComplete:ut,onError:Et,onDecline:q})})})]})}var ci=require("@flopay/js/card-setup"),jn=require("@flopay/shared"),_t=require("react");var mc={light:{success:"#166534",error:"#991B1B"},dark:{success:"#4ADE80",error:"#FCA5A5"}};function yc(e){let t=e.appearance.variables??{},n=e.buttonsLayout.cardFormContainer??{},r=e.appearance.theme==="night",o=r?mc.dark:mc.light,a=t.colorText??(r?"#F1F5F9":"#262833"),l=e.appearance.rules?.[".Label"];return{panel:{...n.background===void 0?{}:{background:n.background},...n.backgroundColor===void 0?{}:{backgroundColor:n.backgroundColor},...n.border===void 0?{}:{border:n.border},...n.borderRadius===void 0?{}:{borderRadius:n.borderRadius},...n.boxShadow===void 0?{}:{boxShadow:n.boxShadow},color:a,...t.fontFamily?{fontFamily:t.fontFamily}:{}},spinnerTrackColor:e.buttonsLayout.cardInputBorder??(r?"#374151":"#e5e7eb"),spinnerAccentColor:t.colorPrimary??"#4A49FF",labelColors:{processing:a,success:o.success,error:o.error},noteColor:l?.color??a}}var xr=require("react/jsx-runtime"),ga=class extends jn.FloPayError{constructor(t,n,r){super(t,n,r),this.name="FloPayCardSetupError",this.retryable=r.retryable}};function fc(e,t={}){let n=e instanceof jn.FloPayError?e:void 0,r=n?.statusCode,o=t.retryable??(n?.type==="network_error"||n?.type==="rate_limit_error"||typeof r=="number"&&r>=500||n?.code==="vault_capture_timeout"||!n);return new ga(n?.message??(e instanceof Error?e.message:"Failed to load the secure card form."),n?.type??"api_error",{code:t.code??n?.code??"card_setup_load_failed",retryable:o,...n?.param?{param:n.param}:{},...r===void 0?{}:{statusCode:r}})}function gc({sessionId:e,nonce:t,billingApiUrl:n,telemetry:r,theme:o="modern-light",containerStyle:a,loading:l=null,onReady:d,onComplete:u,onDecline:p,onCancel:b,onValidation:v,onError:M}){let[I,w]=(0,_t.useState)(null),[h,O]=(0,_t.useState)(null),[G,T]=(0,_t.useState)(null),[Y,U]=(0,_t.useState)(null),[de,X]=(0,_t.useState)(null),he=(0,_t.useRef)(!1),De=(0,_t.useRef)(!1),re=(0,_t.useMemo)(()=>typeof o=="object"?void 0:(0,jn.resolveTheme)(o),[o]),Ve=(0,_t.useMemo)(()=>typeof o=="object"?o:re?Ja({appearance:re.appearance,buttonsStyles:re.buttonsLayout,layout:"default"}):null,[re,o]),yt=(0,_t.useMemo)(()=>_l(re?.buttonsLayout.cardFormContainer,a),[re,a]),te=(0,_t.useMemo)(()=>re?yc(re):void 0,[re]),Oe=(0,_t.useRef)(d),ft=(0,_t.useRef)(M),ke=(0,_t.useRef)(u),Le=(0,_t.useRef)(p),be=(0,_t.useRef)(b),me=(0,_t.useRef)(v),Ie=(0,_t.useRef)(!1),We=(0,_t.useRef)(!1),rt=(0,_t.useRef)(0);return Oe.current=d,ft.current=M,ke.current=u,Le.current=p,be.current=b,me.current=v,(0,_t.useEffect)(()=>{let R=rt.current+1;return rt.current=R,()=>{queueMicrotask(()=>{rt.current===R&&(Ie.current||We.current||(We.current=!0,st(()=>{be.current?.({status:"cancelled",sessionId:e})})))})}},[e]),(0,_t.useEffect)(()=>{let R=!0,He=new ci.PaymentAPI((0,jn.resolveBillingApiUrl)(n),{telemetry:r});return w(null),O(null),T(null),Ie.current=!1,We.current=!1,(async()=>{try{if(!e.trim())throw new jn.FloPayError("FloPayCardSetup requires a sessionId.","validation_error",{code:"MissingCheckoutSessionId",param:"sessionId"});if(!t.trim())throw new jn.FloPayError("FloPayCardSetup requires a session nonce.","validation_error",{code:"MissingCheckoutSessionToken",param:"nonce"});let ye=await He.getUnifiedCheckoutSession(e,t);if(!R)return;let N=ye.data.session;if(!N||!(0,jn.isCardSetupCheckoutSession)(N))throw new jn.FloPayError("FloPayCardSetup only accepts a zero-amount, productless setup session.","validation_error",{code:"InvalidCardSetupSession",param:"sessionId"});let ve=N.vault;if(ve?.html?.trim()||(ve=await He.getVaultCapture(e,t)),!ve.html?.trim())throw new jn.FloPayError("FloPay: this setup session has no vault card capability. Upgrade the billing backend integration.","api_error",{code:"UnsupportedBackendVaultCapability"});if(!R)return;O(ve),w(new ci.PciVaultCardCapture({sessionId:e,operation:"card_setup",telemetry:r}))}catch(ye){if(!R)return;let N=fc(ye);Ie.current=!0,T(N),st(()=>ft.current?.(N))}})(),()=>{R=!1,He.destroy()}},[n,t,e,r]),(0,_t.useEffect)(()=>{if(!I)return;let R=!1;De.current=!1,he.current=!1;let He=I.on("submitting",()=>{he.current=!0,X(null),U("processing")}),ye=I.on("complete",ue=>{Ie.current=!0,he.current=!1,U("success"),(async()=>(await new Promise(Ke=>setTimeout(Ke,600)),!De.current&&(De.current=!0,st(()=>{ke.current?.({status:"succeeded",sessionId:e,...ue.paymentMethod?{paymentMethod:ue.paymentMethod}:{}})}),R||U(null))))()}),N=I.on("decline",ue=>{Ie.current=!0,he.current=!1,X(ue.message??null),U("error"),st(()=>{Le.current?.({status:"declined",sessionId:e,...ue.declineReason?{reason:ue.declineReason}:{},...ue.message?{message:ue.message}:{}})}),(async()=>(await new Promise(Ke=>setTimeout(Ke,400)),R||U(null)))()}),ve=I.on("challenge_dismissed",()=>{U(null)});return()=>{R=!0,He(),ye(),N(),ve()}},[I,e]),G?(0,xr.jsx)("div",{role:"alert",children:G.message}):!I||!h?.html?(0,xr.jsx)(xr.Fragment,{children:l}):(0,xr.jsxs)(xr.Fragment,{children:[Y&&(0,xr.jsx)(er,{status:Y,errorMessage:de,processingLabel:"SAVING CARD...",successLabel:"CARD SAVED",errorLabel:"CARD NOT SAVED",successNote:null,...te?{theme:te}:{}}),(0,xr.jsx)(Mo,{capture:I,html:h.html,messageToken:h.messageToken,expectedOrigin:h.expectedOrigin,theme:Ve,containerStyle:yt,onReady:()=>{st(()=>Oe.current?.())},onValidation:R=>{st(()=>me.current?.(R))},onError:R=>{if(!R)return;he.current&&(he.current=!1,X(R),U("error"),setTimeout(()=>U(null),400));let He=fc(new Error(R),{code:"card_setup_widget_failed",retryable:!0});st(()=>ft.current?.(He))}})]})}0&&(module.exports={DirectPayPalButton,FloPayAutomaticPaymentButton,FloPayCardSetup,FloPayCardSetupError,FloPayCheckout,FloPayProvider,SplitCardForm,VaultCardFields,dropThirdPartyOnlyError,useCheckout,useFloPay,usePayPalFloPay});
|
|
47
|
+
`})]})}return(0,M.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[t&&O(Do),n&&(r||o)&&O(Do),n&&(0,M.jsx)("button",{type:"button",onClick:()=>{e?.("card"),B(!0)},style:{width:"100%",...G,backgroundColor:"white",color:"#262833",border:"1px solid #d1d5db",borderRadius:"8px",fontSize:w.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,...w.cardButton},onMouseDown:T=>{T.currentTarget.style.transform="scale(0.985)"},onMouseUp:T=>{T.currentTarget.style.transform="scale(1)"},children:(0,M.jsx)(bo,{content:u})}),(0,M.jsx)("style",{children:"@keyframes flopay-interim-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }"})]})}var tr=require("react/jsx-runtime"),vu=44;function pc(e){return new Promise(t=>setTimeout(t,e))}function Cu(e,t){return e instanceof nr.FloPayError?e:new nr.FloPayError(e instanceof Error?e.message:t,"api_error")}function Su(e,t){return!(!t||e.type==="validation_error"||e.checkoutMethod&&e.checkoutMethod!=="card"&&e.checkoutMethod!=="paypal")}function wu(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 mc({sessionId:e,nonce:t,createSession:n,paymentMethodId:r,checkoutMethod:o,clientId:a,products:l,items:d,subscriptions:u,account:p,successUrl:b,cancelUrl:v,couponCodes:B,tagsData:I,utmMetadata:w,billingApiUrl:h,locale:O,theme:G,appearance:T,buttonsTheme:Y,buttonsStyles:U,onSuccess:de,onError:X,onDecline:he,children:Fe,disabled:oe=!1,type:je="button",style:yt,...re}){let De=(0,Qe.useMemo)(()=>(0,nr.resolveBillingApiUrl)(h),[h]),ft=(0,Qe.useMemo)(()=>wu({createSession:n,clientId:a,products:l,items:d,subscriptions:u,account:p,successUrl:b,cancelUrl:v,couponCodes:B,tagsData:I,utmMetadata:w}),[p,v,a,B,n,l,d,u,b,I,w]),[ke,Oe]=(0,Qe.useState)(!1),[be,me]=(0,Qe.useState)(null),[Ie,Ve]=(0,Qe.useState)(null),[rt,R]=(0,Qe.useState)(!1),[We,ye]=(0,Qe.useState)(null),[N,ve]=(0,Qe.useState)(null),ue=(0,Qe.useRef)(!0),He=(0,Qe.useRef)(null),Q=(0,Qe.useRef)(N),ot=(0,Qe.useRef)(de),lt=(0,Qe.useRef)(X),Te=(0,Qe.useRef)(he),Le=(0,Qe.useCallback)(f=>Ka(He,async P=>{try{return await f(P)}catch(H){throw P.aborted?Jr(H):H}}),[]);(0,Qe.useEffect)(()=>{Q.current=N},[N]),(0,Qe.useEffect)(()=>{ot.current=de},[de]),(0,Qe.useEffect)(()=>{lt.current=X},[X]),(0,Qe.useEffect)(()=>{Te.current=he},[he]),(0,Qe.useEffect)(()=>(ue.current=!0,()=>{ue.current=!1,He.current?.abort()}),[]),(0,Qe.useEffect)(()=>{if(typeof window>"u")return;let f=P=>{P.key==="Escape"&&ve(null)};return window.addEventListener("keydown",f),()=>{window.removeEventListener("keydown",f)}},[]);let ct=(0,Qe.useCallback)((f,P=sa)=>{Te.current?.(cn(P,f,{code:f.code,declineCode:f.declineCode}))},[]),at=(0,Qe.useCallback)(async f=>{ue.current&&(Ve(null),R(f.result.status==="authorized"),me("success"),await pc(600),ue.current&&st(()=>ot.current?.(f)))},[]),Ae=(0,Qe.useCallback)(async(f,P)=>{ue.current&&(lt.current?.(f),P?.emitDecline&&ct(f,P.method),Ve(f.message),R(!1),me("error"),await pc(400))},[ct]),jt=(0,Qe.useCallback)(async(f,P,H)=>{let ee=f.data.session??null;if(!ee)throw Hr(new nr.FloPayError("No session data returned","api_error"),P);let qe=ee.clientSecret||t;if(Nr(ee)){await at({result:Lr(ee,P),session:ee,sessionId:ee.id||P,autoCompleted:!1});return}if(ee.status==="expired")throw Hr(Aa(ee),ee.id||P);try{if(f.autoProcessingPending){let Ge=f.autoProcessingPending,Z=new ci.PaymentAPI(De),it=await Le(Ne=>Z.waitForCheckoutSessionCompletion(Ge.sessionId,{initialDelayMs:Ge.retryAfterMs,nonce:qe,statusUrl:Ge.statusUrl,signal:Ne})),Ct=Gr(it,ee),Nt=it.autoProcessingError?.type==="3ds_required"&&it.autoProcessingError.nextActionRedirectUrl?{type:"next_action_required",nextActionRedirectUrl:it.autoProcessingError.nextActionRedirectUrl}:null;if(Nt&&P&&qe){let Ne=await Le(Ft=>Ao(Nt,{billingApiUrl:De,sessionId:P,nonce:qe,session:ee,signal:Ft,telemetry:!0}));await at({result:Ne,session:ee,sessionId:ee.id||P,autoCompleted:!1});return}if(it.autoProcessingError)throw Er(it.autoProcessingError,"Automatic payment failed. Please try again.",{checkoutMethod:it.autoProcessingError.checkoutMethod});if(!Nr(Ct))throw Co(Ct);await at({result:Lr(Ct,P),session:Ct,sessionId:Ct.id||P,autoCompleted:!1});return}if(f.autoProcessingError){let Ge=f.autoProcessingError.nextActionRedirectUrl;if(f.autoProcessingError.type==="3ds_required"&&Ge&&P&&qe){let Z=await Le(Ne=>Vi({billingApiUrl:De,sessionId:P,nonce:qe,nextActionRedirectUrl:Ge,signal:Ne}));if(Z.status==="declined")throw Er({type:Z.declineReason??"decline",message:"Card was declined.",gatewayErrorCode:Z.gatewayDeclineReason??void 0},"Card was declined.",{checkoutMethod:f.autoProcessingError.checkoutMethod});let Ct=await new ci.PaymentAPI(De).waitForCheckoutSessionCompletion(P,{initialDelayMs:0,nonce:qe}),Nt=Gr(Ct,ee);if(!Nr(Nt))throw Er({type:"unknown",message:"Card authentication was not completed."},"Card authentication was not completed.",{checkoutMethod:f.autoProcessingError.checkoutMethod});await at({result:Lr(Nt,P),session:Nt,sessionId:Nt.id||P,autoCompleted:!1});return}throw Er(f.autoProcessingError,"Automatic payment failed. Please try again.",{checkoutMethod:f.autoProcessingError.checkoutMethod})}if(H?.fromCreateSession&&f.autoProcessingAttempted===!0)throw Er({type:"unknown",message:"Automatic payment failed. Please try again."},"Automatic payment failed. Please try again.");let vt=await xo({billingApiUrl:De,sessionId:P??ee.id,session:ee,nonce:qe});if(vt.type==="next_action_required"&&qe){let Ge=P??ee.id,Z=await Le(it=>Ao(vt,{billingApiUrl:De,sessionId:Ge,nonce:qe,session:ee,signal:it,telemetry:!0}));await at({result:Z,session:ee,sessionId:ee.id||Ge,autoCompleted:!1});return}if(vt.type!=="success")throw Er({type:"unknown",message:"Automatic payment failed. Please try again."},"Automatic payment failed. Please try again.");await at({result:vt.result,session:ee,sessionId:ee.id||P,autoCompleted:!1})}catch(vt){let Ge=ee.id||P,Z=Hr(la(vt),Ge);if(Z.code==="three_ds_aborted")return;if(Z.code==="checkout_processing_timeout"){if(!ue.current)return;ye(Z.message),st(()=>lt.current?.(Z));return}await Ae(Z,{emitDecline:!0,method:Z.checkoutMethod??sa}),Su(Z,Ge)&&Ge&&ue.current&&ve({sessionId:Ge,errorMessage:Z.message,nonce:qe||void 0,payPalOrderId:Z.orderId})}},[t,De,Le,Ae,at]),Vt=(0,Qe.useCallback)(async f=>{if(re.onClick?.(f),!(f.defaultPrevented||oe||ke)){if(ve(null),ye(null),e&&ft){let P=new nr.FloPayError("Provide either sessionId or create-session props, not both.","validation_error");await Ae(P),ue.current&&(me(null),Ve(null));return}if(!e&&!ft){let P=new nr.FloPayError("Provide a sessionId or the props required to create an automatic payment session.","validation_error");await Ae(P),ue.current&&(me(null),Ve(null));return}Oe(!0),Ve(null),R(!1),me("processing");try{let P=new ci.PaymentAPI(De);if(e){let H=await P.getUnifiedCheckoutSession(e,t);await jt(H,e);return}try{let H=await P.createAndFetchSession({...ft});await jt(H,H.data.session?.id??null,{fromCreateSession:!0})}catch(H){if(xa(H)==="session_auto_completed"){await at({result:{status:"succeeded"},session:null,sessionId:null,autoCompleted:!0});return}throw H}}catch(P){await Ae(Hr(Cu(P,"Automatic payment failed. Please try again."),e))}finally{ue.current&&(me(null),Ve(null),Oe(!1))}}},[re.onClick,ft,oe,ke,t,jt,De,e,Ae,at]),ut=(0,Qe.useCallback)(f=>{let P=Q.current;ve(null),ot.current?.({result:f,session:null,sessionId:P?.sessionId??null,autoCompleted:!1})},[]),Et=(0,Qe.useCallback)(f=>{lt.current?.(f)},[]),q=(0,Qe.useCallback)(f=>{Te.current?.(f)},[]),fe=(0,Qe.useMemo)(()=>(0,nr.resolveTheme)(G),[G]),et=(0,Qe.useMemo)(()=>{let f=fe?.buttonsLayout??(0,nr.resolveButtonsLayoutTheme)(Y);return U?{...f,...U,cardButton:{...f.cardButton,...U.cardButton}}:f},[fe,Y,U]),V=(0,Qe.useMemo)(()=>{let f=fe?.appearance;return T?f?{...f,...T,variables:{...f.variables,...T.variables}}:T:f},[T,fe]),xe=V?.variables,bt=xe?.colorPrimary??"#4A49FF",Ke=xe?.colorPrimaryHover??Fo(bt,.12),$=xe?.borderRadius??"8px";return(0,tr.jsxs)(tr.Fragment,{children:[(0,tr.jsx)("button",{...re,type:je,onClick:Vt,disabled:oe||ke,"aria-busy":ke,style:{width:"100%",...Fe===void 0?{boxSizing:"border-box",height:vu,padding:"0 1rem"}:{padding:"0.9rem 1rem"},...et.cardButton,...ss({themeBundle:fe,resolvedPrimaryColor:bt,resolvedBorderRadius:$,submitButtonStyle:et.submitButton,explicitPrimaryColor:xe?.colorPrimary}),fontSize:et.cardButtonFontSize??"0.95rem",fontWeight:600,cursor:oe||ke?"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||ke?.6:1,...yt},onMouseEnter:f=>{re.onMouseEnter?.(f),!f.defaultPrevented&&!oe&&!ke&&(fe||xe?.colorPrimary)&&(f.currentTarget.style.backgroundColor=Ke)},onMouseLeave:f=>{re.onMouseLeave?.(f),!f.defaultPrevented&&(fe||xe?.colorPrimary)&&(f.currentTarget.style.backgroundColor=bt)},onMouseDown:f=>{re.onMouseDown?.(f),f.defaultPrevented||(f.currentTarget.style.transform="scale(0.985)")},onMouseUp:f=>{re.onMouseUp?.(f),f.defaultPrevented||(f.currentTarget.style.transform="scale(1)")},children:(0,tr.jsx)(bo,{content:Fe})}),We&&(0,tr.jsx)("p",{role:"status","data-testid":"flopay-automatic-payment-pending-notice",style:{margin:"0.5rem 0 0",fontSize:"0.875rem",textAlign:"center"},children:We}),be&&(0,tr.jsx)(er,{status:be,errorMessage:Ie,authorized:rt}),N&&(0,tr.jsx)("div",{"data-testid":"flopay-automatic-payment-fallback",role:"dialog","aria-modal":"true",onClick:f=>{f.target===f.currentTarget&&ve(null)},style:{position:"fixed",inset:0,background:"rgba(0, 0, 0, 0.45)",display:"flex",alignItems:"center",justifyContent:"center",padding:"1.5rem",zIndex:1100},children:(0,tr.jsx)("div",{style:{width:"100%",maxWidth:520,maxHeight:"90vh",overflowY:"auto",background:"white",borderRadius:20,padding:"1.5rem",boxShadow:"0 24px 80px rgba(15, 23, 42, 0.28)",display:"flex",flexDirection:"column",gap:"1rem"},children:(0,tr.jsx)(li,{sessionId:N.sessionId,nonce:N.nonce,checkoutMode:"full",billingApiUrl:De,locale:O,theme:G,...V?{appearance:V}:{},buttonsTheme:Y,buttonsStyles:U,initialErrorMessage:N.errorMessage,initialPayPalOrderId:N.payPalOrderId,cardTitleContent:null,onComplete:ut,onError:Et,onDecline:q})})})]})}var di=require("@flopay/js/card-setup"),jn=require("@flopay/shared"),_t=require("react");var yc={light:{success:"#166534",error:"#991B1B"},dark:{success:"#4ADE80",error:"#FCA5A5"}};function fc(e){let t=e.appearance.variables??{},n=e.buttonsLayout.cardFormContainer??{},r=e.appearance.theme==="night",o=r?yc.dark:yc.light,a=t.colorText??(r?"#F1F5F9":"#262833"),l=e.appearance.rules?.[".Label"];return{panel:{...n.background===void 0?{}:{background:n.background},...n.backgroundColor===void 0?{}:{backgroundColor:n.backgroundColor},...n.border===void 0?{}:{border:n.border},...n.borderRadius===void 0?{}:{borderRadius:n.borderRadius},...n.boxShadow===void 0?{}:{boxShadow:n.boxShadow},color:a,...t.fontFamily?{fontFamily:t.fontFamily}:{}},spinnerTrackColor:e.buttonsLayout.cardInputBorder??(r?"#374151":"#e5e7eb"),spinnerAccentColor:t.colorPrimary??"#4A49FF",labelColors:{processing:a,success:o.success,error:o.error},noteColor:l?.color??a}}var xr=require("react/jsx-runtime"),ha=class extends jn.FloPayError{constructor(t,n,r){super(t,n,r),this.name="FloPayCardSetupError",this.retryable=r.retryable}};function gc(e,t={}){let n=e instanceof jn.FloPayError?e:void 0,r=n?.statusCode,o=t.retryable??(n?.type==="network_error"||n?.type==="rate_limit_error"||typeof r=="number"&&r>=500||n?.code==="vault_capture_timeout"||!n);return new ha(n?.message??(e instanceof Error?e.message:"Failed to load the secure card form."),n?.type??"api_error",{code:t.code??n?.code??"card_setup_load_failed",retryable:o,...n?.param?{param:n.param}:{},...r===void 0?{}:{statusCode:r}})}function hc({sessionId:e,nonce:t,billingApiUrl:n,telemetry:r,theme:o="modern-light",containerStyle:a,loading:l=null,onReady:d,onComplete:u,onDecline:p,onCancel:b,onValidation:v,onError:B}){let[I,w]=(0,_t.useState)(null),[h,O]=(0,_t.useState)(null),[G,T]=(0,_t.useState)(null),[Y,U]=(0,_t.useState)(null),[de,X]=(0,_t.useState)(null),he=(0,_t.useRef)(!1),Fe=(0,_t.useRef)(!1),oe=(0,_t.useMemo)(()=>typeof o=="object"?void 0:(0,jn.resolveTheme)(o),[o]),je=(0,_t.useMemo)(()=>typeof o=="object"?o:oe?Za({appearance:oe.appearance,buttonsStyles:oe.buttonsLayout,layout:"default"}):null,[oe,o]),yt=(0,_t.useMemo)(()=>El(oe?.buttonsLayout.cardFormContainer,a),[oe,a]),re=(0,_t.useMemo)(()=>oe?fc(oe):void 0,[oe]),De=(0,_t.useRef)(d),ft=(0,_t.useRef)(B),ke=(0,_t.useRef)(u),Oe=(0,_t.useRef)(p),be=(0,_t.useRef)(b),me=(0,_t.useRef)(v),Ie=(0,_t.useRef)(!1),Ve=(0,_t.useRef)(!1),rt=(0,_t.useRef)(0);return De.current=d,ft.current=B,ke.current=u,Oe.current=p,be.current=b,me.current=v,(0,_t.useEffect)(()=>{let R=rt.current+1;return rt.current=R,()=>{queueMicrotask(()=>{rt.current===R&&(Ie.current||Ve.current||(Ve.current=!0,st(()=>{be.current?.({status:"cancelled",sessionId:e})})))})}},[e]),(0,_t.useEffect)(()=>{let R=!0,We=new di.PaymentAPI((0,jn.resolveBillingApiUrl)(n),{telemetry:r});return w(null),O(null),T(null),Ie.current=!1,Ve.current=!1,(async()=>{try{if(!e.trim())throw new jn.FloPayError("FloPayCardSetup requires a sessionId.","validation_error",{code:"MissingCheckoutSessionId",param:"sessionId"});if(!t.trim())throw new jn.FloPayError("FloPayCardSetup requires a session nonce.","validation_error",{code:"MissingCheckoutSessionToken",param:"nonce"});let ye=await We.getUnifiedCheckoutSession(e,t);if(!R)return;let N=ye.data.session;if(!N||!(0,jn.isCardSetupCheckoutSession)(N))throw new jn.FloPayError("FloPayCardSetup only accepts a zero-amount, productless setup session.","validation_error",{code:"InvalidCardSetupSession",param:"sessionId"});let ve=N.vault;if(ve?.html?.trim()||(ve=await We.getVaultCapture(e,t)),!ve.html?.trim())throw new jn.FloPayError("FloPay: this setup session has no vault card capability. Upgrade the billing backend integration.","api_error",{code:"UnsupportedBackendVaultCapability"});if(!R)return;O(ve),w(new di.PciVaultCardCapture({sessionId:e,operation:"card_setup",telemetry:r}))}catch(ye){if(!R)return;let N=gc(ye);Ie.current=!0,T(N),st(()=>ft.current?.(N))}})(),()=>{R=!1,We.destroy()}},[n,t,e,r]),(0,_t.useEffect)(()=>{if(!I)return;let R=!1;Fe.current=!1,he.current=!1;let We=I.on("submitting",()=>{he.current=!0,X(null),U("processing")}),ye=I.on("complete",ue=>{Ie.current=!0,he.current=!1,U("success"),(async()=>(await new Promise(He=>setTimeout(He,600)),!Fe.current&&(Fe.current=!0,st(()=>{ke.current?.({status:"succeeded",sessionId:e,...ue.paymentMethod?{paymentMethod:ue.paymentMethod}:{}})}),R||U(null))))()}),N=I.on("decline",ue=>{Ie.current=!0,he.current=!1,X(ue.message??null),U("error"),st(()=>{Oe.current?.({status:"declined",sessionId:e,...ue.declineReason?{reason:ue.declineReason}:{},...ue.message?{message:ue.message}:{}})}),(async()=>(await new Promise(He=>setTimeout(He,400)),R||U(null)))()}),ve=I.on("challenge_dismissed",()=>{U(null)});return()=>{R=!0,We(),ye(),N(),ve()}},[I,e]),G?(0,xr.jsx)("div",{role:"alert",children:G.message}):!I||!h?.html?(0,xr.jsx)(xr.Fragment,{children:l}):(0,xr.jsxs)(xr.Fragment,{children:[Y&&(0,xr.jsx)(er,{status:Y,errorMessage:de,processingLabel:"SAVING CARD...",successLabel:"CARD SAVED",errorLabel:"CARD NOT SAVED",successNote:null,...re?{theme:re}:{}}),(0,xr.jsx)(Bo,{capture:I,html:h.html,messageToken:h.messageToken,expectedOrigin:h.expectedOrigin,theme:je,containerStyle:yt,onReady:()=>{st(()=>De.current?.())},onValidation:R=>{st(()=>me.current?.(R))},onError:R=>{if(!R)return;he.current&&(he.current=!1,X(R),U("error"),setTimeout(()=>U(null),400));let We=gc(new Error(R),{code:"card_setup_widget_failed",retryable:!0});st(()=>ft.current?.(We))}})]})}0&&(module.exports={DirectPayPalButton,FloPayAutomaticPaymentButton,FloPayCardSetup,FloPayCardSetupError,FloPayCheckout,FloPayProvider,SplitCardForm,VaultCardFields,dropThirdPartyOnlyError,useCheckout,useFloPay,usePayPalFloPay});
|