1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[663],{70663:(e,t,s)=>{s.d(t,{f:()=>b});var r,n=s(47388),a=s(88365),o=s(33392),i=s(52949),l=s(51101),c=s(61872),p=s(57109),u=s(23141),d=s(87937);class m{processFunction;next;failure;constructor(e,t,s){this.processFunction=e,this.next=t,this.failure=s}async process(e){try{await this.processFunction(e)}catch(e){throw console.error(`Error processing ${this.currentState} state:`,e),e}}}var h=((r={}).INIT="INIT",r.SESSION_INITIALIZED="SESSION_INITIALIZED",r.NON_3DS_COMPLETED="NON_3DS_COMPLETED",r.IFRAME_3DS_SHOWN="IFRAME_3DS_SHOWN",r.COMPLETED="COMPLETED",r.FAILED="FAILED",r.CANCELLED="CANCELLED",r);class f extends m{currentState=h.CANCELLED}class y{initialStateNode;currentStep;_is3DsSupported=!1;_sessionIframeToken="";_paymentRequest=null;_paymentRequestCallback=null;_paymentResponse=null;_errorResponse=null;_paymentData=null;_browserInfoCollectionPromise=null;_transactionCompletePromise=null;constructor(e){this.initialStateNode=e,this.currentStep=e}set is3DsSupported(e){this._is3DsSupported=e}set sessionIframeToken(e){this._sessionIframeToken=e}get sessionIframeToken(){return this._sessionIframeToken}set paymentRequest(e){this._paymentRequest=e}get paymentRequest(){return this._paymentRequest}set paymentRequestCallback(e){this._paymentRequestCallback=e}get paymentRequestCallback(){return this._paymentRequestCallback}set paymentResponse(e){this._paymentResponse=e}get paymentResponse(){return this._paymentResponse}set errorResponse(e){this._errorResponse=e}get errorResponse(){return this._errorResponse}set paymentData(e){this._paymentData=e}get paymentData(){return this._paymentData}set browserInfoCollectionPromise(e){this._browserInfoCollectionPromise=e}get browserInfoCollectionPromise(){return this._browserInfoCollectionPromise}set transactionCompletePromise(e){this._transactionCompletePromise=e}get transactionCompletePromise(){return this._transactionCompletePromise}runStep(){return this.currentStep.process(this).then(()=>this.processNext()).catch(()=>this.processFailure())}reset(){this.currentStep=this.initialStateNode,this._is3DsSupported=!1,this._paymentRequestCallback=null,this._errorResponse=null}cancel(){this.currentStep=new f(()=>Promise.resolve())}processNext(){return this.currentStep.next?(this.currentStep=this.currentStep.next(this._is3DsSupported),this.currentStep.process(this).then(()=>this.processNext())):Promise.resolve()}processFailure(){return this.currentStep.failure?(this.currentStep=this.currentStep.failure(),this.currentStep.process(this)):Promise.resolve()}}class S extends m{currentState=h.COMPLETED}class w extends m{currentState=h.FAILED}class T extends m{currentState=h.IFRAME_3DS_SHOWN}class C extends m{currentState=h.INIT}class R extends m{currentState=h.NON_3DS_COMPLETED}class E extends m{currentState=h.SESSION_INITIALIZED}let _={position:"fixed",top:0,left:0,right:0,bottom:0,zIndex:8888,backgroundColor:"rgba(31, 29, 29, 0.60)",overflow:"hidden"},I={display:"none"},b=(0,c.forwardRef)((e,t)=>{let s=(0,a.A)(),r=(0,o.A)(s.breakpoints.down("md")),{features:m}=(0,p.usePageContext)(),h=m?.["feature.isPsiEnabled"],{sessionIframe:f,threeDSIframe:b,errorResponse:k,startFlow:D}=(e=>{let[t,s]=(0,c.useState)(!1),[r,n]=(0,c.useState)(""),[a,o]=(0,c.useState)(""),[i,l]=(0,c.useState)(!1),[m,h]=(0,c.useState)(""),[f,_]=(0,c.useState)(""),[I,b]=(0,c.useState)(!1),{createSession:k}=(()=>{let e=(0,d.Fu)(),{brand:t,country:s,locale:r,language:n}=(0,p.usePageContext)(),a=(0,c.useCallback)((e,a)=>{let[o,i]=r?r.split("_"):[s,n];return{merchant:{brand:"avis"===t?u.BrandEnum.AVIS:u.BrandEnum.BUDGET,channel:"ECOM",countryCode:i?.toUpperCase(),languageCode:o?.toUpperCase()},cardData:{cardNumber:e,expiryDate:a},orderDetails:{orderType:"RESERVATION",orderTransactionType:"CREATE"}}},[t,s,n,r]);return{createSession:(0,c.useCallback)(async(t,s)=>e.reservation("/psi",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a(t,s))}),[e,a])}})(),D=(0,c.useCallback)(()=>new Promise(e=>{let t=t=>{if(t.data)if("string"==typeof t.data)try{let s=JSON.parse(t.data);
1s&&"object"==typeof s&&"MessageType"in s&&"profile.completed"===s.MessageType&&(r(),e())}catch{}else"profile.completed"===t.data.type&&(r(),e())},s=()=>{r(),e()},r=()=>{window.removeEventListener("message",t),window.removeEventListener("beforeunload",s)};window.addEventListener("message",t),window.addEventListener("beforeunload",s)}),[]),g=(0,c.useCallback)(()=>new Promise((e,t)=>{let s=t=>{t.data&&("TRANSACTION_COMPLETE"===t.data.type||"TRANSACTION_FAILED"===t.data.type)&&(n(),e())},r=()=>{n(),t(Error("User navigated away before transaction completed"))},n=()=>{window.removeEventListener("message",s),window.removeEventListener("beforeunload",r)};window.addEventListener("message",s),window.addEventListener("beforeunload",r)}),[]),P=(0,c.useCallback)(()=>({colorDepth:window.screen.colorDepth.toString(),javaEnabled:"true",screenHeight:window.screen.height.toString(),screenWidth:window.screen.width.toString(),timeZoneOffset:new Date().getTimezoneOffset().toString()}),[]),N=((e,t,s,r,n,a)=>{let[o,i]=(0,c.useState)(null),l=(0,c.useCallback)(()=>{let o=new w(a),i=new S(n),l=new R(r),c=new T(s,()=>i,()=>o),p=new E(t,e=>e?c:l,()=>o);return new C(e,()=>p,()=>o)},[n,a,s,e,r,t]);return(0,c.useEffect)(()=>{i(new y(l()))},[l]),o})((0,c.useCallback)(async e=>{try{if(!e?.paymentData)throw e.errorResponse=Error("Payment data is missing"),b(!0),e.errorResponse;let t=await k(e.paymentData.cardNumber,e.paymentData.expiryDate);s(!0),n(t.assetUrl),o(t.sessionToken),e.sessionIframeToken=t.sessionToken,await e.browserInfoCollectionPromise}catch(t){throw e&&(e.errorResponse=t,b(!0)),t}},[k]),(0,c.useCallback)(async t=>{if(!t?.paymentRequestCallback||!t?.paymentRequest)throw t&&(t.errorResponse=Error("Reservation request parameters are missing"),b(!0)),t.errorResponse;try{let s=e?.skipThreeDSecurity?u.PsiActionTypes.SKIP_AUTHENTICATION:u.PsiActionTypes.CUSTOMER_AUTHENTICATION,r=await t.paymentRequestCallback({...t.paymentRequest,device:P(),securityProfiling:{...t.paymentRequest?.securityProfiling,psiActionType:s,returnUrl:`${globalThis?.window?.location.origin}/web/reservation/psi/transaction-id`}});if(r.confirmationNumber)t.is3DsSupported=!1,t.paymentResponse=r,b(!0);else if(r.psiAccessToken&&r.psiRedirectUrl)t.is3DsSupported=!0,h(r.psiRedirectUrl),_(r.psiAccessToken),l(!0);else if(""===r.psiAccessToken&&""===r.psiRedirectUrl&&"object"==typeof r.status&&Array.isArray(r.status?.success)&&r.status.success.length>0)throw t.is3DsSupported=!1,r.status.success[0];else t.is3DsSupported=!1,t.paymentResponse=r}catch(e){throw t.errorResponse=e,b(!0),e}},[P]),(0,c.useCallback)(async e=>{try{await e.transactionCompletePromise}catch(t){throw e.errorResponse=t,b(!0),t}if(!e?.paymentRequestCallback||!e?.paymentRequest)throw e&&(e.errorResponse=Error("Reservation request parameters are missing"),b(!0)),e.errorResponse;let t=await e.paymentRequestCallback({...e.paymentRequest,device:P(),securityProfiling:{...e.paymentRequest?.securityProfiling,psiActionType:u.PsiActionTypes.VALIDATE_CUSTOMER_AUTHENTICATION,psiAuthenticationTransactionId:e.sessionIframeToken}});e.paymentResponse=t},[P]),(0,c.useCallback)(()=>(l(!1),s(!1),b(!0),Promise.resolve()),[]),(0,c.useCallback)(()=>(l(!1),s(!1),b(!0),Promise.resolve()),[]),(0,c.useCallback)(e=>(l(!1),s(!1),b(!0),Promise.reject(e.errorResponse)),[]));return{isCompleted:I,startFlow:(0,c.useCallback)(async(e,t,s)=>N?(N.reset(),N.browserInfoCollectionPromise=D(),N.transactionCompletePromise=g(),N.paymentRequestCallback=s,N.paymentData=e,N.paymentRequest=t,await N.runStep(),N.paymentResponse):null,[N,D,g]),cancelFlow:(0,c.useCallback)(()=>{N&&(N.cancel(),b(!0),l(!1),s(!1))},[N]),errorResponse:N?.errorResponse,sessionIframe:{load:t,src:r,sessionToken:a},threeDSIframe:{load:i,src:m,sessionToken:f}}})({skipThreeDSecurity:!!m?.["feature.skipThreeDSecureAuthentication"]}),g=(0,c.useRef)(null),P=(0,c.useRef)(null),N=(0,c.useRef)(null);return((0,c.useImperativeHandle)(t,()=>({startFlow:D,getErrorResponse:()=>k}),[D,k]),(0,c.useEffect)(()=>{f.src&&f.sessionToken&&g.current?.submit()},[f.src,f.sessionToken]),(0,c.useEffect)(()=>{b.src&&b.sessionToken&&P.current?.submit()},[b.src,b.sessionToken]),h)?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.default,{sx:I,"data-test-id":"session-frame-container",children:(0,n.jsx)("iframe",{id:"session-iframe",title:"session-iframe",name:"session-iframe"})}),(0,n.jsx)(i.default,{sx:{display:"none"},"data-test-id":"psi-payment-hidden-form-container",children:(0,n.jsx)("form",{ref:g,id:"data_collection_form",method:"POST",target:"session-iframe",action:f.src||"",children:(0,n.jsx)("input",{id:"collection_form_input",name:"JWT",type:"hidden",value:f.sessionToken||""})})}),(0,n.jsxs)(l.default,{justifyContent:"center",alignItems:"center","data-test-id":"3ds-frame-container",dis
1play:b.load?"flex":"none",sx:_,children:[(0,n.jsx)("iframe",{ref:N,id:"3ds-iframe",title:"3ds-iframe",name:"3ds-iframe",width:r?window.innerWidth:400,height:r?window.innerHeight:600,style:{backgroundColor:"white"}}),(0,n.jsx)(i.default,{sx:{display:"none"},"data-test-id":"psi-payment-hidden-3ds-form-container",children:(0,n.jsx)("form",{ref:P,id:"3ds-iframe",method:"POST",target:"3ds-iframe",action:b.src||"",children:(0,n.jsx)("input",{id:"3ds_form_input",name:"JWT",type:"hidden",value:b.sessionToken||""})})})]})]}):null});b.displayName="PsiPayment"}}]); 2//# sourceMappingURL=663.479682b83ea98c08.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.