{"version":3,"sources":["Jet2.Flights.Web/src/Feature/Checkout/Models/Address.ts","Jet2.Flights.Web/src/core/ts/jet2cookies.ts","Jet2.Flights.Web/src/Foundation/Core/Utilities.ts","Jet2.Flights.Web/src/Foundation/Core/HybridBridge.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/SitecoreData.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/ApiResponse.ts","Jet2.Flights.Web/src/Feature/Checkout/Services/AjaxClient.ts","Jet2.Flights.Web/src/Feature/Checkout/Services/ServerLoggingLogger.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/BookingPathNavigatorResponse.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/BookingRequest.ts","Jet2.Flights.Web/src/Feature/Checkout/Services/CheckoutService.ts","Jet2.Flights.Web/src/Feature/Checkout/Services/NameChangeService.ts","Jet2.Flights.Web/src/Feature/Checkout/Services/ChangeDateService.ts","Jet2.Flights.Web/src/Feature/Checkout/Object/CardDetails.ts","Jet2.Flights.Web/src/Feature/Checkout/Services/AutoCardDetect.ts","Jet2.Flights.Web/src/Feature/Checkout/ViewModels/PaymentDetails.ts","Jet2.Flights.Web/src/Feature/Checkout/Controllers/Jet2.CheckoutNavigator.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/ApplicationMessage.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/BookingContact.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/BookingDataPolicyPassengerResult.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/BookingDeviceInfo.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/BookingModel.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/CustomerPreference.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/DdcEvent.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/DdcResponse.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/LogRequest.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/LogResult.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/MakePayment.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/MyJet2Account.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/PaymentDetails.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/PhoneNumber.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/PreAuthError.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/PreAuthInitError.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/PreAuthInitRequest.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/PreAuthInitResponse.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/PreAuthPaymentDetails.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/PreAuthResponse.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/ValidationError.ts","Jet2.Flights.Web/src/Feature/Checkout/Models/ValidationResult.ts"],"names":["Address","Jet2Cookies","getCookie","cookieName","name","cookies","document","cookie","split","i","length","charAt","substring","indexOf","setCookie","value","d","Date","expires","setTime","getTime","toUTCString","setSessionCookie","expireDurationMinutes","deleteCookie","Utilities","prototype","isAndroidWebView","isAndroid","window","Jet2WebInterface","isIosWebView","isIos","webkit","messageHandlers","jet2handler","isInCheckInFlow","location","pathname","windowLocationHrefShim","url","a","createElement","href","style","display","body","appendChild","click","exports","HybridBridge","sendMessage","command","payload","console","log","this","getBoardingPasses","showSearchPanel","crossSellSearchEnabled","postMessage","data","raisePostMessageEvent","JSON","stringify","raiseHybridEvent","eventName","trackingData","raiseTrackingEvent","trackEvent","eventData","message","trackEventWithGoogleAnalyticsData","bridge","trackEventWithGoogleAnalyticsDataFunc","isMobileApp","ga","gaPageName","getAll","find","get","dataLayer","trackedGoogleAnalytics","readyState","addEventListener","event","channelName","dataAttributeValue","attributeName","getElementsByTagName","getAttribute","Utilities_1","default","success","response","error","AjaxClient","Logger","events","Events","eventKeys","EventKeys","callSitecoreApi","post","correlationId","basketSpecific","callApi","_a","sent","responseJSON","ApiResponse_1","e_1","settings","dataType","type","headers","X-Correlation-Id","j2ContextId","$","ajax","result","raise","ajaxDataReceived","typedError","e_2","ajaxError","ServerLoggingLogger","ajaxClient","tempEl","textContent","encodedMessage","innerHTML","CheckoutService","challengeModal","appSettings","AppSettings","routes","Routes","modalManager","ModalManager","serverLogger","InitialBooking","debug","InitialBookingValidation","SaveContactDetailsToMyjet2","UpdateBookingMmb","PreAuthInit","totalAmount","paymentType","currency","cardNumber","subSalesChannel","expiryMonth","expiryYear","buildPreAuthInitRequest","info","concat","paymentPreAuthInitUrl","reference","PreAuth","paymentDetails","convertPaymentDetails","paymentPreAuthUrl","Challenge","jquery_1","empty","append","challengeHtml","displayModal","key","FareChangeCheck","PreAuthPostChallenge","signedPares","currencyCode","paymentAmount","consumerAuthenticationValues","paymentPostChallengePreAuthUrl","CompleteBooking","completeBooking","updateSelectedPaymentType","checkout","paymentOption","id","cardTypeId","updatePaymentToPaypal","updatePaymentForPaypal","GetPaymentTypes","dataSourceId","updatePaymentTypes","datasourceId","GetPayPalRestrictionStatus","getPayPalRestrictionStatus","submitDdcForm","preAuthoriseInitialiseHtml","convertCardType","cardType","Visa Credit","MasterCard Credit","American Express","Switch Maestro","Visa Debit","Electron","Debit MasterCard","payment","PreAuthPaymentDetails","salesChannel","callingSystem","system","systemIdentifier","card","securityCode","cvv","issueNumber","holderName","cardHolder","replace","number","expiryDate","month","year","ddcReferenceId","returnUrl","amount","pan","NameChangeService","completeEndpoint","preCompleteEndpoint","AjaxClient_1","preComplete","complete","ChangeDateService","AjaxClient_2","CardDetails","formattedCardNumber","CardNumber","convertFormattedCardNumber","isNullOrWhiteSpace","s","test","AutoCardDetect","subscribeToEvents","$paymentDetails","jquery_2","$visaIcon","$masterCardIcon","$maestroIcon","$americanExpressIcon","currentCardType","undefined","hideIcons","_this","subscribe","cardPaymentAutoCardDetect","cardDetails","detectCardType","call","cardInfo","credit_card_type_1","changeImage","toLowerCase","show","cardPaymentAutoCardDetectValid","cardPaymentAutoCardDetectNotValid","hide","PaymentDetails","$autoCardDetectEnabledField","paypal","active","emptyPaymentType","lengths","prefixes","checkoutService","autoCardDetect","jquery_3","formValidator","FormValidator","$nothingToPay","$toPay","$paymentType","$cardFields","$cardPaymentTypeField","$cardNumberPlaceholder","$cvvPlaceholder","$cvvTooltipButton","$paymentTypeRow","$cardHolder","$cardNumber","$expiryMonth","$expiryYear","$cvvInput","$paypalRadioContainer","$cardRadioContainer","errorMessages","togglePayPal","$accordionEnabled","$autoCardDetectEnabled","toBoolean","val","toString","$paymentModalEnabled","paymentModalEnabled","paymentModalKey","paymentButtonLabel","modalDesignType","bookingPathValidate","handleBookingPathValidate","bookingPathRequestData","handleBookingPathRequestData","bookingPriceChanged","onBookingPriceChanged","currencyChanged","currentPaymentOption","basketToPayUpdate","onBasketToPayUpdate","on","e","onPaymentTypeChanged","onCvvTooltipClicked","onPaymentDetailsClick","paymentOptionSelected","stopPropagation","bindAutoCardDetectEvent","paymentTypes","loadPaymentTypes","togglePayPalLogo","findPaymentTypeByCardId","text","placeholder","init","$cvv","selectPaymentTypeById","valid","currentTarget","removeCardType","showCardPaymentTypeSelection","hideCardPaymentTypeSelection","validateCardType","currentPaymentType","velocity","selectPaymentType","selectedPaymentType","isCardPayment","is","cardNumberUnformatted","bin","getCardBin","buildModel","currentActive","getElementsByClassName","innerRadio","classList","remove","add","querySelector","prop","toggleCardDetailFields","validationErrors","getValidationErrors","booking","paymentMethod","payerId","token","nameOnCard","$option","target","findPaymentType","pt","tooltipData","$element","$container","tooltipId","tooltipElementSelected","paymentTypeSelected","spinnerKey","spinner","sticky","firstTime","inputMask","mask","reverse","isInputMaskReversible","unmask","storeSelectedPaymentType","map","idx","option","toArray","paymentTypeChanging","paymentTypeChanged","paymentTypeId","selectedType","trim","addClass","removeClass","html","Data","Html","initSelect","skipValidation","initPaymentTypeValidation","any","x","nothingToPay","CheckoutNavigator","container","acceptsNewFares","isDuplicateBookingAccepted","defaults","loadingSpinnerKey","changeDateService","nameChangeService","NameChangeService_1","Utilities_2","ddcEventUrl","hasTimedOut","gtmHandler","GtmHandler","jquery_4","continueBtn","css","parent","sendHybridAppBoardingPasses","hybridIdentifier","defaultButtonLabel","extend","processBooking","redirectToPage","bookingPathStepId","isSearchResults","isMmb","bookingProcess","applicationMessageButtonClicked","onApplicationMessageButtonClicked","onPaymentOptionSelected","deviceDataCollectionSuccess","onDeviceDataCollectionSuccess","logData","origin","parse","Status","SessionId","bookingData","sessionId","handleError","challengeComplete","transactionId","validationResult","preventDefault","checkValidation","validationErrorMessageDisplayed","GetInitialBookingValidationResult","spinnerShow","callback","__awaiter","submitBooking","getBookingRequest","setNavigateButtonLoading","openPaymentModal","hasPriceChanged","CreditNoteReApply","duplicateBookingFound","isBlocked","redirectUrl","isLoading","continueBtnLabel","spnLoader","getElementById","arwIcon","contains","pushEvent","action","label","additionalData","shouldNotCloseModal","okayCallback","Promise","resolve","reject","then","catch","closeCallback","methodName","_b","hybridBoardingPassDetails","HybridBridge_1","isCashPayment","parameters","amc","push","join","processPayment","saveContactDetailsToMyjet2","param","sessionToken","makePayment","errorMessage","errData","errorData","threeDSecureTwoEnabled","successData","threeDS2ProviderId","providerId","cardinalCommerceUrl","Psd2DdcTimeout","ddcTimeoutId","setTimeout","timeoutDdc","ddcResponse","clearTimeout","ddcSessionId","paymentDetail","challengeCompleteUrl","callData","ddcReference","preAuthResponse","errorType","Psd2ChallengeModalTimeout","challengeTimeoutId","timeoutChallengeModal","spinnerHide","payPalUrl","disposeChallengeModal","bookingResult","messageCode","Event","ValidationResult","clearValidationMessages","paymentModalIsOpen","applicationMessages","slice","sort","err1","err2","priority","messageType","messageGroup","group","messageTitle","inputName","showApplicationMessage","messages","dimension65","isInCheckinFlow","isAndroidBooking","bookingDeviceInfo","userAgent","navigator","height","screen","width","isIosBooking","address","bookingContact","customerPreference","emailAddress","isTermsAccepted","myJet2Account","phoneNumbers","reasonForTravel","inCheckInFlow","showErrorMessage","Messages","MessageTitle","Message","MessageType","scrollTop","hideModal","dimension64","ApplicationMessage","BookingContact","BookingDataPolicyPassengerResult","BookingDeviceInfo","BookingModel","CustomerPreference","DdcEvent","DdcResponse","LogRequest","LogResult","MakePayment","MyJet2Account","PhoneNumber","PreAuthError","PreAuthInitError","PreAuthInitRequest","PreAuthInitResponse","PreAuthResponse","ValidationError","pageIsValid","highestFieldPriority","lowestFieldPriority","calculateGroupPriority","groupNumber","calculateFieldPriority","fieldPriority"],"mappings":"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","file":"output.js","sourcesContent":["class Address {\r\n public houseName: string;\r\n public countryId: number;\r\n public postcode: string;\r\n public street: string;\r\n public town: string;\r\n public udprn: number;\r\n}","class Jet2Cookies {\r\n static getCookie(cookieName: string) {\r\n var name: any = cookieName + \"=\";\r\n var cookies = document.cookie.split(\";\");\r\n for (var i = 0; i < cookies.length; i++) {\r\n var cookie = cookies[i];\r\n while (cookie.charAt(0) == \" \")\r\n cookie = cookie.substring(1);\r\n if (cookie.indexOf(name) == 0) {\r\n return cookie.substring(name.length, cookie.length);\r\n }\r\n }\r\n return \"\";\r\n }\r\n\r\n static setCookie(cookieName: any, value: any) {\r\n var d = new Date();\r\n d.setTime(d.getTime() + (365 * 24 * 60 * 60 * 1000));\r\n var expires = \"expires=\" + d.toUTCString();\r\n var path = \"Path=/\";\r\n document.cookie = cookieName + \"=\" + value + \"; \" + expires + \"; \" + path;\r\n }\r\n \r\n static setSessionCookie(cookieName: any, value: any, expireDurationMinutes?:number|undefined) {\r\n const path = \"Path=/\";\r\n if(!!expireDurationMinutes){\r\n const d = new Date();\r\n d.setTime(d.getTime() + (expireDurationMinutes * 60 * 1000));\r\n document.cookie = cookieName + \"=\" + value + \";expires=\"+ d.toUTCString() +\";\" + path\r\n }\r\n else {\r\n document.cookie = cookieName + \"=\" + value + \"; \" + path;\r\n }\r\n }\r\n \r\n static deleteCookie(cookieName: any) {\r\n var d = new Date();\r\n d.setTime(d.getTime() + (-1 * 24 * 60 * 60 * 1000));\r\n var expires = \"expires=\" + d.toUTCString();\r\n document.cookie = cookieName + \"=; Path=/;\" + expires + \";\";\r\n }\r\n}\r\nexport = Jet2Cookies;\r\n","class Utilities {\r\n public isAndroidWebView(): boolean {\r\n let isAndroid = false;\r\n\r\n if ((window as any).Jet2WebInterface) {\r\n isAndroid = true;\r\n }\r\n\r\n return isAndroid;\r\n }\r\n\r\n public isIosWebView(): boolean {\r\n let isIos = false;\r\n\r\n if ((window as any).webkit && (window as any).webkit.messageHandlers && (window as any).webkit.messageHandlers.jet2handler) {\r\n isIos = true;\r\n }\r\n\r\n return isIos;\r\n }\r\n\r\n public isInCheckInFlow(): boolean {\r\n let pathArray = window.location.pathname.split(\"/\");\r\n return pathArray.indexOf(\"check-in\") > -1;\r\n }\r\n\r\n public windowLocationHrefShim(url: string): void {\r\n //HACK: <=IE8 does not pass the referrer through when setting \"window.location.href\".\r\n // This seems to be a well prescribed workaround. \r\n var a = document.createElement(\"a\");\r\n a.href = url;\r\n a.style.display = \"none\";\r\n document.body.appendChild(a);\r\n a.click();\r\n }\r\n}\r\nexport { Utilities }","declare global {\r\n interface Window {\r\n Jet2WebInterface: any;\r\n webkit: any;\r\n dataLayer: any;\r\n }\r\n\r\n}\r\n\r\nimport { Utilities } from './Utilities';\r\ndeclare var ga: any;\r\nclass HybridBridge {\r\n private readonly Utilities: Utilities;\r\n trackedGoogleAnalytics: boolean;\r\n\r\n constructor() {\r\n this.Utilities = new Utilities();\r\n }\r\n\r\n public sendMessage(command: string, payload: any): void {\r\n console.log(\"bridge.js: sendMessage(command=\", command, \"payload=\", payload, \")\");\r\n if (this.Utilities.isAndroidWebView()) {\r\n if (command === \"getBoardingPasses\") {\r\n window.Jet2WebInterface.getBoardingPasses(payload);\r\n }\r\n else if (command === \"showSearchPanel\") {\r\n window.Jet2WebInterface.showSearchPanel();\r\n }\r\n else if (command === \"crossSellSearchEnabled\") {\r\n window.Jet2WebInterface.crossSellSearchEnabled(payload);\r\n }\r\n else {\r\n window.Jet2WebInterface.postMessage(command, payload);\r\n }\r\n }\r\n\r\n if (this.Utilities.isIosWebView()) {\r\n var message = {\r\n command: command,\r\n data: payload\r\n };\r\n window.webkit.messageHandlers.jet2handler.postMessage(message);\r\n }\r\n }\r\n\r\n raisePostMessageEvent(command: string, data: any) {\r\n console.log(\"bridge.js: raisePostMessageEvent(command=\", command, \", data=\", data, \")\");\r\n if (window.Jet2WebInterface) {\r\n // Call Android interface\r\n data = data ? JSON.stringify(data) : null;\r\n window.Jet2WebInterface.postMessage(command, data);\r\n } else if (this.isIos()) {\r\n // Call iOS interface \r\n const message = {\r\n command: command,\r\n data: data\r\n };\r\n this.postMessage(message);\r\n }\r\n }\r\n\r\n public raiseHybridEvent(eventName: string, trackingData: any): void {\r\n if (eventName) {\r\n if (this.Utilities.isAndroidWebView()) {\r\n window.Jet2WebInterface.raiseHybridEvent(eventName);\r\n } else if (this.Utilities.isIosWebView()) {\r\n var message = {\r\n command: \"hybridEvent\",\r\n data: eventName\r\n };\r\n window.webkit.messageHandlers.jet2handler.postMessage(message);\r\n }\r\n }\r\n\r\n if (trackingData) {\r\n this.raiseTrackingEvent(trackingData);\r\n }\r\n }\r\n\r\n public raiseTrackingEvent(trackingData: any) {\r\n if (this.Utilities.isAndroidWebView() && window.Jet2WebInterface.trackEvent) {\r\n window.Jet2WebInterface.trackEvent(trackingData.eventName, JSON.stringify(trackingData.eventData));\r\n } else if (this.Utilities.isIosWebView()) {\r\n const message = {\r\n command: trackingData.eventName,\r\n trackingData: trackingData.eventData\r\n };\r\n window.webkit.messageHandlers.jet2handler.postMessage(message);\r\n }\r\n }\r\n\r\n public isIos() {\r\n return window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.jet2handler;\r\n }\r\n\r\n public postMessage(message: any) {\r\n window.webkit.messageHandlers.jet2handler.postMessage(message);\r\n }\r\n\r\n public trackEventWithGoogleAnalyticsData(eventName: any, eventData: any) {\r\n if (!this.isMobileApp()) {\r\n return false;\r\n }\r\n let bridge = this;\r\n const trackEventWithGoogleAnalyticsDataFunc = function (eventName: any, eventData: any) {\r\n if (eventData) {\r\n if (typeof ga !== \"undefined\" && ga) {\r\n ga(function () {\r\n if (ga.getAll().find(() => true)) {\r\n eventData[\"gaClientId\"] = ga.getAll().find(() => true).get(\"clientId\");\r\n let gaPageName = ga.getAll().find(() => true).get(\"page\");\r\n if (gaPageName == '' && window.dataLayer && window.dataLayer[0]) { gaPageName = window.dataLayer[0][\"pageName\"]; }\r\n eventData[\"gaPageName\"] = gaPageName;\r\n if (window && window.location) {\r\n eventData[\"url\"] = window.location.href;\r\n }\r\n bridge.trackEvent(eventName, JSON.stringify(eventData));\r\n }\r\n });\r\n }\r\n else {\r\n console.log(\"GA Not defined, firing event without GA Data\");\r\n bridge.trackEvent(eventName, JSON.stringify(eventData));\r\n }\r\n }\r\n }\r\n if (!this.trackedGoogleAnalytics) {\r\n this.trackedGoogleAnalytics = true;\r\n if (document.readyState !== \"complete\") {\r\n window.addEventListener('load', (event) => {\r\n trackEventWithGoogleAnalyticsDataFunc(eventName, eventData);\r\n });\r\n }\r\n else {\r\n trackEventWithGoogleAnalyticsDataFunc(eventName, eventData);\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n public trackEvent(eventName: any, eventData: any) {\r\n console.log(\"bridge.js: trackEvent(eventName=\", eventName, \"eventData=\", eventData, \")\");\r\n if (eventData) {\r\n if (window.Jet2WebInterface) {\r\n // Call Android interface\r\n window.Jet2WebInterface.trackEvent(eventName, eventData);\r\n }\r\n else if (this.isIos()) {\r\n // Call iOS interface\r\n const message =\r\n {\r\n command: eventName,\r\n eventData: eventData\r\n };\r\n this.postMessage(message);\r\n }\r\n }\r\n }\r\n isMobileApp() {\r\n let channelName = this.dataAttributeValue('data-channel-name');\r\n if (channelName == \"jet2flights_app\" || channelName == \"jet2flights_app_preview\")\r\n return true;\r\n else\r\n return false;\r\n }\r\n\r\n dataAttributeValue(attributeName: any) {\r\n return document.getElementsByTagName(\"body\")[0].getAttribute(attributeName);\r\n }\r\n\r\n}\r\nexport default new HybridBridge();","class SitecoreData {\r\n public data: T;\r\n public gtm: any;\r\n public messages: any;\r\n}\r\n\r\nexport default SitecoreData;","class ApiResponse {\r\n public response: T;\r\n public success: boolean;\r\n public error: JQueryXHR;\r\n\r\n constructor(success: boolean, response?: T, error?: JQueryXHR) {\r\n this.success = success;\r\n this.response = response;\r\n this.error = error;\r\n }\r\n}\r\n\r\nexport default ApiResponse;","/// \r\n/// \r\n/// \r\n\r\ndeclare let Logger: any;\r\ndeclare let Events: any;\r\ndeclare let EventKeys: any;\r\ndeclare let j2ContextId: any;\r\n\r\nimport * as $ from \"jquery\";\r\nimport SitecoreData from \"../Models/SitecoreData\";\r\nimport ApiResponse from \"../Models/ApiResponse\";\r\n\r\nclass AjaxClient {\r\n private readonly log: any;\r\n private readonly events: any;\r\n private readonly eventKeys: any;\r\n\r\n constructor() {\r\n this.log = new Logger(\"AjaxClient\");\r\n this.events = Events;\r\n this.eventKeys = EventKeys;\r\n }\r\n\r\n public async callSitecoreApi(url: string, data: any, post: boolean, correlationId?: string, basketSpecific?: boolean): Promise>> {\r\n try {\r\n return await this.callApi>(url, data, post, correlationId, basketSpecific);\r\n } catch (e) {\r\n if (e.responseJSON) {\r\n return new ApiResponse>(false, e.responseJSON, e);\r\n }\r\n\r\n return new ApiResponse>(false, null, e);\r\n }\r\n }\r\n\r\n public async callApi(url: string, data: any, post: boolean, correlationId?: string, basketSpecific?: boolean): Promise> {\r\n try {\r\n let requestType;\r\n if (post) {\r\n requestType = \"POST\";\r\n } else {\r\n requestType = \"GET\";\r\n }\r\n\r\n let settings: JQueryAjaxSettings = {\r\n dataType: \"json\",\r\n url: url,\r\n type: requestType,\r\n data: data\r\n };\r\n\r\n if (correlationId !== null && correlationId !== \"\") {\r\n settings.headers =\r\n {\r\n \"X-Correlation-Id\": correlationId\r\n };\r\n }\r\n\r\n if (basketSpecific) {\r\n settings.url = url + \"?scid=\" + j2ContextId;\r\n }\r\n\r\n let result = await $.ajax(settings);\r\n\r\n this.events.raise(this.eventKeys.ajaxDataReceived, result);\r\n\r\n return new ApiResponse(true, result);\r\n } catch (e) {\r\n let typedError = e;\r\n this.log.error(typedError);\r\n this.events.raise(this.eventKeys.ajaxError, typedError);\r\n\r\n if (e.responseJSON) {\r\n return new ApiResponse(false, typedError.responseJSON, typedError);\r\n }\r\n\r\n return new ApiResponse(false, null, typedError);\r\n }\r\n }\r\n}\r\n\r\nexport = AjaxClient","import AjaxClient = require(\"./AjaxClient\");\r\n\r\nclass ServerLoggingLogger {\r\n private readonly ajaxClient: AjaxClient;\r\n\r\n constructor() {\r\n this.ajaxClient = new AjaxClient();\r\n }\r\n\r\n public async log(message: string): Promise {\r\n var tempEl = document.createElement(\"span\");\r\n tempEl.textContent = message;\r\n let encodedMessage = tempEl.innerHTML;\r\n let data: LogRequest = {\r\n message: encodedMessage\r\n };\r\n\r\n console.log(\"LOG \" + message);\r\n var result = await this.ajaxClient.callSitecoreApi(\"/api/checkout/log/log\", data, true, null, true);\r\n\r\n if (result.success && result.response) {\r\n return result.response.data;\r\n }\r\n return { success: false };\r\n }\r\n}\r\nexport = ServerLoggingLogger","class BookingPathNavigatorResponse {\r\n public success: boolean;\r\n public paxWithSeatsRemoved: Array;\r\n public isBlocked: boolean;\r\n public redirectUrl: string;\r\n public hasPriceChanged: string;\r\n public reason: string;\r\n public correlationId: string;\r\n public totalAmount: number;\r\n public currencyCode: string;\r\n public sessionToken: string;\r\n public passengerNameReference: string;\r\n public amc: string;\r\n public paymentPage: string;\r\n public hybridIdentifier: string;\r\n public hybridBoardingPassDetails: string;\r\n public duplicateBookingFound: boolean;\r\n public isCashPayment: boolean;\r\n}\r\n\r\nexport default BookingPathNavigatorResponse;","class BookingRequest {\r\n public bookingPathStepId: string;\r\n public isSearchResults: boolean;\r\n public acceptsNewFares: boolean;\r\n public booking: BookingModel;\r\n public sendHybridAppBoardingPasses: boolean;\r\n public hybridIdentifier: string;\r\n public inCheckInFlow: boolean;\r\n public subSalesChannel: string;\r\n public saveContactDetailsToMyjet2?: boolean; \r\n}\r\n\r\nexport default BookingRequest;","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\ndeclare let Logger: any;\r\ndeclare let AppSettings: any;\r\ndeclare let Routes: any;\r\ndeclare let ModalManager: any;\r\n\r\nimport $ from \"jquery\";\r\nimport ServerLoggingLogger = require(\"./ServerLoggingLogger\");\r\nimport AjaxClient = require(\"./AjaxClient\");\r\nimport BookingPathNavigatorResponse from \"../Models/BookingPathNavigatorResponse\";\r\nimport ApiResponse from \"../Models/ApiResponse\";\r\nimport BookingRequest from \"../Models/BookingRequest\";\r\nclass CheckoutService {\r\n private readonly log: any;\r\n private readonly appSettings: any;\r\n private readonly routes: any;\r\n private readonly modalManager: any;\r\n private readonly serverLogger: ServerLoggingLogger;\r\n private readonly ajaxClient: AjaxClient;\r\n private paymentDetails: PreAuthPaymentDetails;\r\n\r\n public readonly challengeModal: string = \"challenge-modal\";\r\n\r\n constructor() {\r\n this.log = new Logger(\"CheckoutService\");\r\n this.appSettings = AppSettings;\r\n this.routes = Routes;\r\n this.modalManager = ModalManager;\r\n this.ajaxClient = new AjaxClient();\r\n this.serverLogger = new ServerLoggingLogger();\r\n }\r\n\r\n public async InitialBooking(data: BookingRequest): Promise {\r\n this.log.debug(\"3: InitialBooking called with:\", data);\r\n var result = await this.ajaxClient.callSitecoreApi(\"/api/checkout/checkoutnavigator/initialbooking\", data, true, null, true);\r\n this.log.debug(\"3: InitialBooking responded with:\", result.response);\r\n return result.response.data;\r\n }\r\n\r\n public async InitialBookingValidation(data: BookingRequest): Promise {\r\n this.log.debug(\"3: InitialBooking called with:\", data);\r\n var result = await this.ajaxClient.callSitecoreApi(\"/api/checkout/checkoutnavigator/InitialBookingValidation\", data, true, null, true);\r\n this.log.debug(\"3: InitialBooking responded with:\", result.response);\r\n return result.response.data;\r\n }\r\n\r\n public async SaveContactDetailsToMyjet2(): Promise {\r\n this.log.debug(\"3: SaveContactDetailsToMyjet2 called\");\r\n var result = await this.ajaxClient.callSitecoreApi(\"/api/checkout/checkoutnavigator/savecontactdetailstomyjet2\", {}, true, null, true);\r\n this.log.debug(\"3: SaveContactDetailsToMyjet2 responded with:\", result.response);\r\n return result.response.data; \r\n }\r\n\r\n public async UpdateBookingMmb(data: BookingRequest): Promise {\r\n this.log.debug(\"3: UpdateBookingMmb called with:\", data);\r\n var result = await this.ajaxClient.callSitecoreApi(\"/api/checkout/checkoutnavigator/updatebookingmmb\", data, true, null, true);\r\n this.log.debug(\"3: UpdateBookingMmb responded with:\", result.response);\r\n return result.response.data;\r\n }\r\n\r\n public async PreAuthInit(correlationId: string, totalAmount: number, paymentType: string, currency: string, cardNumber: string, subSalesChannel: string, expiryMonth: number, expiryYear : number): Promise> {\r\n let data = this.buildPreAuthInitRequest(correlationId, totalAmount, paymentType, currency, cardNumber, subSalesChannel, expiryMonth, expiryYear);\r\n this.log.info(\"PreAuthInit Called with:\", data);\r\n this.serverLogger.log(`PreAuthInit Called with: ${JSON.stringify(data)}`);\r\n var result = await this.ajaxClient.callApi(this.appSettings.paymentPreAuthInitUrl, data, true, data.reference);\r\n this.log.debug(\"PreAuthInit responded with:\", result);\r\n return result;\r\n }\r\n\r\n public async PreAuth(data: MakePayment): Promise> {\r\n var paymentDetails = this.convertPaymentDetails(data);\r\n this.log.debug(\"10: Pre-authorizing payment called with:\", paymentDetails);\r\n var result = await this.ajaxClient.callApi(this.appSettings.paymentPreAuthUrl, paymentDetails, true, null, false);\r\n this.log.debug(\"10: Pre-authorizing payment responded with:\", result.response);\r\n return result;\r\n }\r\n\r\n public Challenge(data: PreAuthResponse): void {\r\n this.log.debug(\"submitting challenge form\");\r\n $(\"#challengeModalBody\").empty().append(data.challengeHtml);\r\n this.modalManager.displayModal({ key: this.challengeModal });\r\n }\r\n\r\n public async FareChangeCheck(data: BookingRequest): Promise {\r\n return (await this.ajaxClient.callApi(\"/api/checkout/checkoutnavigator/farechangecheck\", data, true)).response;\r\n }\r\n\r\n public async PreAuthPostChallenge(signedPares : string): Promise> {\r\n let data = this.paymentDetails;\r\n data.currencyCode = this.paymentDetails.paymentAmount.currencyCode;\r\n data.consumerAuthenticationValues ={\r\n signedPares: signedPares\r\n };\r\n\r\n return (await this.ajaxClient.callApi(this.appSettings.paymentPostChallengePreAuthUrl, data, true));\r\n }\r\n\r\n public async CompleteBooking(): Promise {\r\n this.log.debug(\"12: CompleteBooking called\");\r\n var result = await this.ajaxClient.callSitecoreApi(this.routes.completeBooking, null, true, null, true);\r\n this.log.debug(\"12: CompleteBooking responded with:\", result.response);\r\n return result.response.data;\r\n }\r\n\r\n public async updateSelectedPaymentType(paymentType: any): Promise {\r\n this.log.debug(\"updateSelectedPaymentType called\");\r\n var result = await this.ajaxClient.callSitecoreApi(this.routes.checkout.updateSelectedPaymentType, {\r\n paymentOption: paymentType.id,\r\n cardTypeId: paymentType.cardTypeId,\r\n name: paymentType.name,\r\n type: paymentType.type\r\n }, true, null, true);\r\n this.log.debug(\"updateSelectedPaymentType responded with:\", result.response);\r\n return result.response.data;\r\n }\r\n\r\n public async updatePaymentToPaypal(): Promise {\r\n this.log.debug(\"updatePaymentToPaypal called\");\r\n var result = await this.ajaxClient.callSitecoreApi(\r\n this.routes.checkout.updatePaymentForPaypal, { name: \"paypal\", type: \"paypal\" }, true, null, true);\r\n this.log.debug(\"updatePaymentToPaypal responded with:\", result.response);\r\n return result.response.data;\r\n }\r\n\r\n public async GetPaymentTypes(dataSourceId: string): Promise {\r\n return (await this.ajaxClient.callApi(this.routes.checkout.updatePaymentTypes, { datasourceId: dataSourceId }, true, null, true)).response;\r\n }\r\n\r\n public async GetPayPalRestrictionStatus(): Promise {\r\n this.log.debug(\"GetPayPalRestrictionStatus called\");\r\n var result = await this.ajaxClient.callApi(this.routes.checkout.getPayPalRestrictionStatus, null, false, null, true);\r\n this.log.debug(\"GetPayPalRestrictionStatus responded with:\", result.response);\r\n return result.response.data;\r\n }\r\n\r\n public submitDdcForm(data: PreAuthInitResponse): void {\r\n this.log.debug(\"7: submitDdcForm Called\");\r\n $('#deviceDataCollectionFormPlaceholder').empty().append(data.preAuthoriseInitialiseHtml);\r\n }\r\n\r\n private convertCardType(cardType: string): string {\r\n var cardTypes: any = {\r\n 'Visa Credit': \"VisaCredit\",\r\n 'MasterCard Credit': \"MastercardCredit\",\r\n 'American Express': \"AmericanExpressCredit\",\r\n 'Switch Maestro': \"MaestroDebit\",\r\n 'Visa Debit': \"VisaDebit\",\r\n 'Electron': \"VisaElectron\",\r\n 'Debit MasterCard': \"MastercardDebit\"\r\n };\r\n\r\n return cardTypes[cardType] || cardType;\r\n }\r\n\r\n private convertPaymentDetails(payment: MakePayment): PreAuthPaymentDetails {\r\n var paymentDetails = new PreAuthPaymentDetails();\r\n paymentDetails.salesChannel = \"Internet\";\r\n paymentDetails.subSalesChannel = payment.subSalesChannel,\r\n paymentDetails.reference = payment.correlationId;\r\n\r\n paymentDetails.paymentAmount = {\r\n value: payment.totalAmount,\r\n currencyCode: payment.currencyCode\r\n };\r\n\r\n paymentDetails.callingSystem = {\r\n system: \"Flights\",\r\n systemIdentifier: \"\"\r\n }\r\n\r\n if (this.appSettings.systemIdentifier) {\r\n paymentDetails.callingSystem.systemIdentifier = this.appSettings.systemIdentifier;\r\n }\r\n\r\n paymentDetails.card = {\r\n securityCode: payment.cvv,\r\n issueNumber: \"\",\r\n holderName: payment.cardHolder.replace(\"’\", \"'\"),\r\n number: payment.cardNumber,\r\n type: this.convertCardType(payment.paymentType),\r\n expiryDate: {\r\n month: payment.expiryMonth,\r\n year: payment.expiryYear\r\n }\r\n };\r\n\r\n paymentDetails.ddcReferenceId = payment.ddcReferenceId;\r\n paymentDetails.returnUrl = payment.returnUrl;\r\n this.paymentDetails = paymentDetails;\r\n return paymentDetails;\r\n }\r\n\r\n private buildPreAuthInitRequest(correlationId: string, totalAmount: number, paymentType: string, currency: string, cardNumber: string, subSalesChannel: string, expiryMonth: number, expiryYear: number): PreAuthInitRequest {\r\n let result: PreAuthInitRequest = {\r\n reference: correlationId,\r\n callingSystem: {\r\n system: \"Flights\"\r\n },\r\n amount: totalAmount,\r\n cardType: this.convertCardType(paymentType),\r\n currency: currency,\r\n pan: cardNumber,\r\n salesChannel: \"Internet\",\r\n subSalesChannel: subSalesChannel,\r\n expiryMonth: expiryMonth,\r\n expiryYear: expiryYear\r\n };\r\n\r\n return result;\r\n }\r\n}\r\nexport = CheckoutService","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\n\r\ndeclare let Logger: any;\r\ndeclare let Events: any;\r\ndeclare let EventKeys: any;\r\n\r\nimport BookingPathNavigatorResponse from \"../Models/BookingPathNavigatorResponse\";\r\nimport AjaxClient from \"./AjaxClient\";\r\n\r\nclass NameChangeService {\r\n private readonly log: any;\r\n private readonly events: any;\r\n private readonly eventKeys: any;\r\n private readonly ajaxClient: AjaxClient;\r\n\r\n public readonly challengeModal: string = \"challenge-modal\";\r\n\r\n private readonly completeEndpoint: string = '/client/api/name-change/complete';\r\n private readonly preCompleteEndpoint: string = '/client/api/name-change/precomplete';\r\n\r\n constructor() {\r\n this.log = new Logger(\"NameChangeService\");\r\n this.events = Events;\r\n this.eventKeys = EventKeys;\r\n this.ajaxClient = new AjaxClient();\r\n }\r\n\r\n public async preComplete(): Promise {\r\n this.log.debug(\"13: NameChange.PreComplete called\");\r\n const result = await this.ajaxClient.callSitecoreApi(this.preCompleteEndpoint, null, true, null, true);\r\n this.log.debug(\"13: NameChange.PreComplete responded with:\", result.response);\r\n return result.response.data;\r\n }\r\n\r\n public async complete(): Promise {\r\n this.log.debug(\"14: NameChange.Complete called\");\r\n const result = await this.ajaxClient.callSitecoreApi(this.completeEndpoint, null, true, null, true);\r\n this.log.debug(\"14: NameChange.Complete responded with:\", result.response);\r\n return result.response.data;\r\n }\r\n}\r\nexport default NameChangeService","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\ndeclare let Logger: any;\r\ndeclare let AppSettings: any;\r\ndeclare let Routes: any;\r\nimport AjaxClient from \"./AjaxClient\";\r\nimport BookingPathNavigatorResponse from \"../Models/BookingPathNavigatorResponse\";\r\nimport BookingRequest from \"../Models/BookingRequest\";\r\n\r\nclass ChangeDateService {\r\n private readonly log: any;\r\n private readonly routes: any;\r\n private readonly ajaxClient: AjaxClient;\r\n\r\n public readonly challengeModal: string = \"challenge-modal\";\r\n\r\n constructor() {\r\n this.log = new Logger(\"CheckoutService\");\r\n this.ajaxClient = new AjaxClient();\r\n }\r\n\r\n public async preComplete(data: BookingRequest): Promise {\r\n this.log.debug(\"3: ChangeDate.PreComplete called with:\", data);\r\n const result = await this.ajaxClient.callSitecoreApi(\"/client/api/changedate/precomplete\", data, true, null, true);\r\n this.log.debug(\"3: ChangeDate.PreComplete responded with:\", result.response);\r\n return result.response.data;\r\n }\r\n\r\n public async complete(): Promise {\r\n this.log.debug(\"12: ChangeDate.Complete called\");\r\n const result = await this.ajaxClient.callSitecoreApi(\"/client/api/changedate/complete\", null, true, null, true);\r\n this.log.debug(\"12: ChangeDate.Complete responded with:\", result.response);\r\n return result.response.data;\r\n }\r\n}\r\nexport = ChangeDateService","\r\nclass CardDetails {\r\n public CardNumber: string;\r\n constructor(formattedCardNumber: string) {\r\n this.CardNumber = this.convertFormattedCardNumber(formattedCardNumber);\r\n }\r\n\r\n private convertFormattedCardNumber(formattedCardNumber: string) {\r\n var cardNumber = \"\";\r\n\r\n if (!this.isNullOrWhiteSpace(formattedCardNumber)) {\r\n cardNumber = formattedCardNumber.replace(/-/g, \"\");\r\n }\r\n\r\n return cardNumber;\r\n }\r\n\r\n private isNullOrWhiteSpace(s : string) {\r\n return (!s || /^\\s*$/.test(s));\r\n }\r\n}\r\n\r\nexport = CardDetails","/// \r\n/// \r\n/// \r\n\r\ndeclare let Events: any;\r\ndeclare let EventKeys: any;\r\ndeclare let Logger: any;\r\n\r\n\r\nimport $ from \"jquery\";\r\nimport creditCardType from \"credit-card-type\";\r\nimport CardDetails = require(\"../Object/CardDetails\");\r\n\r\nclass AutoCardDetect {\r\n private readonly log: any;\r\n private readonly events: any;\r\n private readonly eventKeys: any;\r\n private $visaIcon: JQuery;\r\n private $masterCardIcon: JQuery;\r\n private $maestroIcon: JQuery;\r\n private $americanExpressIcon: JQuery;\r\n private $paymentDetails: JQuery;\r\n private currentCardType:string;\r\n constructor() {\r\n this.log = new Logger(\"AutoCardDetails\");\r\n this.events = Events;\r\n this.eventKeys = EventKeys;\r\n this.subscribeToEvents();\r\n this.$paymentDetails = $('form[data-selector=\"payment-details\"]');\r\n this.$visaIcon = $('#visaIcon', this.$paymentDetails);\r\n this.$masterCardIcon = $('#MastercardIcon', this.$paymentDetails);\r\n this.$maestroIcon = $('#MaestroIcon', this.$paymentDetails);\r\n this.$americanExpressIcon = $('#AmexIcon', this.$paymentDetails);\r\n this.currentCardType = undefined;\r\n\r\n //This section can be remove once when Ui css is complete\r\n this.hideIcons();\r\n }\r\n \r\n private subscribeToEvents() {\r\n this.events.subscribe(this.eventKeys.cardPaymentAutoCardDetect, (cardDetails: CardDetails) => { this.detectCardType.call(this, cardDetails) });\r\n }\r\n \r\n public detectCardType(cardDetails: CardDetails){\r\n \r\n if (cardDetails.CardNumber.length >= 8) {\r\n let cardInfo = creditCardType(cardDetails.CardNumber);\r\n let cardType: string;\r\n\r\n if (cardInfo.length > 0) {\r\n cardType = cardInfo[0].type;\r\n } else {\r\n cardType = \"\";\r\n }\r\n \r\n this.changeImage(cardType);\r\n this.currentCardType = cardType;\r\n } else {\r\n this.hideIcons();\r\n this.currentCardType = undefined;\r\n }\r\n }\r\n\r\n private changeImage(cardType: string) {\r\n if (this.currentCardType === cardType) {\r\n return;\r\n }\r\n this.hideIcons();\r\n\r\n let cardTypeId: number;\r\n\r\n switch (cardType.toLowerCase()) {\r\n case \"visa\":\r\n cardTypeId = 17;\r\n this.$visaIcon.show();\r\n this.events.raise(this.eventKeys.cardPaymentAutoCardDetectValid, cardTypeId);\r\n break;\r\n case \"mastercard\":\r\n cardTypeId = 18;\r\n this.$masterCardIcon.show();\r\n this.events.raise(this.eventKeys.cardPaymentAutoCardDetectValid, cardTypeId);\r\n break;\r\n case \"maestro\":\r\n cardTypeId = 4;\r\n this.$maestroIcon.show();\r\n this.events.raise(this.eventKeys.cardPaymentAutoCardDetectValid, cardTypeId);\r\n break;\r\n case \"american-express\":\r\n cardTypeId = 3;\r\n this.$americanExpressIcon.show();\r\n this.events.raise(this.eventKeys.cardPaymentAutoCardDetectValid, cardTypeId);\r\n break;\r\n default:\r\n this.events.raise(this.eventKeys.cardPaymentAutoCardDetectNotValid);\r\n break;\r\n }\r\n }\r\n \r\n\r\n private hideIcons() {\r\n this.$visaIcon.hide();\r\n this.$masterCardIcon.hide();\r\n this.$maestroIcon.hide();\r\n this.$americanExpressIcon.hide();\r\n }\r\n}\r\n\r\nexport = AutoCardDetect ","/// \r\n/// \r\n/// \r\n/// \r\n\r\ndeclare let Events: any;\r\ndeclare let EventKeys: any;\r\ndeclare let Logger: any;\r\ndeclare let FormValidator: any;\r\n\r\ndeclare global {\r\n interface JQuery extends Iterable {\r\n initSelect(): any\r\n }\r\n}\r\n\r\nimport $ from \"jquery\";\r\nimport \"jquery-mask-plugin\";\r\nimport \"velocity-animate\";\r\n\r\nimport CheckoutService = require(\"../Services/CheckoutService\");\r\nimport AutoCardDetect = require(\"../Services/AutoCardDetect\");\r\nimport CardDetails = require(\"../Object/CardDetails\");\r\nimport BookingRequest from \"../Models/BookingRequest\";\r\n\r\nclass PaymentDetails {\r\n private readonly log: any;\r\n private readonly events: any;\r\n private readonly eventKeys: any;\r\n private readonly formValidator: any;\r\n private readonly checkoutService: CheckoutService;\r\n private readonly autoCardDetect: AutoCardDetect;\r\n private $paymentDetails: JQuery;\r\n private $nothingToPay: JQuery;\r\n private $toPay: JQuery;\r\n private currentPaymentType: any;\r\n private paymentTypes: any;\r\n private $paymentType: any;\r\n private $cardFields: JQuery;\r\n private $cardPaymentTypeField: JQuery;\r\n private $cardNumberPlaceholder: JQuery;\r\n private $cvvPlaceholder: JQuery;\r\n private $cvvTooltipButton: JQuery;\r\n private $cardHolder: JQuery;\r\n private $cardNumber: JQuery;\r\n private $expiryMonth: JQuery;\r\n private $expiryYear: JQuery;\r\n private $cvvInput: JQuery;\r\n private $paymentTypeRow: JQuery;\r\n private $paypalRadioContainer: JQuery;\r\n private $cardRadioContainer: JQuery;\r\n private datasourceId: string;\r\n private readonly paypal = \"paypal\";\r\n private readonly card = \"card\";\r\n private readonly active = \"option-select--active\";\r\n private currentPaymentOption: string;\r\n private $autoCardDetectEnabled: boolean;\r\n private $accordionEnabled: boolean;\r\n public paymentModalEnabled: boolean;\r\n public paymentModalKey: string;\r\n public paymentButtonLabel: string;\r\n public modalDesignType: string;\r\n\r\n public errorMessages: any;\r\n private emptyPaymentType: any = { cvv: { length: 0 }, cardNumber: { lengths: \"\", prefixes: \"\" } };\r\n\r\n constructor() {\r\n this.log = new Logger(\"PaymentDetails\");\r\n\r\n this.events = Events;\r\n this.eventKeys = EventKeys;\r\n this.checkoutService = new CheckoutService();\r\n this.autoCardDetect = new AutoCardDetect();\r\n this.$paymentDetails = $('form[data-selector=\"payment-details\"]');\r\n\r\n this.formValidator = new FormValidator(this.$paymentDetails);\r\n\r\n this.$nothingToPay = $('.payment-details-nothing-to-pay', this.$paymentDetails);\r\n this.$toPay = $('.payment-details-to-pay', this.$paymentDetails);\r\n\r\n this.$paymentType = $('select[name=\"payment_type\"]', this.$paymentDetails);\r\n this.$cardFields = $(\"[data-payment-card-details]\", this.$paymentDetails);\r\n this.$cardPaymentTypeField = $(\"[data-payment-card-details-extra]\", this.$paymentDetails);\r\n this.$cardNumberPlaceholder = $('#card-number-label', this.$paymentDetails);\r\n this.$cvvPlaceholder = $('.payment-card__cvv label', this.$paymentDetails);\r\n this.$cvvTooltipButton = $('[data-tooltip-id]', this.$paymentDetails);\r\n this.$paymentTypeRow = $('.paymentTypeRow', this.$paymentDetails);\r\n this.$cardHolder = $('input[name=\"card_holder_name\"]', this.$paymentDetails);\r\n this.$cardNumber = $('input[name=\"card_number\"]', this.$paymentDetails);\r\n this.$expiryMonth = $('select[name=\"expiry_month\"]', this.$paymentDetails);\r\n this.$expiryYear = $('select[name=\"expiry_year\"]', this.$paymentDetails);\r\n this.$cvvInput = $('.payment-card__cvv input', this.$paymentDetails);\r\n\r\n // ignores the fields that are not included in the card payment fields (the fields in the modal)\r\n this.$paypalRadioContainer = $('#paypal-selection', this.$paymentDetails);\r\n this.$cardRadioContainer = $('#card-selection', this.$paymentDetails);\r\n\r\n this.errorMessages = this.$paymentDetails.data('errormessages');\r\n this.datasourceId = this.$paymentDetails.data('dsid');\r\n\r\n this.togglePayPal();\r\n\r\n\r\n // ignores the fields that are not included in the card payment fields (the fields in the modal)\r\n\r\n let $autoCardDetectEnabledField = $('#AutoCardDetectEnabled', this.$paymentDetails);\r\n this.$autoCardDetectEnabled = this.toBoolean($autoCardDetectEnabledField.val().toString());\r\n\r\n let $accordionEnabled = $('#AccordionEnabled', this.$paymentDetails);\r\n this.$accordionEnabled = this.toBoolean($accordionEnabled.val().toString());\r\n\r\n\r\n let $paymentModalEnabled = $('#PaymentModalEnabled', this.$paymentDetails);\r\n this.paymentModalEnabled = this.toBoolean($paymentModalEnabled.val().toString());\r\n\r\n this.paymentModalKey = $('#PaymentModalKey', this.$paymentDetails).val().toString();\r\n\r\n this.paymentButtonLabel = $('#PaymentButtonLabel', this.$paymentDetails).val().toString();\r\n this.modalDesignType = $('#ModalDesignType', this.$paymentDetails).val().toString();\r\n\r\n this.events.subscribe(this.eventKeys.bookingPathValidate, (data: any) => { this.handleBookingPathValidate.call(this, data) });\r\n this.events.subscribe(this.eventKeys.bookingPathRequestData, (data: any) => { this.handleBookingPathRequestData.call(this, data) });\r\n this.events.subscribe(this.eventKeys.bookingPriceChanged, (data: any) => { this.onBookingPriceChanged.call(this, data) });\r\n this.events.subscribe(this.eventKeys.currencyChanged, (data: any) => {\r\n this.currentPaymentOption = \"\";\r\n this.onBookingPriceChanged.call(this, data);\r\n });\r\n this.events.subscribe(this.eventKeys.basketToPayUpdate, (data: any) => { this.onBasketToPayUpdate.call(this, data) });\r\n\r\n this.$paymentType.on(\"change\", (e: Event) => { this.onPaymentTypeChanged(e); });\r\n this.$cvvTooltipButton.on('click', (e: Event) => { this.onCvvTooltipClicked(e); });\r\n this.$paymentDetails.on('click', '.option-select', (e: any) => {\r\n this.onPaymentDetailsClick(e);\r\n this.events.raise(this.eventKeys.paymentOptionSelected);\r\n e.stopPropagation();\r\n });\r\n\r\n this.bindAutoCardDetectEvent();\r\n\r\n this.paymentTypes = this.loadPaymentTypes();\r\n this.togglePayPalLogo();\r\n\r\n // Select the Visa placeholder by default\r\n if (this.$autoCardDetectEnabled) {\r\n var paymentType = this.findPaymentTypeByCardId(17);\r\n if (paymentType !== undefined) {\r\n this.$cardNumberPlaceholder.text(paymentType.cardNumber.placeholder);\r\n }\r\n }\r\n\r\n this.formValidator.init({\r\n $paymentType: this.$paymentType,\r\n $cardNumber: this.$cardNumber,\r\n $expiryMonth: this.$expiryMonth,\r\n $expiryYear: this.$expiryYear,\r\n $cvv: this.$cvvInput\r\n });\r\n\r\n if (this.$paymentType.val()) {\r\n if (this.selectPaymentTypeById(this.$paymentType.val())) {\r\n this.$paymentType.valid();\r\n }\r\n }\r\n }\r\n\r\n private bindAutoCardDetectEvent() {\r\n if (this.$autoCardDetectEnabled) {\r\n this.$cardNumber.on(\"keyup\", (e: any) => this.events.raise(this.eventKeys.cardPaymentAutoCardDetect, new CardDetails(e.currentTarget.value)));\r\n this.events.subscribe(this.eventKeys.cardPaymentAutoCardDetectNotValid, (data: any) => this.removeCardType.call(this));\r\n this.events.subscribe(this.eventKeys.cardPaymentAutoCardDetectNotValid, (data: any) => this.showCardPaymentTypeSelection.call(this));\r\n this.events.subscribe(this.eventKeys.cardPaymentAutoCardDetectValid, (data: number) => this.hideCardPaymentTypeSelection.call(this, data));\r\n }\r\n }\r\n\r\n private removeCardType() {\r\n this.formValidator.validateCardType(this.$cardNumber);\r\n this.currentPaymentType = '';\r\n $('#payment_type').val('');\r\n this.formValidator.onPaymentTypeChanged(this.emptyPaymentType, this.$autoCardDetectEnabled);\r\n }\r\n\r\n private showCardPaymentTypeSelection() {\r\n this.$cardPaymentTypeField.velocity('slideDown');\r\n }\r\n\r\n private hideCardPaymentTypeSelection(cardTypeId: number) {\r\n this.formValidator.validateCardType(this.$cardNumber);\r\n\r\n this.$cardPaymentTypeField.velocity('slideUp');\r\n\r\n let paymentType = this.findPaymentTypeByCardId(cardTypeId);\r\n\r\n this.selectPaymentType(paymentType);\r\n }\r\n\r\n public selectedPaymentType() {\r\n return this.currentPaymentType;\r\n };\r\n\r\n public isCardPayment() {\r\n return $('#payment-method-card').is(':checked');\r\n };\r\n\r\n public cardHolder(): string {\r\n return this.$cardHolder.val();\r\n };\r\n\r\n public cardNumber(): string {\r\n return this.$cardNumber.val();\r\n };\r\n\r\n public cardNumberUnformatted(): string {\r\n let cardDetails = new CardDetails(this.cardNumber());\r\n return cardDetails.CardNumber;\r\n }\r\n\r\n public expiryMonth(): number {\r\n return this.$expiryMonth.val();\r\n };\r\n\r\n public expiryYear(): number {\r\n return this.$expiryYear.val();\r\n };\r\n\r\n public cvv(): number {\r\n return this.$cvvInput.val();\r\n };\r\n\r\n public bin(): string {\r\n return this.getCardBin(this.$cardNumber.val() as string);\r\n };\r\n\r\n public buildModel(correlationId: string, totalAmount: number, currencyCode: string, ddcReferenceId: string, returnUrl: string, subSalesChannel: string): MakePayment {\r\n return {\r\n correlationId: correlationId,\r\n totalAmount: totalAmount,\r\n currencyCode: currencyCode,\r\n paymentType: this.selectedPaymentType().name,\r\n cardHolder: this.cardHolder(),\r\n cardNumber: this.cardNumber(),\r\n expiryMonth: this.expiryMonth(),\r\n expiryYear: this.expiryYear(),\r\n cvv: this.cvv(),\r\n bin: this.getCardBin(this.cardNumber()),\r\n ddcReferenceId: ddcReferenceId,\r\n returnUrl: returnUrl,\r\n subSalesChannel: subSalesChannel\r\n };\r\n }\r\n\r\n private onPaymentDetailsClick(e: any) {\r\n var currentActive = document.getElementsByClassName(this.active)[0];\r\n\r\n if (currentActive !== undefined) {\r\n currentActive.classList.remove(this.active);\r\n }\r\n e.currentTarget.classList.add(this.active);\r\n\r\n var innerRadio = e.currentTarget.querySelector('input[type=\"radio\"]');\r\n if (innerRadio != undefined) {\r\n $(innerRadio).prop('checked', true);\r\n }\r\n\r\n var value = e.currentTarget.getElementsByTagName('input')[0].value;\r\n this.toggleCardDetailFields(value);\r\n this.currentPaymentOption = value;\r\n }\r\n\r\n private handleBookingPathValidate(message: any) {\r\n this.log.info(\"handleBookingPathValidate :: jet2.paymentDetailsViewModel\");\r\n var validationErrors = this.formValidator.getValidationErrors();\r\n message.validationErrors = message.validationErrors.concat(validationErrors);\r\n }\r\n\r\n private handleBookingPathRequestData(message: BookingRequest) {\r\n var paymentType = this.selectedPaymentType();\r\n\r\n if (paymentType && paymentType.isCardPayment) {\r\n message.booking.paymentDetails = {\r\n paymentMethod: \"card\",\r\n cardTypeId: paymentType.cardTypeId,\r\n payerId: null,\r\n token: null,\r\n nameOnCard: this.cardHolder(),\r\n expiryMonth: this.expiryMonth(),\r\n expiryYear: this.expiryYear(),\r\n bin: this.getCardBin(this.cardNumber())\r\n };\r\n }\r\n }\r\n\r\n private getCardBin(cardNumber: string): string {\r\n let bin = new CardDetails(cardNumber);\r\n return bin.CardNumber.substring(0, 6);\r\n }\r\n\r\n private onPaymentTypeChanged(e: Event) {\r\n var $option = $(e.target as HTMLElement).find(\":selected\");\r\n var paymentType = this.findPaymentType($option.val() as string);\r\n this.selectPaymentType(paymentType);\r\n }\r\n\r\n\r\n private findPaymentTypeByCardId(id: number) {\r\n return this.paymentTypes.find(function (pt: any) {\r\n return pt.cardTypeId === id;\r\n });\r\n }\r\n\r\n private findPaymentType(id: string) {\r\n return this.paymentTypes.find(function (pt: any) {\r\n return pt.id === id;\r\n });\r\n }\r\n\r\n private onCvvTooltipClicked(e: Event) {\r\n if (this.currentPaymentType !== undefined) {\r\n e.stopPropagation();\r\n var $label = $(e.target as HTMLElement);\r\n var tooltipData = {\r\n $element: $label,\r\n $container: this.$paymentDetails,\r\n name: this.currentPaymentType.cvv.tooltipId\r\n };\r\n\r\n this.events.raise(this.eventKeys.tooltipElementSelected, tooltipData);\r\n }\r\n }\r\n\r\n private async selectPaymentType(paymentType: any) {\r\n this.events.raise(this.eventKeys.paymentTypeSelected, { spinnerKey: paymentType.spinner, sticky: true });\r\n\r\n var firstTime = this.currentPaymentType == null;\r\n var changingSelection = firstTime || this.currentPaymentType.id !== paymentType.id;\r\n\r\n if (changingSelection) {\r\n var methodChanging = firstTime || this.currentPaymentType.isCardPayment !== paymentType.isCardPayment;\r\n\r\n if (methodChanging) {\r\n this.toggleCardDetailFields(paymentType.isCardPayment ? this.card : this.paypal);\r\n }\r\n\r\n if (paymentType.isCardPayment) {\r\n this.$cardNumberPlaceholder.text(paymentType.cardNumber.placeholder);\r\n this.$cvvPlaceholder.text(paymentType.cvv.placeholder);\r\n\r\n if (paymentType.cardNumber.inputMask) {\r\n this.$cardNumber.mask(paymentType.cardNumber.inputMask, { reverse: paymentType.cardNumber.isInputMaskReversible });\r\n } else {\r\n this.$cardNumber.unmask();\r\n }\r\n\r\n this.formValidator.onPaymentTypeChanged(paymentType, this.$autoCardDetectEnabled);\r\n }\r\n\r\n await this.storeSelectedPaymentType(paymentType);\r\n }\r\n\r\n if (this.$autoCardDetectEnabled === false) {\r\n this.currentPaymentOption = paymentType.isCardPayment ? this.card : this.paypal;\r\n }\r\n\r\n this.currentPaymentType = paymentType;\r\n }\r\n\r\n private loadPaymentTypes() {\r\n var paymentTypes = $(\"option\", this.$paymentType).map(function (idx, option) {\r\n return $(option).data(\"paymenttype\");\r\n }).toArray();\r\n\r\n return paymentTypes;\r\n }\r\n\r\n private async storeSelectedPaymentType(paymentType: any) {\r\n this.events.raise(this.eventKeys.paymentTypeChanging);\r\n var result = await this.checkoutService.updateSelectedPaymentType(paymentType);\r\n this.log.debug(\"Update selected payment type returned:\", result);\r\n if (result.success) {\r\n this.events.raise(this.eventKeys.paymentTypeChanged);\r\n }\r\n }\r\n\r\n private async toggleCardDetailFields(paymentOption: string) {\r\n if (paymentOption === this.currentPaymentOption) {\r\n return;\r\n }\r\n\r\n if (paymentOption !== this.paypal) {\r\n this.$cardFields.velocity('slideDown');\r\n } else {\r\n this.$cardFields.velocity('slideUp');\r\n\r\n this.currentPaymentType = null;\r\n await this.checkoutService.updatePaymentToPaypal();\r\n }\r\n }\r\n\r\n private selectPaymentTypeById(paymentTypeId: string) {\r\n var selectedType = this.findPaymentType(paymentTypeId);\r\n\r\n if (selectedType) {\r\n this.selectPaymentType(selectedType);\r\n }\r\n\r\n return selectedType;\r\n }\r\n\r\n private toBoolean(value: string): boolean {\r\n let result: boolean;\r\n\r\n if (value.toLowerCase().trim() === 'true') {\r\n result = true;\r\n } else {\r\n result = false;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private async togglePayPal() {\r\n let payPalRestricted = await this.checkoutService.GetPayPalRestrictionStatus();\r\n if (payPalRestricted) {\r\n this.$cardRadioContainer.addClass('card-radio-paypal-restriction');\r\n this.$paypalRadioContainer.addClass('paypal-radio-paypal-restriction');\r\n this.$cardRadioContainer.click();\r\n } else {\r\n this.$cardRadioContainer.removeClass('card-radio-paypal-restriction');\r\n this.$paypalRadioContainer.removeClass('paypal-radio-paypal-restriction');\r\n this.$cardRadioContainer.removeClass(this.active);\r\n this.$paypalRadioContainer.removeClass(this.active);\r\n\r\n if (this.currentPaymentOption === this.paypal) {\r\n this.$paypalRadioContainer.click();\r\n } else if (this.currentPaymentOption === this.card) {\r\n this.$cardRadioContainer.click();\r\n }\r\n }\r\n }\r\n\r\n private async onBookingPriceChanged(payload: any): Promise {\r\n let result = await this.checkoutService.GetPaymentTypes(this.datasourceId);\r\n this.$paymentTypeRow.html(result.Data.Html);\r\n $(\".form-element-wrapper--select\", this.$paymentTypeRow).initSelect();\r\n this.$paymentType = $('select[name=\"payment_type\"]', this.$paymentDetails);\r\n this.$paymentType.on(\"change\", (e: Event) => { this.onPaymentTypeChanged(e); });\r\n this.paymentTypes = this.loadPaymentTypes();\r\n this.togglePayPalLogo();\r\n\r\n // surfaces console errors so skip validation after a farechange message is while the payment modal option is enabled\r\n if (payload!! && !payload.skipValidation) {\r\n this.formValidator.initPaymentTypeValidation(this.$paymentType);\r\n }\r\n\r\n if (this.currentPaymentType != null) {\r\n if (this.selectPaymentTypeById(this.currentPaymentType.id)) {\r\n this.$paymentType.valid();\r\n }\r\n }\r\n\r\n if (payload!! && payload.skipValidation) {\r\n $('#card-selection').click();\r\n } else {\r\n this.togglePayPal();\r\n }\r\n };\r\n\r\n private togglePayPalLogo() {\r\n if (this.$accordionEnabled === false) {\r\n if (this.paymentTypes.any((x: any) => x.type === \"PayPal\")) {\r\n $(\"img[src*='paypal']\").show();\r\n } else {\r\n $(\"img[src*='paypal']\").hide();\r\n }\r\n }\r\n }\r\n\r\n private onBasketToPayUpdate(nothingToPay: boolean) {\r\n if (nothingToPay) {\r\n this.$nothingToPay.show();\r\n this.$toPay.hide();\r\n } else {\r\n this.$nothingToPay.hide();\r\n this.$toPay.show();\r\n }\r\n }\r\n}\r\nexport = PaymentDetails","/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\ndeclare let Logger: any;\r\ndeclare let Events: any;\r\ndeclare let EventKeys: any;\r\ndeclare let AppSettings: any;\r\ndeclare let ModalManager: any;\r\ndeclare let GtmHandler: any;\r\n\r\ndeclare global {\r\n interface Window { challengeComplete: any; }\r\n}\r\n\r\nimport $ from \"jquery\";\r\nimport CheckoutService = require(\"../Services/CheckoutService\");\r\nimport NameChangeService from \"../Services/NameChangeService\";\r\nimport ChangeDateService = require(\"../Services/ChangeDateService\"); // HACK: Using a typescript file while we investigate how can we import Feature\\Booking\\code\\Components\\js\\api\\changeDateApi.js\r\nimport { Utilities } from \"../../../Foundation/Core/Utilities\";\r\nimport PaymentDetails = require(\"../ViewModels/PaymentDetails\");\r\nimport ServerLoggingLogger = require(\"../Services/ServerLoggingLogger\");\r\nimport HybridBridge from \"../../../Foundation/Core/HybridBridge\"; \r\nimport BookingPathNavigatorResponse from \"../Models/BookingPathNavigatorResponse\";\r\nimport ApiResponse from \"../Models/ApiResponse\";\r\nimport BookingRequest from \"../Models/BookingRequest\";\r\n\r\nclass CheckoutNavigator {\r\n private readonly log: any;\r\n private readonly events: any;\r\n private readonly eventKeys: any;\r\n private readonly appSettings: any;\r\n private readonly settings: any;\r\n private readonly bookingPathStepId: string;\r\n private readonly isSearchResults: boolean;\r\n private readonly sendHybridAppBoardingPasses: boolean;\r\n private readonly hybridIdentifier: string;\r\n private readonly modalManager: any;\r\n private readonly gtmHandler: any;\r\n private acceptsNewFares: boolean = false;\r\n private isDuplicateBookingAccepted: boolean = false;\r\n private redirectToPage: string;\r\n private readonly checkoutService: CheckoutService;\r\n private readonly changeDateService: ChangeDateService;\r\n private readonly nameChangeService: NameChangeService;\r\n private readonly Utilities: Utilities;\r\n private bookingData: BookingPathNavigatorResponse;\r\n private paymentDetails: PaymentDetails;\r\n private isMmb: boolean;\r\n private subSalesChannel: string;\r\n private bookingProcess: string;\r\n private readonly serverLogger: ServerLoggingLogger;\r\n private ddcEventUrl: string;\r\n private challengeTimeoutId?: number;\r\n private ddcTimeoutId?: number;\r\n private hasTimedOut: boolean;\r\n private threeDS2ProviderId: string;\r\n private defaultButtonLabel: string;\r\n\r\n private defaults: any = {\r\n loadingSpinnerKey: \"booking-path-page-loader\"\r\n };\r\n\r\n\r\n constructor() {\r\n this.log = new Logger(\"Jet2.CheckoutNavigator\");\r\n this.events = Events;\r\n this.eventKeys = EventKeys;\r\n this.checkoutService = new CheckoutService();\r\n this.changeDateService = new ChangeDateService();\r\n this.nameChangeService = new NameChangeService();\r\n this.Utilities = new Utilities();\r\n this.paymentDetails = new PaymentDetails();\r\n this.appSettings = AppSettings;\r\n this.modalManager = ModalManager;\r\n this.serverLogger = new ServerLoggingLogger();\r\n this.ddcEventUrl = \"\";\r\n this.hasTimedOut = false;\r\n\r\n this.gtmHandler = GtmHandler;\r\n\r\n let container = $(\"div[data-selector='booking-path-navigator']\");\r\n let continueBtn = $('a[data-selector=\"continue\"]');\r\n\r\n container.css({ 'display': 'block' });\r\n container.parent().css({ 'display': 'block' });\r\n\r\n this.sendHybridAppBoardingPasses = container.data(\"send-hybrid-app-boarding-passes\");\r\n this.hybridIdentifier = container.data(\"hybrid-identifier\");\r\n\r\n this.defaultButtonLabel = $(\"#bookingContinue\").data(\"default-booking-label\");\r\n\r\n this.settings = $.extend({}, this.defaults, container.data(\"settings\"));\r\n\r\n continueBtn.on(\"click\", (e: Event) => {\r\n this.processBooking(e)\r\n });\r\n\r\n this.redirectToPage = continueBtn.data('redirect-to-page');\r\n this.bookingPathStepId = continueBtn.data('step-id');\r\n this.isSearchResults = continueBtn.data('is-search-results');\r\n this.isMmb = continueBtn.data(\"is-mmb\");\r\n this.subSalesChannel = continueBtn.data(\"sub-sales-channel\");\r\n this.bookingProcess = continueBtn.data(\"booking-process\");\r\n\r\n this.events.subscribe(this.eventKeys.applicationMessageButtonClicked,\r\n (data: any) => {\r\n this.onApplicationMessageButtonClicked(data);\r\n });\r\n\r\n this.events.subscribe(this.eventKeys.paymentOptionSelected,\r\n () => {\r\n this.onPaymentOptionSelected();\r\n });\r\n\r\n this.events.subscribe(this.eventKeys.deviceDataCollectionSuccess, (data: any) => { this.onDeviceDataCollectionSuccess(data) });\r\n\r\n window.addEventListener(\"message\", (event: DdcEvent) => {\r\n if (event.origin === this.ddcEventUrl) {\r\n\r\n if (this.hasTimedOut) {\r\n this.log.debug(`8: DDC has timed out`);\r\n return;\r\n }\r\n\r\n var data = JSON.parse(event.data);\r\n this.log.debug(\"7: DDC Event Received:\", data);\r\n if (data !== undefined && data !== null && data.Status) {\r\n this.log.debug(\"8: Cardinal Commerce session id\", data.SessionId, true);\r\n let logData = JSON.stringify({\r\n correlationId: this.bookingData.correlationId,\r\n sessionId: data.SessionId\r\n });\r\n\r\n this.serverLogger.log(`8: DDC Success: ${logData}`);\r\n this.events.raise(this.eventKeys.deviceDataCollectionSuccess, data);\r\n } else {\r\n let logData: any = {\r\n correlationId: this.bookingData.correlationId\r\n };\r\n this.serverLogger.log(`8: DDC Failed: ${logData}`);\r\n this.handleError(true);\r\n }\r\n }\r\n });\r\n\r\n window.challengeComplete = (transactionId: string) => {\r\n this.challengeComplete(transactionId);\r\n }\r\n }\r\n\r\n private processBooking(e: Event): void {\r\n e.preventDefault();\r\n\r\n this.log.debug(\"1: processBooking Called\");\r\n let validationResult = this.checkValidation();\r\n let result = this.validationErrorMessageDisplayed(validationResult);\r\n\r\n if (!result) {\r\n if (this.paymentDetails.paymentModalEnabled && this.paymentDetails.isCardPayment()) {\r\n this.GetInitialBookingValidationResult();\r\n \r\n } else {\r\n this.events.raise(this.eventKeys.spinnerShow, {\r\n key: this.settings.loadingSpinnerKey, callback: async (): Promise => {\r\n await this.submitBooking();\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private async GetInitialBookingValidationResult() {\r\n let data = this.getBookingRequest();\r\n this.events.raise(this.eventKeys.bookingPathRequestData, data);\r\n this.serverLogger.log(`Calling InitialBookingValidation...`);\r\n this.setNavigateButtonLoading(true);\r\n let result = await this.checkoutService.InitialBookingValidation(data);\r\n if (result.success) {\r\n this.setNavigateButtonLoading(false);\r\n this.openPaymentModal();\r\n }\r\n else {\r\n this.serverLogger.log(`Open Payment Model Failed. ${JSON.stringify(result)}`);\r\n\r\n if (result.hasPriceChanged) {\r\n this.log.info(\"initial booking Price Change Notification\");\r\n this.acceptsNewFares = true;\r\n this.events.raise(this.eventKeys.bookingPriceChanged, { totalAmount: result.totalAmount });\r\n this.events.raise(this.eventKeys.CreditNoteReApply);\r\n this.setNavigateButtonLoading(false);\r\n this.events.raise('Modal.Hide', { key: this.paymentDetails.paymentModalKey });\r\n } else if (result.duplicateBookingFound) {\r\n this.isDuplicateBookingAccepted = true;\r\n } else if (result.isBlocked) {\r\n window.location.href = result.redirectUrl;\r\n }\r\n\r\n this.handleError(false);\r\n }\r\n }\r\n\r\n private setNavigateButtonLoading(isLoading: boolean): void {\r\n let continueBtnLabel = document.querySelector('[data-selector=\"default-label\"]');\r\n let spnLoader = document.getElementById('spnloader');\r\n let arwIcon = document.getElementById('arwIcon');\r\n\r\n if (isLoading) {\r\n continueBtnLabel.classList.add('hidden');\r\n spnLoader.classList.remove('hidden');\r\n if (!arwIcon.classList.contains('hidden'))\r\n arwIcon.classList.add('hidden');\r\n } else {\r\n continueBtnLabel.classList.remove('hidden');\r\n spnLoader.classList.add('hidden');\r\n if (arwIcon.classList.contains('hidden'))\r\n arwIcon.classList.remove('hidden');\r\n }\r\n }\r\n\r\n private openPaymentModal() {\r\n\r\n this.gtmHandler.pushEvent({\r\n event: 'Payment Secure',\r\n action: 'Impression',\r\n label: this.paymentDetails.modalDesignType\r\n });\r\n\r\n this.events.raise(\"Modal.Show\",\r\n {\r\n key: this.paymentDetails.paymentModalKey,\r\n additionalData: { shouldNotCloseModal: true },\r\n okayCallback: () => {\r\n new Promise((resolve, reject) => {\r\n\r\n let validationResult = this.checkValidation();\r\n this.validationErrorMessageDisplayed(validationResult, true) ? reject() : resolve();\r\n\r\n }).then(() => {\r\n this.events.raise(this.eventKeys.spinnerShow, {\r\n key: this.settings.loadingSpinnerKey, callback: async (): Promise => {\r\n this.events.raise('Modal.Hide', { key: this.paymentDetails.paymentModalKey });\r\n await this.submitBooking();\r\n }\r\n });\r\n }).catch(() => {\r\n this.log.debug(\"Validation Error on Payment Modal\");\r\n });\r\n },\r\n closeCallback: () => {\r\n // reset validation?\r\n // reset fields?\r\n }\r\n });\r\n }\r\n\r\n private async submitBooking(): Promise {\r\n this.log.debug(\"2: submitBooking Called\");\r\n this.hasTimedOut = false;\r\n\r\n let data = this.getBookingRequest();\r\n\r\n this.events.raise(this.eventKeys.bookingPathRequestData, data);\r\n\r\n let result: BookingPathNavigatorResponse;\r\n\r\n let methodName: string;\r\n\r\n switch (this.bookingProcess) {\r\n case \"change-date\":\r\n methodName = this.bookingProcess;\r\n this.serverLogger.log(`Calling ${methodName}...`);\r\n result = await this.changeDateService.preComplete(data);\r\n break;\r\n case \"name-change\":\r\n methodName = this.bookingProcess;\r\n this.serverLogger.log(`Calling ${methodName}...`);\r\n result = await this.nameChangeService.preComplete();\r\n break;\r\n default:\r\n if (this.isMmb) {\r\n methodName = \"UpdateBookingMmb\";\r\n this.serverLogger.log(`Calling ${methodName}...`);\r\n result = await this.checkoutService.UpdateBookingMmb(data);\r\n }\r\n else {\r\n methodName = \"InitialBooking\";\r\n this.serverLogger.log(`Calling ${methodName}...`);\r\n result = await this.checkoutService.InitialBooking(data);\r\n }\r\n break;\r\n }\r\n\r\n if (result.success) {\r\n this.log.info(\"4: initial booking Succeeded\");\r\n this.serverLogger.log(`${methodName} SUCCESS. ${JSON.stringify(result)}`);\r\n this.bookingData = result;\r\n\r\n if (result.hybridBoardingPassDetails) {\r\n HybridBridge.sendMessage(\"getBoardingPasses\", result.hybridBoardingPassDetails);\r\n }\r\n\r\n if (data.hybridIdentifier && data.hybridIdentifier !== \"\") {\r\n HybridBridge.raiseHybridEvent(data.hybridIdentifier, null);\r\n }\r\n if (result.isCashPayment) {\r\n if (!result.correlationId) {\r\n result.correlationId = this.bookingData.correlationId;\r\n }\r\n\r\n this.log.debug(\"13: Complete booking successful\");\r\n this.serverLogger.log(`12: CompleteBooking SUCCESS. ${JSON.stringify(result)}`);\r\n\r\n let parameters: any[] = [];\r\n if (result.amc) {\r\n parameters.push(\"amc=\" + result.amc);\r\n }\r\n\r\n if (parameters.length > 0) {\r\n this.redirectToPage += \"&\" + parameters.join(\"&\");\r\n }\r\n\r\n window.location.href = this.redirectToPage;\r\n }\r\n\r\n this.processPayment(result);\r\n\r\n if (data.saveContactDetailsToMyjet2 !== undefined && data.saveContactDetailsToMyjet2) {\r\n try {\r\n this.checkoutService.SaveContactDetailsToMyjet2();\r\n } catch (e) {\r\n this.log.debug(\"An unknown error occured whilst trying to save the contact details to myjet2\");\r\n }\r\n }\r\n\r\n } else {\r\n this.serverLogger.log(`${methodName} FAILED. ${JSON.stringify(result)}`);\r\n\r\n if (result.hasPriceChanged) {\r\n this.log.info(\"initial booking Price Change Notification\");\r\n this.acceptsNewFares = true;\r\n this.events.raise(this.eventKeys.bookingPriceChanged, { totalAmount: result.totalAmount });\r\n this.events.raise(this.eventKeys.CreditNoteReApply);\r\n this.events.raise('Modal.Hide', { key: this.paymentDetails.paymentModalKey });\r\n } else if (result.duplicateBookingFound) {\r\n this.isDuplicateBookingAccepted = true;\r\n } else if (result.isBlocked) {\r\n window.location.href = result.redirectUrl;\r\n }\r\n\r\n this.handleError(false);\r\n }\r\n }\r\n\r\n private async processPayment(data: BookingPathNavigatorResponse): Promise {\r\n this.log.debug(\"5: processPayment Called\");\r\n if (data.amc) {\r\n // used on travel essentials checkout page in mmb\r\n let param = this.redirectToPage.indexOf(\"?\") === -1 ? \"?\" : \"&\";\r\n param += \"amc=\" + data.amc;\r\n this.redirectToPage += param;\r\n }\r\n\r\n if (data.sessionToken) {\r\n // paypal payment\r\n this.makePayment(\"\");\r\n } else if (data.correlationId) {\r\n // card payment\r\n var result = await this.checkoutService.PreAuthInit(\r\n this.bookingData.correlationId,\r\n this.bookingData.totalAmount,\r\n this.paymentDetails.selectedPaymentType().name,\r\n this.bookingData.currencyCode,\r\n this.paymentDetails.cardNumberUnformatted(),\r\n this.subSalesChannel,\r\n this.paymentDetails.expiryMonth(),\r\n this.paymentDetails.expiryYear()\r\n );\r\n\r\n if (result && result.success === false) {\r\n let errorMessage = result.response && (>result).response.message\r\n ? (>result).response.message\r\n : \"The API responded with an error\";\r\n\r\n let errData = JSON.stringify({\r\n correlationId: this.bookingData.correlationId,\r\n error: errorMessage,\r\n errorData: result.response\r\n });\r\n this.serverLogger.log(`PreAuthInit FAILED. ${errData}`);\r\n\r\n this.log.error(\"Pre-Auth Init Failed: \", errorMessage);\r\n\r\n this.handleError(true);\r\n } else {\r\n let response = (>result).response;\r\n\r\n if (response && response.threeDSecureTwoEnabled) {\r\n let successData = JSON.stringify({\r\n correlationId: this.bookingData.correlationId,\r\n data: response\r\n });\r\n this.serverLogger.log(`PreAuthInit SUCCESS. ${successData}`);\r\n this.threeDS2ProviderId = response.providerId;\r\n this.ddcEventUrl = response.cardinalCommerceUrl;\r\n this.checkoutService.submitDdcForm(response);\r\n\r\n this.log.debug(`Setting DDC Timeout to ${this.settings.Psd2DdcTimeout} seconds`);\r\n this.ddcTimeoutId = window.setTimeout(() => this.timeoutDdc(), this.settings.Psd2DdcTimeout * 1000);\r\n\r\n } else {\r\n this.log.debug(\"ThreeDSecureTwo not enabled - Calling MakePayment\");\r\n this.serverLogger.log(\"ThreeDSecureTwo not enabled - Calling MakePayment\");\r\n this.makePayment(\"\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n private onDeviceDataCollectionSuccess(data: DdcResponse): void {\r\n this.log.debug(\"8: onDeviceDataCollectionSuccess Called\");\r\n\r\n let logData = JSON.stringify({\r\n correlationId: this.bookingData.correlationId,\r\n ddcResponse: data\r\n });\r\n if (data.Status) {\r\n if (this.ddcTimeoutId != null) {\r\n this.log.debug(`103: Clearing ddcTimeoutId. ${logData}`);\r\n clearTimeout(this.ddcTimeoutId);\r\n }\r\n\r\n this.log.debug(\"8: DDC Success - Calling MakePayment\");\r\n this.serverLogger.log(`8: DDC SUCCESS. ${logData}`);\r\n\r\n this.makePayment(data.SessionId);\r\n } else {\r\n this.log.error(\"8: DDC Failed\", data);\r\n this.serverLogger.log(`8: DDC FAILED. ${logData}`);\r\n this.handleError(true);\r\n }\r\n };\r\n\r\n private async makePayment(ddcSessionId: string): Promise {\r\n this.log.debug(\"9: makePayment Called\");\r\n if (this.paymentDetails.isCardPayment()) {\r\n\r\n let paymentDetail: MakePayment;\r\n\r\n if (ddcSessionId) {\r\n paymentDetail = this.paymentDetails.buildModel(\r\n this.bookingData.correlationId,\r\n this.bookingData.totalAmount,\r\n this.bookingData.currencyCode,\r\n ddcSessionId,\r\n this.appSettings.challengeCompleteUrl,\r\n this.subSalesChannel\r\n );\r\n } else {\r\n paymentDetail = this.paymentDetails.buildModel(\r\n this.bookingData.correlationId,\r\n this.bookingData.totalAmount,\r\n this.bookingData.currencyCode,\r\n \"\",\r\n \"\",\r\n this.subSalesChannel\r\n );\r\n }\r\n\r\n let callData = JSON.stringify({\r\n correlationId: paymentDetail.correlationId,\r\n ddcReference: paymentDetail.ddcReferenceId\r\n });\r\n this.log.debug(\"9: Running Pre-Auth\");\r\n this.serverLogger.log(`9: Calling PreAuth... ${callData}`);\r\n\r\n let preAuthResponse = await this.checkoutService.PreAuth(paymentDetail);\r\n\r\n this.log.debug(preAuthResponse);\r\n if (preAuthResponse && (>preAuthResponse).success === false) {\r\n let error = (>preAuthResponse).response\r\n ? (>preAuthResponse).response.errorType\r\n : \"The API responded with an error\";\r\n\r\n let errData = JSON.stringify({\r\n correlationId: paymentDetail.correlationId,\r\n error: error\r\n });\r\n this.log.error(\"Pre-Auth Failed: \", error);\r\n this.serverLogger.log(`9: PreAuth FAILED. ${errData}`);\r\n\r\n this.gtmHandler.pushEvent({\r\n event: \"Payment Status\",\r\n action: \"Failed\",\r\n label: this.paymentDetails.modalDesignType\r\n });\r\n\r\n this.handleError(true);\r\n } else if (preAuthResponse && (>preAuthResponse).response.challengeHtml) {\r\n // 3d secure\r\n let successData = JSON.stringify({\r\n correlationId: paymentDetail.correlationId\r\n });\r\n this.serverLogger.log(`9: PreAuth SUCCESS. ${successData}`);\r\n\r\n this.log.debug(\"3D Secure Challenge\");\r\n this.serverLogger.log(`101: Loading 3D Secure Challenge iFrame... ${successData}`);\r\n\r\n this.log.debug(`Setting Challenge Modal Timeout to ${this.settings.Psd2ChallengeModalTimeout} seconds`);\r\n this.challengeTimeoutId = window.setTimeout(() => this.timeoutChallengeModal(), this.settings.Psd2ChallengeModalTimeout * 1000);\r\n\r\n this.checkoutService.Challenge((>preAuthResponse).response);\r\n\r\n this.events.raise(this.eventKeys.spinnerHide, this.settings.loadingSpinnerKey);\r\n this.gtmHandler.pushEvent({\r\n event: \"3DS Secure\",\r\n action: \"Impression\",\r\n label: this.threeDS2ProviderId\r\n });\r\n } else {\r\n //frictionless flow\r\n this.completeBooking();\r\n\r\n this.gtmHandler.pushEvent({\r\n event: \"Payment Status\",\r\n action: \"Succeeded\",\r\n label: this.paymentDetails.modalDesignType\r\n });\r\n }\r\n } else {\r\n //PayPal\r\n window.location.href = this.appSettings.payPalUrl + \"&token=\" + this.bookingData.sessionToken;\r\n }\r\n }\r\n\r\n public async challengeComplete(transactionId: string) {\r\n let logData = JSON.stringify({\r\n correlationId: this.bookingData.correlationId\r\n });\r\n this.log.debug(\"3d Secure Challenge Success\");\r\n this.serverLogger.log(`3D Secure Challenge SUCCESS. ${logData}`);\r\n\r\n if (this.challengeTimeoutId != null) {\r\n this.log.debug(`101: Clearing challengeTimeoutId. ${logData}`);\r\n clearTimeout(this.challengeTimeoutId);\r\n }\r\n\r\n this.serverLogger.log(`101: Closing 3D Secure challenge iFrame. ${logData}`);\r\n this.disposeChallengeModal();\r\n\r\n this.serverLogger.log(`Calling PreAuthPostChallenge... ${logData}`);\r\n this.settings.spinnerKey = \"complete-booking-loader\";\r\n this.events.raise(this.eventKeys.spinnerShow, \"complete-booking-loader\");\r\n let result = await this.checkoutService.PreAuthPostChallenge(transactionId);\r\n\r\n if (result && result.success === false) {\r\n let errorMessage = result.response && (>result).response.errorType\r\n ? (>result).response.errorType\r\n : \"The API responded with an error\";\r\n\r\n let errData = JSON.stringify({\r\n correlationId: this.bookingData.correlationId,\r\n error: errorMessage\r\n });\r\n this.log.error(\"Pre-Auth Failed: \", errorMessage);\r\n this.serverLogger.log(`PreAuthPostChallenge FAILED. ${errData}`);\r\n\r\n this.gtmHandler.pushEvent({\r\n event: \"Payment Status\",\r\n action: \"Failed\",\r\n label: this.paymentDetails.modalDesignType\r\n });\r\n\r\n this.handleError(true);\r\n } else if (result) {\r\n this.log.debug(\"Post Challenge Pre Auth Success\");\r\n this.serverLogger.log(`PreAuthPostChallenge SUCCESS. ${logData}`);\r\n this.completeBooking();\r\n\r\n this.gtmHandler.pushEvent({\r\n event: \"Payment Status\",\r\n action: \"Succeeded\",\r\n label: this.paymentDetails.modalDesignType\r\n });\r\n }\r\n }\r\n\r\n private async completeBooking(): Promise {\r\n let logData = JSON.stringify({\r\n correlationId: this.bookingData.correlationId\r\n });\r\n this.log.info(\"11: Completing booking\");\r\n this.serverLogger.log(`12: Calling CompleteBooking... ${logData}`);\r\n\r\n let bookingResult;\r\n\r\n switch (this.bookingProcess) {\r\n case \"change-date\":\r\n bookingResult = await this.changeDateService.complete();\r\n break;\r\n case \"name-change\":\r\n bookingResult = await this.nameChangeService.complete();\r\n break;\r\n default:\r\n bookingResult = await this.checkoutService.CompleteBooking();\r\n break;\r\n }\r\n\r\n this.log.debug(\"13: Complete booking, bookingResult:\", bookingResult);\r\n\r\n if (bookingResult && bookingResult.success) {\r\n if (!bookingResult.correlationId) {\r\n bookingResult.correlationId = this.bookingData.correlationId;\r\n }\r\n\r\n this.gtmHandler.pushEvent({\r\n 'action': 'authorised',\r\n \"label\": this.threeDS2ProviderId\r\n }, 'payment_authorisation_status');\r\n this.log.debug(\"13: Complete booking successful\");\r\n this.serverLogger.log(`12: CompleteBooking SUCCESS. ${JSON.stringify(bookingResult)}`);\r\n\r\n let parameters: any[] = [];\r\n if (bookingResult.amc) {\r\n parameters.push(\"amc=\" + bookingResult.amc);\r\n }\r\n\r\n if (parameters.length > 0) {\r\n this.redirectToPage += \"&\" + parameters.join(\"&\");\r\n }\r\n\r\n window.location.href = this.redirectToPage;\r\n } else {\r\n this.gtmHandler.pushEvent({\r\n 'action': 'declined',\r\n \"label\": this.threeDS2ProviderId\r\n }, 'payment_authorisation_status');\r\n this.serverLogger.log(`12: CompleteBooking FAILED. ${JSON.stringify(bookingResult)}`);\r\n this.handleError(false);\r\n }\r\n }\r\n\r\n private onApplicationMessageButtonClicked(data: any): void {\r\n this.log.debug(\"ApplicationMessageButtonClicked\", data.messageCode);\r\n\r\n if (data.messageCode && (data.messageCode === \"FARECHANGED\" || data.messageCode === \"DUPLICATEBOOKING\")) {\r\n this.processBooking(new Event(\"event\"));\r\n }\r\n }\r\n\r\n private onPaymentOptionSelected(): void {\r\n this.log.debug(\"Payment Option Selected\");\r\n\r\n let continueBtnLabel = document.querySelector('[data-selector=\"default-label\"]');\r\n if (this.paymentDetails.paymentModalEnabled) {\r\n if (this.paymentDetails.isCardPayment()) {\r\n continueBtnLabel.innerHTML = this.paymentDetails.paymentButtonLabel;\r\n } else {\r\n continueBtnLabel.innerHTML = this.defaultButtonLabel;\r\n }\r\n }\r\n }\r\n\r\n private checkValidation(): ValidationResult {\r\n var validationResult = new ValidationResult();\r\n\r\n this.events.raise(this.eventKeys.clearValidationMessages, true);\r\n $(\".form-element-wrapper--error\").removeClass(\"form-element-wrapper--show-label form-element-wrapper--error\");\r\n this.events.raise(this.eventKeys.bookingPathValidate, validationResult);\r\n return validationResult;\r\n }\r\n\r\n private validationErrorMessageDisplayed(validationResult: ValidationResult, paymentModalIsOpen: boolean = false) {\r\n\r\n if (validationResult.validationErrors.length > 0) {\r\n\r\n this.log.debug(\"validationErrors\", validationResult.validationErrors);\r\n\r\n let validationErrors = validationResult.validationErrors.slice(0).sort((err1: ValidationError, err2: ValidationError): number => err2.priority - err1.priority);\r\n\r\n let applicationMessages = validationErrors.map((error: ValidationError): ApplicationMessage => ({\r\n messageType: \"Error Summary\",\r\n messageGroup: error.group,\r\n messageTitle: error.message,\r\n message: \"\" + error.message + \"\"\r\n }));\r\n\r\n if (!paymentModalIsOpen) {\r\n this.events.raise(this.eventKeys.showApplicationMessage, { messages: applicationMessages });\r\n }\r\n\r\n this.gtmHandler.pushEvent({\r\n 'dimension65': $.map(applicationMessages, i => i.messageTitle).join('|')\r\n }, 'validation.messages');\r\n\r\n this.handleError(false);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private getBookingRequest() {\r\n\r\n let isAndroid = this.Utilities.isAndroidWebView();\r\n let isIos = this.Utilities.isIosWebView();\r\n let isInCheckinFlow = this.Utilities.isInCheckInFlow();\r\n\r\n let data: BookingRequest = {\r\n bookingPathStepId: this.bookingPathStepId,\r\n isSearchResults: this.isSearchResults,\r\n acceptsNewFares: this.acceptsNewFares,\r\n booking: {\r\n isAndroidBooking: isAndroid,\r\n isDuplicateBookingAccepted: this.isDuplicateBookingAccepted,\r\n bookingDeviceInfo: {\r\n userAgent: navigator.userAgent,\r\n height: window.screen.height,\r\n width: window.screen.width\r\n },\r\n isIosBooking: isIos,\r\n address: null,\r\n paymentDetails: null,\r\n bookingContact: null,\r\n customerPreference: null,\r\n emailAddress: null,\r\n isTermsAccepted: null,\r\n myJet2Account: null,\r\n phoneNumbers: null,\r\n reasonForTravel: null\r\n },\r\n sendHybridAppBoardingPasses: this.sendHybridAppBoardingPasses,\r\n hybridIdentifier: this.hybridIdentifier,\r\n inCheckInFlow: isInCheckinFlow,\r\n subSalesChannel: this.subSalesChannel\r\n };\r\n\r\n return data;\r\n }\r\n\r\n private handleError(showErrorMessage: boolean): void {\r\n if (showErrorMessage) {\r\n if (this.paymentDetails.paymentModalEnabled) {\r\n let message = this.paymentDetails.errorMessages[this.isMmb ? \"ERRPAYFULFILLMMB\" : \"ERRPAYFULFILLMODAL\"];\r\n this.openPaymentModal();\r\n $(\"#payment-modal-error-message p\").html(message);\r\n $(\"#payment-modal-error-message\").show();\r\n this.gtmHandler.pushEvent({\r\n 'dimension65': message\r\n }, 'validation.messages');\r\n this.gtmHandler.pushEvent({\r\n 'action': 'declined',\r\n \"label\": this.threeDS2ProviderId\r\n }, 'payment_authorisation_status');\r\n }\r\n else {\r\n let message = this.paymentDetails.errorMessages[this.isMmb ? \"ERRPAYFULFILLMMB\" : \"ERRPAYFULFILL\"];\r\n this.events.raise(this.eventKeys.showApplicationMessage, {\r\n Messages: [{ 'MessageTitle': '', 'Message': message, 'MessageType': 'Error' }]\r\n });\r\n this.gtmHandler.pushEvent({\r\n 'dimension65': message\r\n }, 'validation.messages');\r\n this.gtmHandler.pushEvent({\r\n 'action': 'declined',\r\n \"label\": this.threeDS2ProviderId\r\n }, 'payment_authorisation_status');\r\n }\r\n }\r\n $(\"html,body\").scrollTop(0);\r\n this.setNavigateButtonLoading(false);\r\n this.events.raise(this.eventKeys.spinnerHide);\r\n }\r\n\r\n private disposeChallengeModal(): void {\r\n this.modalManager.hideModal({ key: this.checkoutService.challengeModal });\r\n }\r\n\r\n private timeoutChallengeModal(): void {\r\n let logData = JSON.stringify({\r\n correlationId: this.bookingData.correlationId,\r\n });\r\n this.serverLogger.log(`102: 3D Secure Challenge window timed out: ${logData}`);\r\n this.log.debug(`102: 3D Secure Challenge window timed out: ${logData}`);\r\n this.disposeChallengeModal();\r\n this.gtmHandler.pushEvent({ 'dimension64': '3D Secure timeout true' }, 'session.timeout');\r\n this.handleError(true);\r\n }\r\n\r\n private timeoutDdc(): void {\r\n let logData = JSON.stringify({\r\n correlationId: this.bookingData.correlationId,\r\n });\r\n this.hasTimedOut = true;\r\n this.serverLogger.log(`103: DDC timed out: ${logData}`);\r\n this.log.debug(`103: DDC timed out: ${logData}`);\r\n this.handleError(true);\r\n }\r\n}\r\nexport = new CheckoutNavigator;","class ApplicationMessage {\r\n public message: string;\r\n public messageGroup: string;\r\n public messageTitle: string;\r\n public messageType: string;\r\n}","class BookingContact {\r\n public title: string;\r\n public firstName: string;\r\n public lastName: string;\r\n}","class BookingDataPolicyPassengerResult {\r\n public PassengerId: number;\r\n public FullName: string;\r\n public Age: number;\r\n}","class BookingDeviceInfo {\r\n userAgent: string;\r\n height: number;\r\n width: number;\r\n}\r\n","class BookingModel {\r\n public isDuplicateBookingAccepted: boolean;\r\n public isAndroidBooking: boolean;\r\n public isIosBooking: boolean;\r\n public bookingDeviceInfo: BookingDeviceInfo;\r\n public emailAddress: string;\r\n public myJet2Account: MyJet2Account;\r\n public reasonForTravel: number;\r\n public isTermsAccepted: boolean;\r\n public paymentDetails: PaymentDetails;\r\n public address: Address;\r\n public bookingContact: BookingContact;\r\n public phoneNumbers: Array;\r\n public customerPreference: CustomerPreference;\r\n}\r\n","class CustomerPreference {\r\n public isPreselected: boolean;\r\n public question: string;\r\n public cb: boolean | null;\r\n public isSelected: boolean;\r\n public page: string;\r\n public optIn: boolean | null;\r\n public hidden: boolean;\r\n}","class DdcEvent {\r\n public origin: string;\r\n public data: string;\r\n}","class DdcResponse {\r\n public MessageType: string;\r\n public SessionId : string;\r\n public Status: boolean;\r\n}","class LogRequest {\r\n public message: string;\r\n}","class LogResult {\r\n success: boolean\r\n}","class MakePayment {\r\n public correlationId: string;\r\n public totalAmount: number;\r\n public currencyCode: string;\r\n public paymentType: string;\r\n public cardHolder: string;\r\n public cardNumber: string;\r\n public expiryMonth: number;\r\n public expiryYear: number;\r\n public cvv: number;\r\n public bin: string;\r\n public ddcReferenceId: string;\r\n public returnUrl: string;\r\n public subSalesChannel: string;\r\n}","class MyJet2Account {\r\n public password: string;\r\n}","class PaymentDetails {\r\n public paymentMethod: string;\r\n public cardTypeId: number;\r\n public payerId: string;\r\n public token: string;\r\n public nameOnCard: string;\r\n public expiryMonth: number;\r\n public expiryYear: number;\r\n public bin: string;\r\n}","class PhoneNumber {\r\n public number: string;\r\n public countryCode: string;\r\n public sendText: boolean;\r\n public type: string;\r\n}","class PreAuthError {\r\n public errorType: string;\r\n public allowRetry: boolean;\r\n}","class PreAuthInitError {\r\n public message: string;\r\n}","class PreAuthInitRequest {\r\n public currency: string;\r\n public amount: number;\r\n public cardType: string;\r\n public callingSystem: {\r\n system: string;\r\n };\r\n public salesChannel: string;\r\n public reference: string;\r\n public pan: string;\r\n public subSalesChannel: string;\r\n public expiryMonth: number;\r\n public expiryYear: number;\r\n}","class PreAuthInitResponse {\r\n public preAuthoriseInitialiseHtml: string;\r\n public cardinalCommerceUrl: string;\r\n public threeDSecureTwoEnabled: boolean;\r\n public providerId: string;\r\n}","class PreAuthPaymentDetails {\r\n public salesChannel: string;\r\n public subSalesChannel: string;\r\n public reference: string;\r\n public paymentAmount: {\r\n value: number;\r\n currencyCode: string;\r\n };\r\n public callingSystem: {\r\n system: \"Flights\";\r\n systemIdentifier: string;\r\n };\r\n public card: {\r\n securityCode: number;\r\n issueNumber: \"\";\r\n holderName: string;\r\n number: string;\r\n type: string;\r\n expiryDate: {\r\n month: number;\r\n year: number;\r\n };\r\n };\r\n public ddcReferenceId: string;\r\n public returnUrl: string;\r\n public currencyCode: string;\r\n public consumerAuthenticationValues: \r\n {\r\n signedPares: string \r\n };\r\n}","class PreAuthResponse {\r\n public challengeHtml: string;\r\n}","class ValidationError {\r\n group: string;\r\n inputName: string;\r\n message: string;\r\n priority: number;\r\n}","class ValidationResult {\r\n pageIsValid: boolean = true;\r\n validationErrors: Array = [];\r\n highestFieldPriority: number = 1000;\r\n lowestFieldPriority: number = 1;\r\n\r\n calculateGroupPriority(groupNumber: number): number {\r\n var defaultPriority: number = 20000;\r\n return defaultPriority - (this.highestFieldPriority * groupNumber);\r\n }\r\n\r\n calculateFieldPriority(groupNumber: number, fieldPriority: number): number {\r\n return this.calculateGroupPriority(groupNumber) + fieldPriority;\r\n }\r\n}"]}