{"version":3,"sources":["components/Installments/index.js","components/PayWith/FundingInstrumentList/hooks.js","components/ShipTo/Loading/index.js","components/ShipTo/Title/styles.css","components/ShipTo/Loading/styles.css","components/Notifications/OpenBankingNotification/index.js","components/Notifications/OpenBankingNotification/query.gql.js","components/Notifications/DeclineNotification/index.js","components/Notifications/DeclineNotification/query.gql.js","components/Rewards/PayWithRewards/index.js","components/Rewards/query.gql.js","components/Rewards/RewardsInterstitial/index.js","components/Installments/PayInInstallments/index.js","components/Installments/query.gql.js","components/Installments/SelectInstallmentsInterstitial/index.js","components/Installments/SelectInstallmentsInterstitial/styles.css","components/MerchantLogo/styles.css","components/OTPConfirmation/queries.gql.js","components/PersonalizedBanner/styles.css","components/WPSDonePage/lib/WPSDonePageBnplHelper.js","components/WPSDonePage/lib/utils.js","components/WPSDonePage/query.gql.js","components/WPSDonePage/hooks.js","components/RemittanceDisclosure/query.gql.js","components/RemittanceDisclosure/hooks.js","components/ThreeDSTwoConfirmation/index.js","components/ShipTo/AddShipping/index.js","shared/components/Divider/styles.css","components/PoliciesLink/index.js","components/PoliciesLink/styles.css","components/RemittanceDisclosure/index.js","components/MerchantDescription/styles.css","components/MerchantLogo/index.js","components/MerchantLogo/query.gql.js","components/MerchantLogo/Loading.js","components/OpenBanking/index.js","components/OTPConfirmation/index.js","components/PaymentOptions/index.js","components/PaymentOptions/Loading.js","components/PayWith/Loading/styles.css","components/PayWithSingle/index.js","components/PersonalizedBanner/index.js","components/PersonalizedBanner/Loading.js","components/PolicyAgreement/index.js","components/RedirectToCredit/index.js","components/RedirectToCredit/query.gql.js","components/ReturnFromCredit/index.js","components/ReviewPageAlert/index.js","components/Sca/index.js","components/SelectFi/index.js","components/ShipTo/SelectShippingInterstitial/index.js","components/SepaConfirmation/index.js","components/SharedCard/SharedCardConsent/index.js","components/SharedCard/SharedCardWait/index.js","components/SplitTender/SplitTenderBackup/index.js","components/SplitTender/SplitTenderErrors/styles.css","components/SplitTender/SplitTenderGate/index.js","components/WPSDonePage/index.js","components/PayLater/LearnMoreInterstitial/index.js","components/InventorySoldOut/index.js","components/InventorySoldOut/query.gql.js","components/ShippingAndTax/ShippingAndTaxInterstitial/index.js","experiences/Hermione/styles.css","components/SplitTender/SplitTenderContinue/index.js","shared/utilities/arrayToObject.js","components/Sca/query.gql.js","components/Sca/hooks.js","components/MerchantDescription/query.gql.js","components/MerchantDescription/index.js","components/SplitTender/SplitTenderErrors/index.js","experiences/Hermione/index.js","lib/contextProvider.js","components/PopupLink/popup.js","components/PopupLink/index.js","lib/userAction.js","components/SplitTender/logging.js","components/PayWith/Loading/index.js","components/ShipTo/index.js","shared/components/Divider/index.js","components/Sca/constants.js","components/Rewards/index.js","components/PayLater/Multi/utils.js","components/ShipTo/Title/index.js","components/Notifications/index.js","components/SplitTender/query.gql.js","components/PayLater/Multi/hooks.js"],"names":["getVisibilityGroupedFundingOptions","fundingOptions","initialVisibleCount","isShowMoreEnabled","length","slice","useFundingInstruments","fundingInstruments","useState","initialFundingInstruments","setInitialFundingInstruments","extraFundingInstruments","setExtraFundingInstruments","useEffect","initialVisibleFundingOptions","initiallyHiddenFundingOptions","Loading","clipPathId","uniqueStr","gradientId","className","styles","loading","viewBox","version","preserveAspectRatio","svg","clipPath","x","y","width","height","style","fill","id","rx","ry","offset","stopColor","attributeName","values","dur","repeatCount","module","exports","OpenBankingNotification","Feature","queries","query","OPEN_BANKING_NOTIFICATION_QUERY","variables","threeDsExperienceVars","token","getToken","fetchPolicy","shouldLoadFeatureComponent","features","contingencies","isOpenBankingCancel","params","action","hasBlackListFI","OPEN_BANKING","data","blackListedFI","shouldShowComponent","FETCH_BANK_BALANCE_TIME_OUT","ADD_FI","visible","hideDeclineNotification","subscribeTo","definitions","names","filter","definition","kind","name","value","FundingOptionFragment","PaymentContingenciesFragment","DeclineNotification","DECLINED_NOTIFICATION_QUERY","allQueryData","declinedInstruments","checkoutSession","DeclinedInstrumentFragment","LazyPayWithRewards","lazyComponent","RewardsItem","props","REWARDS_DISPLAY","useFeature","useQuery","RewardsQuery","usePayContext","payState","selectedFundingOptionId","useSplitBalance","rewardSelected","fiId","rewards","getFundingInstrumentFromCheckoutSession","matchedRewards","relatedCardId","hasIssuer","issuer","resetRewards","experiment","resolvedTreatment","isLoading","RewardsFragment","RewardsInterstitial","interstitial","interstitialOptions","type","InstallmentsDisplay","featurePayload","fetchPropsFromFeaturePayload","installments","Array","isArray","installmentsQuery","SelectInstallmentsInterstitial","interstitialInnerContainerStyleOverrides","selectInstallmentInterstitialInnerContainer","OTP_CONFIRMATION_QUERY","OTP_LOCALEMETADATA_QUERY","mapBnplDetailsProps","selectedFundingOption","cart","fundingInstrument","isCreditWithAdditionalData","isGermanyPayLater","includes","getCountry","creditFiDetails","getCreditFIDetails","creditFields","paymentSchedule","getInstallmentNodes","creditOffer","creditPayLater","installmentsSchedule","installmentLabel","uiElements","creditOnlyFI","headlineText","repaymentsFIName","repaymentFILastDigits","lastDigits","gplAmountDueToday","gplAmountDueTodayDetails","currencyCode","amounts","total","creditFI","getContent","label","firstPaymentWithCurrencyCode","currencyFormatSymbolISOCurrency","fundingSource","BULLETS","paidToday","scheduleLabel","returnToMerchantViaPost","url","postbackData","form","document","createElement","method","Object","keys","forEach","key","input","appendChild","window","body","submit","autoReturnMessageProps","merchant","onReturnToMerchant","paymentCompletedContent","redirectMessage","merchantName","clickHereLink","href","onClick","data-testid","getFormattedCurrency","currencyFormat","replacementRegex","RegExp","replace","getPaidFrom","headerProps","totalAmountObj","details","toMerchant","totalWithCurrencyCode","youPaid","detailsButtonCallback","logger","fpti","DONE_PAGE_PAYLOAD","flow","itemDetailsProps","handlingFeeAmount","handlingFee","insuranceAmount","insurance","shippingAmount","shipping","subtotalAmount","subtotal","taxAmount","tax","totalAmount","items","map","item","number","sku","price","unitPrice","quantity","options","itemOptionSelections","select","description","option","numberLabel","receipt","handling","getFIName","purchaseDetailsProps","completedPaymentInfo","shippingAddresses","buyer","shippedToInfo","fullAddress","formattedAddress","fullName","merchantDetails","messengerContent","bnplPaymentDetails","paidWith","disclaimer","softDescriptor","purchaseDetails","receiptLabel","receiptNumber","transactionId","emailLabel","email","stringValue","shippedTo","WPS_DONE_PAGE_QUERY","ShippingAddressesFragment","useWPSDonePage","shipToData","selectedAddressId","userSelectedAddressId","selectedShippingAddress","address","addressId","returnMethod","rm","autoReturnToMerchant","preferences","enablePaymentDataTransfer","returnUrl","parseMerchantPreferences","returnToMerchant","useCallback","cal","info","urlParams","clean","st","payment_status","tx","txn_id","cc","mc_currency","amt","mc_gross","cm","custom","redirectUrl","buildURL","redirect","isRegulatoryReview","pending_reason","autoReturnEnabled","Boolean","donePageProps","useMemo","header","itemDetails","regulatoryReviewContent","reduce","contentStr","tag","trim","autoReturnMessage","buttonLabel","buttonCallback","isPaymentCompleted","REMITTANCE_DISCLOSURE_QUERY","useRemittanceDisclosure","fundingPlan","allPlans","getMerchantName","amountInPayerCurrency","currencyConversion","convertedAmount","getAmountInPayerCurrency","amountInInvCurrency","getAmountInInvCurrency","remittanceConversionInfo","remittanceNonConversionInfo","amount","showRemittanceDisclosure","flags","getShowRemittanceDisclosure","remittanceContent","ThreeDSTwoConfirmation","onBeforeCloseFn","updateFeature","status","CHECKOUT_BUTTON_STATES","INITIAL","inContingencyFlow","LoadingComponent","InterstitialLoading","memoize","enabled","isEnabledWithAddress","canHandleAddressContingencies","NEED_SHIPPING_ADDRESS","NEED_PRIMARY_ADDRESS","shouldAutoDisplayComponent","featureId","isRemembered","handlePostRiskyLogin","hasShippingParam","needShippingAddressContingency","handleContingency","redirectToRiskyLogin","reason","destination","extraParams","lite","fromLite","ulClientKey","ulClientRedirect","AddShipping","showCloseBtnFunc","headerTitleFunc","get","getIsRememberedAuthState","isDestination","addShipping","country","locale","getLocale","link","toLowerCase","PoliciesLink","policyLink","policies","paypalPoliciesLink","RemittanceDisclosure","RemittanceDisclosureContainer","MerchantLogo","MerchantLogoContainer","MERCHANT_LOGO_QUERY","context","skipFallback","MerchantLogoLoading","container","loadingImage","OpenBanking","then","updateContingency","clear","BANK_LOGIN_CREDENTIALS_INVALID","paymentContingencies","needConsentForBankAccountInfoRetrieval","encryptedId","CHECKOUT_BUTTON","find","PENDING","contingencyMatchesAnFi","isIframe","fallback","INITIATE_OTP_CONTINGENCY","fundingInstrumentId","feature","OTPConfirmation","isNewCard","card","expirationDate","securityCode","phone","countryCode","StackedPaymentOptions","TabbedPaymentOptions","PaymentOptionsContainer","useEligibilityContext","showTabs","usePayLaterContext","payLaterState","isReturningFromCredit","shouldShowPayWithSingle","payWithQuery","planningBatch","errorPolicy","TabsLoading","PayWithSingle","PersonalizedBannerContainer","PersonalizedBannerLoader","Container","cx","cy","r","PolicyAgreement","RedirectToCredit","RedirectToCreditContainer","econsentVisible","previousEconsentVisible","usePrevious","userData","ECONSENT_QUERY","checkoutSessionData","CREDIT_SECOND_BUTTON_QUERY","creditPpcOffersGqlParams","newUser","getCredit","isEconsentInitiallyShown","user","eConsent","isEconsentTriggeredRefresh","shouldMountComponent","isCreditSecondButton","isLoadedData","isRedirectWaitForEconsent","waitingOnEconsent","setWaitingOnEconsent","CreditOfferFragment","ReturnFromCredit","REVIEW_PAGE_ALERT_QUERY","ReviewPageAlert","ReviewPageAlertContainer","featureData","needCreditCardContingency","useContingency","needCreditCardOrBankAccountContingency","expiredCreditCardContingency","isScaRegion","getIsScaRegion","isPPCEligible","isEligibleForCreditSecondButton","getIsUserDeviceTokenImplicitLogin","message","ReviewBeforeLogin","TrustedBeneficiaryOptIn","ScaContainer","useSca","exemptReason","reviewBeforeLoginEligible","reviewBeforeLoginProps","trustedBeneficiaryEligible","trustedBeneficiaryProps","EXEMPTIONS","SCA_CONTINGENCY_PAYLOAD","areCookiesDisabled","TRUSTED_BENEFICIARY_FLOW","cookieDisabledTraffic","TRUSTED_BENEFICIARY_PAYLOAD","isWebView","navigator","userAgent","webview","REVIEW_BEFORE_LOGIN_FLOW","SELECT_FI_QUERY","hasAttribution","some","fi","hasSplitBalance","getSplitBalancePlan","getPreferredFi","landingPage","LANDING_PAGE","REVIEW","CHOICE","SelectFi","showCloseBtn","SelectShippingInterstitial","SelectShippingInterstitialContainer","shipToQuery","SepaMandateAcceptanceNeededFragment","SepaConfirmation","bankData","contingency","hasContingency","SHARED_INSTRUMENT_CONSENT_REQUIRED","hasFormData","ADD_CARD","isObject","SharedCardConsent","shouldLoadFeature","ADD_CARD_PAYLOAD","ORIGINAL_USER_CHECK_PENDING","SharedCardWait","NEED_CREDIT_CARD","from","SplitTenderBackup","SplitTenderGate","SPLIT_TENDER_GATE_QUERY","SplitTenderEntry","featureSplitTenderGate","featureTabs","showSplitTender","experienceLogged","setExperienceLogged","React","isGateOpen","logGateLoaded","logGateOpen","experience","logExperience","WPSDonePage","WPSDonePageContainer","LearnMoreInterstitial","InventorySoldOut","SoldOutPage","showPage","setShowPage","setMerchantName","buttonUrl","setButtonUrl","soldOutItem","setSoldOutItem","SOLD_OUT_PAGE_QUERY","soldOutPageData","showSoldoutPage","soldoutUrl","soldOutUrl","SelectShippingOptionInterstitial","Interstitial","SelectShippingOptionInterstitialContainer","SplitTenderContinue","keyFn","splitFundingOptions","selectedValues","incentiveValues","preferredId","allSplitValues","splitFundingOptionsObject","object","logSplitContinueLoaded","showSplitExperience","showSplitContinue","selectedSplitFundingInstruments","splitOptionsEligibleForBackup","isEligibleForPrimaryInstrument","selectedBackupFundingInstrument","isBackupPreferred","sort","fiA","fiB","logSelectInputProcess","isSplitReady","SCA_CONTINGENCY_QUERY","tbExperiment","secureCustomerAuthenticationContext","cancelUrl","isTrustedBeneficiary","logo","merchantId","contextId","strongCustomerAuthenticationRequired","scaStatus","COMPLETE","SCA_CONTEXT_STATUS","IN_PROGRESS","MERCHANT_DESCRIPTION_QUERY","MerchantDescription","isBillingAgreementWithPurchase","isBillingAgreement","checkoutSessionType","merchantDescription","merchantMsgHeader","title","headingStyles","text","Divider","SplitTenderErrors","errorsOccurrenceCount","showSplitTenderError","messageId","userCanSplit","alert","Providers","Child","acc","Provider","composeProviders","EligibilityProvider","PayLaterProvider","PayProvider","AppStyles","pageWrapper","Header","dividerClass","CartDropdown","role","DolphinBanner","PersonalizedBanner","Notifications","notifications","DonationShareAddress","ShipTo","CipDisclaimer","PaymentOptions","CreditOfferAsFi","CreditOfferAsFiDE","CreditSingleFIDisplay","BillingAgreement","CreditOffer","placement","GiveAtCheckout","CheckoutButtonContainer","CancelLink","cancelLink","Footer","Spinner","selectedFI","Sca","Econsent","AddFI","AddNormalizedAddress","CryptoTermsInterstitial","CurrencyConversion","CvvConfirmation","ThreeDSConfirmation","DolphinInterstitial","CreditApplyPortable","Rewards","RestrictedAccount","ShippingAndTaxInterstitial","popup","config","location","scrollbars","resizable","toolbar","menubar","left","top","outerWidth","Math","round","screenX","outerHeight","screenY","screen","err","stack","error","JSON","stringify","join","getWindowFeatures","GENERIC_PAYLOAD","stateName","popup_link","open","PopupLink","tabIndex","e","preventDefault","isFunction","CHECKOUT_USER_ACTION_FLOWS","getCheckoutUserActionFlow","checkoutSessionUserAction","getUserAction","getIsPayNowUserActionFlow","getIsContinueUserActionFlow","prefix","loggit","process","transition","splitFiList","backupSelected","remaining","transitionName","toUpperCase","split_fi_list","split_backup_selected","event","payload","toLocaleLowerCase","TRANSITION_PAYLOAD","to","_logger","amountEntry","entryType","entry_type","fi_id","gateLoaded","gateOpen","isOpen","requestSplitTenderOptions","responseSplitTenderOptions","isPreferred","availableAmount","mustUseFullAmount","canEditAmount","fundingInstrumentType","canSplitWith","triggerLoaded","selectInputLoaded","loaded","splitContinueLoaded","selectInputProcess","backup_logic","backupViewShown","backupViewCompleted","payWithViewShown","payWithChangeClicked","payWithChangeBackup","approvePaymentPrepare","isPrimaryInstrument","approvePaymentProcess","buyerCountry","currency_code","buyer_country","approvePaymentError","ERROR_PAYLOAD","code","PayWithLoader","ShippingCartAmountFragment","children","dividerClasses","Children","child","isValidElement","cloneElement","Content","rest","contentClasses","contentContainer","as","LOW_VALUE_TRANSACTION","BUYER_NOT_PRESENT","REFERENCE_TRANSACTION","TRUSTED_BENEFICIARY","init","success","close","prepare","render","optedIn","noThanks","groupOffersByMultiInstallment","offers","sortedOffers","offer","content","MultiOffer","concat","isMultiOfferFundingInstrument","isMultiOffer","isPayLaterDE","handleMultiOfferContinueButtonAction","payLaterContext","isApproved","updateFeatures","isGPLFi","processGplOffer","offerFinancingCodesToCSV","FinancingCode","offerDetailsForFPTI","FIText2","OfferText1","OfferText2","allOfferDetailsToJsonString","offerDetails","i","Title","isOpenBankingNotificationShown","eligible","isDeclineNotificationShown","isNotificationShown","notificationClasses","SPLIT_TENDER_CART_QUERY","SPLIT_TENDER_OPTIONS_QUERY","SplitFundingOptionsFragment","SPLIT_TENDER_APPROVE_MUTATION","useGplMultiOfferInstallments","hasGplInstallments","isDisclaimerRequired","useGplButtonTextOnFinalRyi","creditFIOption","getLowestOffer","a","b","MonthlyPayment","value1","parse","value2","parseInt"],"mappings":"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","file":"js/experiences/Hermione~21833f8f.c92ffb5a.js","sourcesContent":["export * from './PayInInstallments';\nexport * from './SelectInstallmentsInterstitial';\n","import { useEffect, useState } from 'react';\n\nexport const INITIAL_VISIBLE_FUNDING_OPTIONS_COUNT = 3;\n\nexport const getVisibilityGroupedFundingOptions = ({ fundingOptions = [], isShowMoreEnabled }) => {\n const initialVisibleCount = isShowMoreEnabled\n ? INITIAL_VISIBLE_FUNDING_OPTIONS_COUNT\n : fundingOptions?.length;\n\n const initialVisibleFundingOptions = fundingOptions?.slice(0, initialVisibleCount);\n const initiallyHiddenFundingOptions = fundingOptions?.slice(\n initialVisibleCount,\n fundingOptions?.length\n );\n\n return [initialVisibleFundingOptions, initiallyHiddenFundingOptions];\n};\n\nexport const useFundingInstruments = ({ fundingInstruments, isShowMoreEnabled }) => {\n const [initialFundingInstruments, setInitialFundingInstruments] = useState(fundingInstruments);\n const [extraFundingInstruments, setExtraFundingInstruments] = useState([]);\n\n useEffect(() => {\n // FIXME: these are funding options, we need to update the terminology of this function to correctly\n // represent that.\n const [\n initialVisibleFundingOptions,\n initiallyHiddenFundingOptions,\n ] = getVisibilityGroupedFundingOptions({\n fundingOptions: fundingInstruments,\n isShowMoreEnabled,\n });\n\n setInitialFundingInstruments(initialVisibleFundingOptions);\n setExtraFundingInstruments(initiallyHiddenFundingOptions);\n }, [fundingInstruments, isShowMoreEnabled]);\n\n return [initialFundingInstruments, extraFundingInstruments];\n};\n","import React from 'react';\nimport { uniqueStr } from '@checkout/react-components';\nimport LoadingContainer from '@/shared/components/LoadingContainer';\nimport Title from '../Title';\nimport styles from './styles.css';\n\nexport const Loading = () => {\n const clipPathId = uniqueStr();\n const gradientId = uniqueStr();\n\n return (\n \n \n <svg\n viewBox=\"0 0 300 75\"\n version=\"1.1\"\n preserveAspectRatio=\"xMinYMin meet\"\n className={styles.svg}\n >\n <rect\n clipPath={`url(#${clipPathId})`}\n x=\"0\"\n y=\"0\"\n width=\"300\"\n height=\"75\"\n style={{ fill: `url(#${gradientId})` }}\n />\n <defs>\n <clipPath id={clipPathId}>\n <rect x=\"0\" y=\"2\" rx=\"4\" ry=\"4\" width=\"200\" height=\"13\" />\n <rect x=\"0\" y=\"23\" rx=\"4\" ry=\"4\" width=\"300\" height=\"10\" />\n <rect x=\"0\" y=\"37\" rx=\"4\" ry=\"4\" width=\"250\" height=\"10\" />\n </clipPath>\n <linearGradient id={gradientId}>\n <stop offset=\"0.62503\" stopColor=\"#f3f3f3\">\n <animate attributeName=\"offset\" values=\"-2; 1\" dur=\"1.5s\" repeatCount=\"indefinite\" />\n </stop>\n <stop offset=\"1.12503\" stopColor=\"#ecebeb\">\n <animate\n attributeName=\"offset\"\n values=\"-1.5; 1.5\"\n dur=\"1.5s\"\n repeatCount=\"indefinite\"\n />\n </stop>\n <stop offset=\"1.62503\" stopColor=\"#f3f3f3\">\n <animate attributeName=\"offset\" values=\"-1; 2\" dur=\"1.5s\" repeatCount=\"indefinite\" />\n </stop>\n </linearGradient>\n </defs>\n </svg>\n </LoadingContainer>\n );\n};\n","// extracted by extract-css-chunks-webpack-plugin\nmodule.exports = {\"title\":\"Title_title_19nMY\"};","// extracted by extract-css-chunks-webpack-plugin\nmodule.exports = {\"loading\":\"Loading_loading_2h9FE\",\"svg\":\"Loading_svg_2Tace\"};","import { getToken } from '@paypalcorp/c3-shared-globals';\nimport Feature from '@/components/Feature';\nimport { OPEN_BANKING_NOTIFICATION_QUERY } from './query.gql';\nimport { params } from '@paypalcorp/c3-util-browser';\nimport { experiences, threeDsExperienceVars } from '@paypalcorp/c3-util-threed-ds';\n\nconst shouldLoadFeatureComponent = ({ features, contingencies }) => {\n const { action } = params();\n const isOpenBankingCancel = action === 'cancel';\n const hasBlackListFI = features.OPEN_BANKING.data?.blackListedFI;\n\n const shouldShowComponent =\n isOpenBankingCancel || hasBlackListFI || contingencies?.FETCH_BANK_BALANCE_TIME_OUT;\n\n if (\n (hasBlackListFI || isOpenBankingCancel) &&\n features.ADD_FI.visible &&\n !features.OPEN_BANKING.data?.hideDeclineNotification\n ) {\n return false;\n }\n return shouldShowComponent;\n};\n\n/* When connecting to MNW or FI to get consent or real time balance respectively,\n * we encounter errors in the form of timeout and contingencies.\n * Openbanking error notification is used to display those errors\n */\nconst OpenBankingNotification = Feature({\n id: 'OPEN_BANKING_NOTIFICATION',\n queries: [\n {\n query: OPEN_BANKING_NOTIFICATION_QUERY,\n variables: threeDsExperienceVars({ token: getToken() }),\n fetchPolicy: 'cache-only',\n },\n ],\n shouldLoadFeatureComponent,\n subscribeTo: ['ADD_FI', 'OPEN_BANKING'],\n contingencies: ['FETCH_BANK_BALANCE_TIME_OUT'],\n})(() => import('./OpenBankingNotification'));\n\nexport default OpenBankingNotification;\n","import gql from 'graphql-tag';\nimport {\n PaymentContingenciesFragment,\n FundingOptionFragment,\n} from '@paypalcorp/c3-graphql-fragments';\n\nexport const OPEN_BANKING_NOTIFICATION_QUERY = gql`\n ${FundingOptionFragment}\n ${PaymentContingenciesFragment}\n query DeclineNotificationQuery($experiences: [ThreeDSPaymentExperience], $token: String!) {\n checkoutSession(token: $token) {\n fundingOptions(returnAllPlans: true, groupSourcesOnType: INCENTIVE) {\n ...FundingOptionFragment\n }\n paymentContingencies {\n ...PaymentContingenciesFragment\n threeDomainSecure(experiences: $experiences) {\n ...ThreeDomainSecureFields\n }\n }\n }\n }\n`;\n","import { getToken } from '@paypalcorp/c3-shared-globals';\nimport Feature from '@/components/Feature';\nimport { DECLINED_NOTIFICATION_QUERY } from './query.gql';\n\n/**\n * Decline Notification should auto display itself if one of two cases happens:\n * (1) If it is coming back from MoneyNodeweb and the user has cancelled\n * (2) If there is more than one declined instrument\n */\nconst shouldLoadFeatureComponent = ({ allQueryData }) => {\n const declinedInstruments = allQueryData?.[0]?.data?.checkoutSession?.declinedInstruments;\n return declinedInstruments?.length > 0;\n};\n\nconst DeclineNotification = Feature({\n id: 'DECLINE_NOTIFICATION_NEW',\n queries: [\n {\n query: DECLINED_NOTIFICATION_QUERY,\n variables: { token: getToken() },\n fetchPolicy: 'cache-only',\n },\n ],\n shouldLoadFeatureComponent,\n subscribeTo: [\n 'ADD_FI',\n 'BANK_AS_DEBIT_DISALLOWED',\n 'CBT_DECLINE_NOTIFICATION',\n 'REMOVE_RETRY_BUTTON',\n ],\n})(() => import('./DeclineNotification'));\n\nexport default DeclineNotification;\n","import gql from 'graphql-tag';\nimport { DeclinedInstrumentFragment } from '@paypalcorp/c3-graphql-fragments';\n\nexport const DECLINED_NOTIFICATION_QUERY = gql`\n ${DeclinedInstrumentFragment}\n query DeclineNotificationQuery($token: String!) {\n checkoutSession(token: $token) {\n userAction\n declinedInstruments {\n ...DeclinedInstrumentFragment\n }\n }\n }\n`;\n","import React from 'react';\nimport { RewardsQuery } from '../query.gql';\nimport { getFundingInstrumentFromCheckoutSession, resetRewards } from '../utilities';\nimport { usePayContext } from '@/components/ContextProviders';\nimport { lazyComponent } from '@/lib/lazyLoad';\nimport { useQuery } from '@apollo/react-hooks';\nimport { useFeature } from '@/components/Feature/hooks';\n\nconst LazyPayWithRewards = lazyComponent(() => import('./PayWithRewards'), {\n id: 'REWARDS_DISPLAY',\n loading: () => <div></div>,\n});\n\nexport const RewardsItem = (props) => {\n const REWARDS_DISPLAY = useFeature('REWARDS_DISPLAY');\n const { loading, data } = useQuery(RewardsQuery.query, {\n variables: RewardsQuery.variables,\n fetchPolicy: RewardsQuery.fetchPolicy,\n });\n const payContext = usePayContext();\n const { selectedFundingOptionId, useSplitBalance } = payContext.payState;\n const rewardSelected = REWARDS_DISPLAY.data?.rewardSelected;\n const fiId = props?.fiId;\n const { rewards } = getFundingInstrumentFromCheckoutSession([{ data }], fiId) || {};\n const matchedRewards =\n rewards && rewardSelected === rewards.id && selectedFundingOptionId !== rewards.relatedCardId;\n const hasIssuer = rewards && rewards.issuer && !!rewards.issuer.name;\n\n // reset rewards to initial default state if split balance or current reward has been selected\n if ((useSplitBalance && rewardSelected) || matchedRewards) {\n resetRewards();\n }\n\n if (\n !(\n rewards &&\n hasIssuer &&\n !useSplitBalance &&\n REWARDS_DISPLAY.experiment.resolvedTreatment !== 'CONTROL'\n )\n ) {\n return null;\n }\n\n return (\n <LazyPayWithRewards\n isLoading={loading}\n REWARDS_DISPLAY={REWARDS_DISPLAY}\n {...props}\n allQueryData={[{ data }]}\n />\n );\n};\n","import gql from 'graphql-tag';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport { RewardsFragment } from '@paypalcorp/c3-graphql-fragments';\n\nexport { RewardsFragment } from '@paypalcorp/c3-graphql-fragments';\n\nexport const FI_REWARDS_QUERY = gql`\n ${RewardsFragment}\n query GetFIRewards($token: String!) {\n checkoutSession(token: $token) {\n cart {\n amounts {\n total {\n currencyValue\n currencyCode\n }\n }\n }\n fundingOptions(returnAllPlans: true, groupSourcesOnType: INCENTIVE) {\n id\n fundingInstrument {\n id\n lastDigits\n issuerProductDescription\n ...RewardsFragment\n }\n }\n }\n }\n`;\n\nexport const RewardsQuery = {\n query: FI_REWARDS_QUERY,\n variables: { token: getToken() },\n fetchPolicy: 'cache-only',\n};\n","import Feature from '@/components/Feature';\nimport { RewardsQuery } from '../query.gql';\n\n/**\n * Component interstitial triggered when a user wants to see info about the\n * reward or change amount to put towards their reward (if allowed).\n */\nexport const RewardsInterstitial = Feature({\n id: 'REWARDS_INTERSTITIAL',\n subscribeTo: ['REWARDS_DISPLAY'],\n interstitial: true,\n interstitialOptions: {\n type: 'tall',\n },\n queries: [RewardsQuery],\n})(() => import('./RewardsInterstitial'));\n","import Feature from '@/components/Feature';\nimport { installmentsQuery } from '@/components/Installments/query.gql';\nimport { fetchPropsFromFeaturePayload } from '@/components/Installments/utilities';\n\nconst shouldLoadFeatureComponent = (featurePayload) => {\n const props = fetchPropsFromFeaturePayload(featurePayload);\n\n if (!props) {\n return false;\n }\n\n const { installments } = props;\n\n if (!Array.isArray(installments) || installments.length < 1) {\n return false;\n }\n\n return true;\n};\n\n/**\n * This component exists under funding instrument and displays the available\n * or selected installment option(s)\n */\nexport const InstallmentsDisplay = Feature({\n id: 'INSTALLMENTS_DISPLAY',\n shouldLoadFeatureComponent,\n queries: [installmentsQuery],\n})(() => import('./PayInInstallments'));\n","import gql from 'graphql-tag';\nimport { FundingOptionFragment } from '@paypalcorp/c3-graphql-fragments';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\n\nexport const INSTALLMENTS_QUERY = gql`\n ${FundingOptionFragment}\n query InstallmentsQuery($token: String!) {\n checkoutSession(token: $token) {\n fundingOptions(returnAllPlans: true, groupSourcesOnType: INCENTIVE) {\n ...FundingOptionFragment\n }\n }\n }\n`;\n\nexport const installmentsQuery = {\n query: INSTALLMENTS_QUERY,\n variables: { token: getToken() },\n fetchPolicy: 'cache-only',\n};\n","import Feature from '@/components/Feature';\nimport { installmentsQuery } from '@/components/Installments/query.gql';\n\nimport styles from './styles.css';\n\n/**\n * Interstitial which shows a list of all the available installment\n * terms and their details\n */\nexport const SelectInstallmentsInterstitial = Feature({\n id: 'SELECT_INSTALLMENTS_INTERSTITIAL',\n subscribeTo: ['INSTALLMENTS_DISPLAY'],\n interstitial: true,\n interstitialOptions: {\n interstitialInnerContainerStyleOverrides: styles.selectInstallmentInterstitialInnerContainer,\n },\n queries: [installmentsQuery],\n})(() => import('./SelectInstallmentsInterstitial'));\n","// extracted by extract-css-chunks-webpack-plugin\nmodule.exports = {\"ppui-font-size-xl\":\"1.25rem\",\"ppuiFontSizeXl\":\"1.25rem\",\"ppui-font-weight-light\":\"300\",\"ppuiFontWeightLight\":\"300\",\"ppui-size-xs\":\"1.125rem\",\"ppuiSizeXs\":\"1.125rem\",\"selectInstallmentInterstitialInnerContainer\":\"SelectInstallmentsInterstitial_selectInstallmentInterstitialInnerContainer_17Rtm\",\"selectInstallmentHeader\":\"SelectInstallmentsInterstitial_selectInstallmentHeader_2jyX9\"};","// extracted by extract-css-chunks-webpack-plugin\nmodule.exports = {\"container\":\"MerchantLogo_container_2UFaV\",\"image\":\"MerchantLogo_image_pDzfb\",\"text\":\"MerchantLogo_text_2mWpM\",\"loading-image\":\"MerchantLogo_loading-image_3mdAa\",\"loadingImage\":\"MerchantLogo_loading-image_3mdAa\"};","import gql from 'graphql-tag';\n\nexport const OTP_CONFIRMATION_QUERY = gql`\n query OTP_CONFIRMATION_QUERY($token: String!) {\n checkoutSession(token: $token) {\n fundingOptions(returnAllPlans: true, groupSourcesOnType: INCENTIVE) {\n fundingInstrument {\n id\n }\n }\n }\n }\n`;\n\nexport const OTP_LOCALEMETADATA_QUERY = gql`\n query OTP_LOCALEMETADATA_QUERY($country: CountryCodes!, $language: CheckoutContentLanguageCode!) {\n localeMetadata {\n phone(countryCode: $country, languageCode: $language) {\n masks {\n mobile\n }\n }\n territories(countryCode: $country, languageCode: $language) {\n code\n internationalDialingCode\n }\n }\n }\n`;\n","// extracted by extract-css-chunks-webpack-plugin\nmodule.exports = {\"ppui-color-blue-100\":\"#f5fbfe\",\"ppuiColorBlue100\":\"#f5fbfe\",\"Container\":\"PersonalizedBanner_Container_3tR4U\",\"container\":\"PersonalizedBanner_Container_3tR4U\",\"BannerContent\":\"PersonalizedBanner_BannerContent_1xoQX\",\"bannerContent\":\"PersonalizedBanner_BannerContent_1xoQX\",\"LogoutButton\":\"PersonalizedBanner_LogoutButton_x13yJ\",\"logoutButton\":\"PersonalizedBanner_LogoutButton_x13yJ\"};","import getContent from '@/lib/content';\nimport { isCreditWithAdditionalData, getCreditFIDetails } from '@/lib/creditInstallmentsHelper';\nimport { gplAmountDueTodayDetails } from '@/lib/utils';\nimport getInstallmentNodes from '@/components/CreditSingleFIDisplay/Utils/CreditSingleFIScheduleHelper';\nimport { BULLETS } from '@/components/CreditSingleFIDisplay/GplFIDisplay/GplFIDisplayConstants';\nimport { getCountry } from '@paypalcorp/c3-shared-globals/src';\n\n/**\n * Returns object of props for rendering Payment with BNPL\n * @param {Object} selectedFundingOption\n * @param {Object} cart\n */\nexport const mapBnplDetailsProps = (selectedFundingOption, cart) => {\n const fundingInstrument = selectedFundingOption?.fundingInstrument;\n\n if (!fundingInstrument) {\n return null;\n }\n\n const { name, type } = fundingInstrument;\n\n // Not applicable if not paid with BNPL\n if (!isCreditWithAdditionalData(name, type)) {\n return null;\n }\n\n const isGermanyPayLater =\n fundingInstrument?.name?.includes('PAY_LATER_DE') && getCountry() === 'DE';\n const creditFiDetails = getCreditFIDetails(fundingInstrument?.creditFields);\n const paymentSchedule = !isGermanyPayLater\n ? getInstallmentNodes(\n fundingInstrument?.creditFields?.creditOffer?.creditPayLater?.installmentsSchedule,\n true\n )\n : false;\n const installmentLabel = isGermanyPayLater\n ? fundingInstrument?.creditFields?.creditOffer?.uiElements?.creditOnlyFI?.headlineText\n : null;\n const repaymentsFIName = creditFiDetails?.repaymentsFIName;\n const repaymentFILastDigits = creditFiDetails?.lastDigits;\n const gplAmountDueToday = gplAmountDueTodayDetails(fundingInstrument);\n\n // passing in default props to react-component\n // will then conditional render elements based on the returned props\n const props = {\n currencyCode: cart?.amounts?.total?.currencyCode,\n // This field should be changed later for a dynamic field to work for all countries\n installments: isGermanyPayLater \n ? fundingInstrument?.creditFields?.creditOffer?.uiElements?.creditFI?.headlineText \n : getContent('paymentOptions.gplProductName'),\n label: getContent('donePage.paidWith'),\n firstPaymentWithCurrencyCode: gplAmountDueToday?.currencyFormatSymbolISOCurrency,\n fundingSource:\n repaymentsFIName && repaymentFILastDigits\n ? `${repaymentsFIName} ${BULLETS}${repaymentFILastDigits}`\n : null,\n paidToday: getContent('donePage.paidToday'),\n paymentSchedule,\n scheduleLabel: !isGermanyPayLater ? getContent('gplFIDisplay.seeSchedule') : null,\n installmentLabel,\n };\n\n return props;\n};\n","import React from 'react';\nimport { DONE_PAGE_PAYLOAD } from '@paypalcorp/c3-util-logger';\nimport { logger } from '@paypalcorp/c3-util-logger';\nimport getContent from '@/lib/content';\nimport { params } from '@/lib/utils';\nimport { isCreditWithAdditionalData } from '@/lib/creditInstallmentsHelper';\nimport { mapBnplDetailsProps } from './WPSDonePageBnplHelper';\n\nexport const returnToMerchantViaPost = (url, postbackData) => {\n const form = document.createElement('form');\n\n form.method = 'POST';\n form.action = url;\n form.style = 'display:none;';\n\n Object.keys(postbackData).forEach((key) => {\n var input = document.createElement('input');\n input.name = key;\n input.value = postbackData[key];\n form.appendChild(input);\n });\n\n window.document.body.appendChild(form);\n form.submit();\n\n return true;\n};\n\nexport const parseMerchantPreferences = (merchant, cart) => ({\n returnMethod: params().rm === '2' ? 'POST' : 'GET',\n autoReturnToMerchant: merchant?.preferences?.autoReturnToMerchant ?? false,\n enablePaymentDataTransfer: merchant?.preferences?.enablePaymentDataTransfer ?? false,\n returnUrl: cart?.returnUrl?.href ?? merchant?.preferences?.returnUrl ?? null,\n});\n\nexport const autoReturnMessageProps = (merchant, onReturnToMerchant) => {\n return {\n paymentCompletedContent: getContent('donePage.paymentCompleted'),\n redirectMessage: getContent('donePage.redirectMessage', {\n merchantName: merchant?.name,\n // TODO: Replace with a button styled as a link\n clickHereLink: (\n <a href=\"#\" onClick={onReturnToMerchant} data-testid=\"wps-early-return-link\">\n {getContent('donePage.clickHereText')}\n </a>\n ),\n }),\n };\n};\n\n/**\n * Return formatted currency value | 10,00 USD | 10,00\n * @param {String} currencyCode | USD\n * @param {Object} amountType\n * For crossborder transactions, currencyFormat returns `100,00 USD`\n * compared to `$100.00`, we need to differentiate those two on render\n * on UI, we need to display <><strong>{$100.00}</strong>{USD}</>\n */\nexport const getFormattedCurrency = (currencyCode = '', { currencyFormat } = {}) => {\n if (!currencyFormat) {\n return '';\n }\n if (currencyFormat.includes(currencyCode)) {\n const replacementRegex = new RegExp(`\\\\s*${currencyCode}\\\\s*`);\n return currencyFormat.replace(replacementRegex, '');\n }\n return currencyFormat;\n};\n\n/**\n * Return string for header content | You paid | PayPal paid\n * @param {Object} selectedFundingOption\n */\nexport const getPaidFrom = ({ fundingInstrument } = {}) => {\n if (!fundingInstrument) {\n return '';\n }\n const { name, type } = fundingInstrument;\n return isCreditWithAdditionalData(name, type)\n ? getContent('donePage.paypalPaid')\n : getContent('donePage.youPaid.member');\n};\n\nexport const headerProps = (cart, merchant, selectedFundingOption) => {\n if (!cart) {\n return null;\n }\n\n const currencyCode = cart?.amounts?.total?.currencyCode;\n const totalAmountObj = cart?.amounts?.total;\n\n return {\n details: getContent('donePage.details'),\n toMerchant: merchant?.name ? (\n <>\n <span>\n {getContent('donePage.toMerchant', {\n merchantName: <strong>{merchant?.name}</strong>,\n })}\n </span>\n </>\n ) : null,\n totalWithCurrencyCode: `${getFormattedCurrency(currencyCode, totalAmountObj)} ${currencyCode}`,\n youPaid: getPaidFrom(selectedFundingOption),\n detailsButtonCallback: () => {\n logger.fpti(\n 'DETAIL_CLICKED',\n DONE_PAGE_PAYLOAD({\n action: 'detailClicked',\n flow: 'wps',\n })\n );\n },\n };\n};\n\nexport const itemDetailsProps = (cart) => {\n if (!cart) {\n return null;\n }\n\n const currencyCode = cart?.amounts?.total?.currencyCode;\n const handlingFeeAmount = cart?.amounts?.handlingFee;\n const insuranceAmount = cart?.amounts?.insurance;\n const shippingAmount = cart?.amounts?.shipping;\n const subtotalAmount = cart?.amounts?.subtotal;\n const taxAmount = cart?.amounts?.tax;\n const totalAmount = cart?.amounts?.total;\n\n return {\n currencyCode,\n items: cart.items.map((item) => {\n return {\n name: item.name,\n number: item.sku,\n price: getFormattedCurrency(currencyCode, item.unitPrice),\n quantity: item.quantity,\n options: item.itemOptionSelections?.map(({ name, description }) => ({\n name,\n select: description,\n })),\n };\n }),\n options: cart.items.map((option) => {\n return { name: option.name, select: option.description };\n }),\n numberLabel: getContent('donePage.itemNumber'),\n receipt: {\n handling: getFormattedCurrency(currencyCode, handlingFeeAmount),\n insurance: getFormattedCurrency(currencyCode, insuranceAmount),\n label: {\n handling: getContent('donePage.handling'),\n insurance: getContent('donePage.insurance'),\n shipping: getContent('donePage.shipping'),\n subtotal: getContent('donePage.subtotal'),\n tax: getContent('donePage.tax'),\n total: getContent('donePage.total'),\n },\n shipping: getFormattedCurrency(currencyCode, shippingAmount),\n subtotal: getFormattedCurrency(currencyCode, subtotalAmount),\n tax: getFormattedCurrency(currencyCode, taxAmount),\n total: getFormattedCurrency(currencyCode, totalAmount),\n },\n };\n};\n\nconst getFIName = ({ fundingInstrument } = {}) => {\n if (!fundingInstrument) {\n return '';\n }\n const { name, lastDigits } = fundingInstrument;\n\n let lastDigitsContent = lastDigits ? `-${lastDigits}` : '';\n return `${name}${lastDigitsContent}`;\n};\n\nexport const purchaseDetailsProps = (\n completedPaymentInfo,\n merchant,\n selectedFundingOption,\n shippingAddresses,\n cart,\n buyer\n) => {\n let shippedToInfo = null;\n if (shippingAddresses?.[0]?.fullAddress) {\n shippedToInfo = {\n formattedAddress: [shippingAddresses[0].fullAddress],\n fullName: shippingAddresses[0]?.name?.fullName,\n label: getContent('donePage.shippedTo'),\n };\n }\n\n const currencyCode = cart?.amounts?.total?.currencyCode;\n const totalAmountObj = cart?.amounts?.total;\n\n return {\n merchantDetails: {\n label: getContent('donePage.merchantDetails'),\n merchant: merchant?.name,\n },\n messengerContent: getContent('donePage.getNotifications'),\n bnplPaymentDetails: mapBnplDetailsProps(selectedFundingOption, cart),\n paidWith: {\n currencyCode,\n // couple of hotfixes for release, will refactor once moved to separate files\n disclaimer: completedPaymentInfo?.softDescriptor\n ? getContent('donePage.statementMessage', {\n merchantName: completedPaymentInfo?.softDescriptor,\n })\n : '',\n fundingSource: getFIName(selectedFundingOption),\n label: getContent('donePage.paidWith'),\n total: getFormattedCurrency(currencyCode, totalAmountObj),\n },\n purchaseDetails: {\n label: getContent('donePage.purchaseDetails'),\n receiptLabel: getContent('donePage.receiptNumber'),\n receiptNumber: completedPaymentInfo?.transactionId,\n emailLabel: getContent('donePage.confirmationEmail'),\n email: buyer?.email?.stringValue,\n },\n shippedTo: shippedToInfo,\n };\n};\n\nexport const combineOfacContent = () => {\n const contentTags = [\n 'donePage.ofacHeadline',\n 'donePage.ofacDetailsLine1',\n 'donePage.ofacDetailsLine2',\n 'donePage.ofacDetailsLine3',\n 'donePage.ofacDetailsLine4',\n 'donePage.ofacDetailsLine5',\n 'donePage.ofacDetailsLine6',\n ];\n return contentTags.reduce((contentStr, tag) => (contentStr += getContent(tag) + ' '), '').trim();\n};\n","import gql from 'graphql-tag';\nimport { ShippingAddressesFragment } from '@/components/ShipTo';\n/**\n * query to fetch merchant details for WPS\n */\nexport const WPS_DONE_PAGE_QUERY = gql`\n ${ShippingAddressesFragment}\n query WPSDonePage($token: String!) {\n checkoutSession(token: $token) {\n completedPaymentInfo {\n transactionId\n transactionState\n softDescriptor\n postbackData\n }\n merchant {\n name\n preferences {\n autoReturnToMerchant\n enablePaymentDataTransfer\n returnUrl\n }\n }\n buyer {\n userId\n email {\n stringValue\n }\n name {\n fullName\n }\n }\n shippingAddresses {\n ...ShippingAddressesFragment\n }\n cart {\n returnUrl {\n href\n pathname\n }\n cancelUrl {\n href\n pathname\n }\n intent\n items {\n quantity\n name\n sku\n unitPrice {\n currencyFormat\n }\n itemOptionSelections {\n name\n description\n }\n }\n amounts {\n subtotal {\n currencyFormat\n }\n tax {\n currencyFormat\n }\n shipping {\n currencyFormat\n }\n insurance {\n currencyFormat\n }\n handlingFee {\n currencyFormat\n }\n total {\n currencyCode\n currencyFormat\n }\n discount {\n currencyFormat\n }\n }\n }\n }\n }\n`;\n","import { useMemo, useCallback } from 'react';\nimport { useQuery } from '@apollo/react-hooks';\nimport { logger, DONE_PAGE_PAYLOAD } from '@paypalcorp/c3-util-logger';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport { clean } from '@paypalcorp/c3-util-lang';\nimport { usePayContext } from '@/components/ContextProviders';\nimport getContent from '@/lib/content';\nimport { buildURL, redirect } from '@/lib/redirects';\nimport {\n returnToMerchantViaPost,\n parseMerchantPreferences,\n autoReturnMessageProps,\n headerProps,\n itemDetailsProps,\n purchaseDetailsProps,\n combineOfacContent,\n} from './lib/utils';\nimport { WPS_DONE_PAGE_QUERY } from './query.gql';\nimport { useFeature } from '@/components/Feature/hooks';\n\nexport function useWPSDonePage() {\n const { data: shipToData = {} } = useFeature('SHIP_TO');\n const { selectedFundingOption } = usePayContext();\n const selectedAddressId = shipToData?.userSelectedAddressId || '';\n const { data } = useQuery(WPS_DONE_PAGE_QUERY, {\n variables: {\n token: getToken(),\n },\n fetchPolicy: 'cache-only',\n });\n\n const { merchant, buyer, cart, shippingAddresses, completedPaymentInfo } =\n data?.checkoutSession ?? {};\n const selectedShippingAddress = shippingAddresses \n ? shippingAddresses.filter(address => address.addressId === selectedAddressId) \n : shippingAddresses;\n const postbackData = completedPaymentInfo?.postbackData ?? {};\n\n const {\n returnMethod,\n autoReturnToMerchant,\n enablePaymentDataTransfer,\n returnUrl,\n } = parseMerchantPreferences(merchant, cart);\n\n const returnToMerchant = useCallback(() => {\n logger.fpti(\n 'PROCESS_DONE_PAGE',\n DONE_PAGE_PAYLOAD({\n action: 'processReturnToMerchant',\n flow: 'wps',\n })\n );\n\n // PDT overrides the return method; if enabled the returnMethod must be GET\n if (returnMethod === 'POST' && !enablePaymentDataTransfer) {\n logger.cal.info('WPS_DONE_PAGE_REDIRECT_VIA_POST', { returnUrl, postbackData });\n return returnToMerchantViaPost(returnUrl, postbackData);\n }\n\n const urlParams = clean({\n ...(enablePaymentDataTransfer && {\n st: postbackData.payment_status, // Payment state\n tx: postbackData.txn_id, // Transaction ID\n cc: postbackData.mc_currency, // Currency code\n amt: postbackData.mc_gross, // Transaction amount\n cm: postbackData.custom, // Custom merchant field\n ...postbackData,\n }),\n });\n\n const redirectUrl = buildURL(returnUrl, urlParams);\n logger.cal.info('WPS_DONE_PAGE_REDIRECT_VIA_GET', { returnUrl: redirectUrl });\n\n return redirect(redirectUrl);\n }, [\n logger,\n DONE_PAGE_PAYLOAD,\n returnMethod,\n enablePaymentDataTransfer,\n returnUrl,\n postbackData,\n returnToMerchantViaPost,\n clean,\n buildURL,\n redirect,\n ]);\n\n const isRegulatoryReview = postbackData?.pending_reason === 'regulatory_review';\n const autoReturnEnabled = autoReturnToMerchant && Boolean(returnUrl);\n const donePageProps = useMemo(\n () => ({\n header: headerProps(cart, merchant, selectedFundingOption),\n itemDetails: itemDetailsProps(cart),\n regulatoryReviewContent: isRegulatoryReview && combineOfacContent(),\n ...(autoReturnEnabled\n ? {\n autoReturnMessage: autoReturnMessageProps(merchant, returnToMerchant),\n }\n : {\n buttonLabel: getContent('donePage.returnToMerchant'),\n buttonCallback: returnToMerchant,\n purchaseDetails: purchaseDetailsProps(\n completedPaymentInfo,\n merchant,\n selectedFundingOption,\n selectedShippingAddress,\n cart,\n buyer\n ),\n }),\n }),\n [\n cart,\n buyer,\n merchant,\n shippingAddresses,\n selectedFundingOption,\n completedPaymentInfo,\n autoReturnEnabled,\n getContent,\n returnToMerchant,\n headerProps,\n itemDetailsProps,\n autoReturnMessageProps,\n purchaseDetailsProps,\n isRegulatoryReview,\n ]\n );\n\n return {\n isPaymentCompleted: Boolean(completedPaymentInfo),\n autoReturnEnabled,\n returnToMerchant,\n donePageProps,\n merchantName: merchant?.name,\n };\n}\n","import gql from 'graphql-tag';\n\nexport const REMITTANCE_DISCLOSURE_QUERY = gql`\n query RemittanceDisclosureQuery($token: String!) {\n checkoutSession(token: $token) {\n cart {\n total {\n currencyFormatSymbolISOCurrency\n }\n }\n merchant {\n name\n }\n flags {\n showRemittanceDisclosure\n }\n }\n }\n`;\n","import { usePayContext } from '@/components/ContextProviders';\nimport { useQuery } from '@apollo/react-hooks';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport getContent from '@/lib/content';\nimport { REMITTANCE_DISCLOSURE_QUERY } from './query.gql';\n\nconst getMerchantName = (checkoutSession) => {\n return checkoutSession?.merchant?.name;\n};\n\nconst getAmountInPayerCurrency = (fundingPlan) => {\n return fundingPlan?.currencyConversion?.convertedAmount?.currencyFormatSymbolISOCurrency;\n};\n\nconst getAmountInInvCurrency = (checkoutSession) => {\n return checkoutSession?.cart?.total?.currencyFormatSymbolISOCurrency;\n};\n\nconst getShowRemittanceDisclosure = (checkoutSession) => {\n return checkoutSession?.flags?.showRemittanceDisclosure;\n};\n\nexport function useRemittanceDisclosure() {\n const { selectedFundingOption } = usePayContext();\n const { data } = useQuery(REMITTANCE_DISCLOSURE_QUERY, {\n variables: {\n token: getToken(),\n },\n fetchPolicy: 'cache-only',\n });\n\n const checkoutSession = data?.checkoutSession;\n const fundingPlan = selectedFundingOption?.allPlans?.[0];\n\n const merchantName = getMerchantName(checkoutSession);\n const amountInPayerCurrency = getAmountInPayerCurrency(fundingPlan);\n const amountInInvCurrency = getAmountInInvCurrency(checkoutSession);\n const showRemittanceDisclosure = getShowRemittanceDisclosure(checkoutSession);\n const remittanceConversionInfo = {\n amountInPayerCurrency,\n merchantName,\n amountInInvCurrency,\n };\n const remittanceNonConversionInfo = {\n merchantName,\n amount: amountInInvCurrency\n };\n const remittanceContent = amountInPayerCurrency ? getContent(`invoicing.regulationEMsgWithCurrConv`, remittanceConversionInfo) : getContent('invoicing.regulationEMsg', remittanceNonConversionInfo)\n\n return {\n showRemittanceDisclosure,\n remittanceContent,\n amountInPayerCurrency\n };\n}\n","import Feature from '@/components/Feature';\nimport gql from 'graphql-tag';\nimport { CHECKOUT_BUTTON_STATES, updateFeature } from '@paypalcorp/c3-util-store';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport { InterstitialLoading } from '@/shared/components/Loading';\n\nconst FUNDING_OPTIONS_QUERY = gql`\n query GetFundingInstruments($token: String!) {\n checkoutSession(token: $token) {\n fundingOptions(returnAllPlans: true, groupSourcesOnType: INCENTIVE) {\n id\n }\n }\n }\n`;\n/**\n * 3DS (2.0) interstitial confirmation page\n */\nexport const ThreeDSTwoConfirmation = Feature({\n id: 'THREE_DS_TWO_CONFIRMATION',\n interstitial: true,\n interstitialOptions: {\n onBeforeCloseFn: () => {\n // Reset `CHECKOUT_BUTTON` to `INITIAL` is needed so any future related payment contingencies\n // can be captured and react\n updateFeature('CHECKOUT_BUTTON', {\n data: {\n status: CHECKOUT_BUTTON_STATES.INITIAL,\n inContingencyFlow: false,\n },\n });\n },\n },\n queries: [\n {\n query: FUNDING_OPTIONS_QUERY,\n variables: { token: getToken() },\n fetchPolicy: 'cache-only',\n },\n ],\n LoadingComponent: InterstitialLoading,\n contingencies: ['FI_CONFIRMATION_CONTINGENCY'],\n subscribeTo: ['CHECKOUT_BUTTON'],\n})(() => import('./ThreeDS'));\n","import get from 'dlv';\nimport { isDestination } from '@/lib/utils';\nimport { memoize } from '@paypalcorp/c3-util-lang';\nimport { params } from '@paypalcorp/c3-util-browser';\nimport getContent from '@/lib/content';\nimport Feature from '@/components/Feature';\nimport { redirectToRiskyLogin } from '@/lib/redirects';\nimport { getIsRememberedAuthState } from '@/authStates';\n// Eligibility criteria:\n// 1. `addShippingLink` is enabled + current `ShipTo` has a selected shipping address\n// 2. An address contingency is present\n// shouldLoad for either of the conditions\nconst shouldLoadFeatureComponent = memoize((enabled, selectedAddressId, contingencies) => {\n const isEnabledWithAddress = Boolean(enabled && selectedAddressId);\n const canHandleAddressContingencies =\n enabled && Boolean(contingencies.NEED_SHIPPING_ADDRESS || contingencies.NEED_PRIMARY_ADDRESS);\n return isEnabledWithAddress || canHandleAddressContingencies;\n});\n\n// If last attempted destination value exits and matches to `addShippingOneTouch`, we'll\n// need to redirect current user to `addShipping` interstitial. This is needed to support\n// one touch users after successfully re-login via riskyLogin.\nconst shouldAutoDisplayComponent = memoize(\n (\n contingencies,\n featureId,\n isRemembered,\n handlePostRiskyLogin = false,\n hasShippingParam = false\n ) => {\n const needShippingAddressContingency = Boolean(\n contingencies.NEED_SHIPPING_ADDRESS || contingencies.NEED_PRIMARY_ADDRESS\n );\n\n // We should NOT handle those contingencies when current logged in user has a `REMEMBERED` auth state\n const handleContingency = needShippingAddressContingency;\n\n // Handle riskyLogin redirection for `REMEMBERED` user\n // Example, for `NEED_SHIPPING_ADDRESS` contingency + one touched (or OTP, UDT) use case, instead\n // of showing `ADD_SHIPPING` interstitial, we should redirect users to riskyLogin\n if (needShippingAddressContingency && isRemembered) {\n redirectToRiskyLogin({\n reason: 'ADD_SHIPPING',\n destination: 'ADD_SHIPPING',\n extraParams: {\n lite: 1,\n fromLite: 1,\n ulClientKey: 'loginAddAddress',\n ulClientRedirect: 'insufficientPermission',\n },\n });\n return false;\n }\n\n // Handle post-riskyLogin auto showing `ADD_SHIPPING` interstitial\n // NOTE: we need to explicit check `isRemembered` state because users can hit back button from\n // riskyLogin page, in that use case, users will still be considered as a `REMEMBERED` user, so\n // we'll still need to redirect users to riskyLogin\n const handleDestination = handlePostRiskyLogin && !isRemembered;\n return handleContingency || handleDestination || hasShippingParam;\n }\n);\n\n/**\n * AddShipping interstitial Feature component\n */\nconst AddShipping = Feature({\n id: 'ADD_SHIPPING',\n interstitial: true,\n interstitialOptions: {\n // don't display close button when it is a contingency flow\n showCloseBtnFunc: ({ contingencies }) => {\n const isContingencyFlow =\n contingencies.NEED_SHIPPING_ADDRESS || contingencies.NEED_PRIMARY_ADDRESS;\n return !isContingencyFlow;\n },\n headerTitleFunc: ({ contingencies }) => {\n return contingencies.NEED_PRIMARY_ADDRESS\n ? getContent('addShipping.addNewPrimaryAddress')\n : getContent('addShipping.addNewShippingAddress');\n },\n type: 'tall',\n },\n shouldLoadFeatureComponent: (props) => {\n const { enabled } = get(props, 'features.ADD_SHIPPING_LINK', {});\n const { userSelectedAddressId } = get(props, 'features.SHIP_TO.data', {});\n const contingencies = get(props, 'contingencies', {});\n return shouldLoadFeatureComponent(enabled, userSelectedAddressId, contingencies);\n },\n shouldAutoDisplayComponent: (props) => {\n const contingencies = get(props, 'contingencies', {});\n const { id: featureId } = get(props, 'feature', {});\n const isRemembered = getIsRememberedAuthState();\n const handlePostRiskyLogin = isDestination(featureId);\n const hasShippingParam = Boolean(params().addShipping);\n\n return shouldAutoDisplayComponent(\n contingencies,\n featureId,\n isRemembered,\n handlePostRiskyLogin,\n hasShippingParam\n );\n },\n subscribeTo: ['ADD_NORMALIZED_ADDRESS', 'ADD_SHIPPING_LINK', 'SHIP_TO'],\n contingencies: ['NEED_SHIPPING_ADDRESS', 'NEED_PRIMARY_ADDRESS'],\n})(() => import('../AddShippingInterstitial'));\n\nexport default AddShipping;\n","// extracted by extract-css-chunks-webpack-plugin\nmodule.exports = {\"ppui-color-grey-600\":\"#687173\",\"ppuiColorGrey600\":\"#687173\",\"ppui-font-size-sm\":\"0.8125rem\",\"ppuiFontSizeSm\":\"0.8125rem\",\"ppui-line-height-sm\":\"1.125rem\",\"ppuiLineHeightSm\":\"1.125rem\",\"ppui-color-white\":\"#fff\",\"ppuiColorWhite\":\"#fff\",\"ppui-spacing-md\":\"0.5rem\",\"ppuiSpacingMd\":\"0.5rem\",\"container\":\"Divider_container_2CYJA\",\"contentContainer\":\"Divider_contentContainer_3npMN\"};","import React from 'react';\n\nimport PopupLink from '../PopupLink';\nimport getContent from '@/lib/content';\nimport { getCountry, getLocale } from '@paypalcorp/c3-shared-globals';\nimport styles from './styles.css';\n\nconst country = getCountry();\nconst locale = `${getLocale()}_${country}`;\nexport const link =\n country.toLowerCase() === 'us'\n ? 'https://www.paypal.com/us/webapps/mpp/popup/about-payment-methods'\n : `https://www.paypal.com/webapps/mpp/ua/upcoming-policies-full?country.x=${country}&locale.x=${locale}`;\n\nexport const PoliciesLink = () => {\n const policyLink = {\n label: getContent('disclaimer.policies'),\n href: link,\n style: styles.policies,\n };\n\n return (\n <p className={styles.policies}>\n {getContent('disclaimer.viewPaypalPolicies', {\n paypalPoliciesLink: <PopupLink link={policyLink} />,\n })}\n </p>\n );\n};\n","// extracted by extract-css-chunks-webpack-plugin\nmodule.exports = {\"ppui-color-blue-600\":\"#0070ba\",\"ppuiColorBlue600\":\"#0070ba\",\"ppui-font-size-xs\":\"0.6875rem\",\"ppuiFontSizeXs\":\"0.6875rem\",\"policies\":\"PoliciesLink_policies_1Fe3W\"};","import React from 'react';\nimport { lazyComponent } from '@/lib/lazyLoad';\nimport { useFeature } from '../Feature/hooks';\nimport { useRemittanceDisclosure } from './hooks';\n\nconst RemittanceDisclosure = lazyComponent(() => import('./RemittanceDisclosure'), {\n id: 'REMITTANCE_DISCLOSURE',\n});\n\nexport default function RemittanceDisclosureContainer() {\n const { visible, enabled } = useFeature('REMITTANCE_DISCLOSURE');\n const { showRemittanceDisclosure } = useRemittanceDisclosure();\n\n // checks if planning shows disclosure and if there is a conversion taking place\n if ( enabled && visible && showRemittanceDisclosure) {\n return <RemittanceDisclosure />\n }\n\n return null;\n}\n","// extracted by extract-css-chunks-webpack-plugin\nmodule.exports = {\"container\":\"MerchantDescription_container_2gBwb\",\"title\":\"MerchantDescription_title_1fTcZ\",\"text\":\"MerchantDescription_text_2V25O\"};","import React from 'react';\nimport { useQuery } from '@apollo/react-hooks';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport { lazyComponent } from '@/lib/lazyLoad';\nimport { MERCHANT_LOGO_QUERY } from './query.gql';\nimport Loading from './Loading';\n\nconst MerchantLogo = lazyComponent(() => import('./MerchantLogo'), {\n id: 'MERCHANT_LOGO',\n loading: () => <Loading />,\n});\n\nfunction MerchantLogoContainer() {\n const { loading, data } = useQuery(MERCHANT_LOGO_QUERY, {\n context: { skipFallback: true },\n variables: { token: getToken() },\n });\n\n return <MerchantLogo isLoading={loading} merchant={data?.checkoutSession?.merchant} />;\n}\n\nexport default MerchantLogoContainer;\n","import gql from 'graphql-tag';\n\nexport const MERCHANT_LOGO_QUERY = gql`\n query MerchantLogoQuery($token: String!) {\n checkoutSession(token: $token) {\n merchant {\n name\n logo {\n href\n }\n }\n }\n }\n`;\n","import React from 'react';\nimport { uniqueStr } from '@checkout/react-components';\nimport styles from './styles.css';\n\nexport default function MerchantLogoLoading() {\n const clipPathId = uniqueStr();\n const gradientId = uniqueStr();\n\n return (\n <div className={styles.container}>\n <svg\n className={styles.loadingImage}\n viewBox=\"0 0 250 50\"\n version=\"1.1\"\n preserveAspectRatio=\"xMidYMid meet\"\n >\n <rect\n clipPath={`url(#${clipPathId})`}\n x=\"0\"\n y=\"0\"\n width=\"250\"\n height=\"50\"\n style={{ fill: `url(#${gradientId})` }}\n />\n <defs>\n <clipPath id={clipPathId}>\n <rect x=\"3\" y=\"3\" rx=\"4\" ry=\"4\" width=\"250\" height=\"50\" />\n </clipPath>\n <linearGradient id={gradientId}>\n <stop offset=\"-1.9\" stopColor=\"#f3f3f3\">\n <animate attributeName=\"offset\" values=\"-2; 1\" dur=\"2s\" repeatCount=\"indefinite\" />\n </stop>\n <stop offset=\"-1.4\" stopColor=\"#ecebeb\">\n <animate\n attributeName=\"offset\"\n values=\"-1.5; 1.5\"\n dur=\"2s\"\n repeatCount=\"indefinite\"\n />\n </stop>\n <stop offset=\"-0.9\" stopColor=\"#f3f3f3\">\n <animate attributeName=\"offset\" values=\"-1; 2\" dur=\"2s\" repeatCount=\"indefinite\" />\n </stop>\n </linearGradient>\n </defs>\n </svg>\n </div>\n );\n}\n","import Feature from '@/components/Feature';\nimport { InterstitialLoading } from '@/shared/components/Loading';\nimport gql from 'graphql-tag';\nimport {\n FundingOptionFragment,\n PaymentContingenciesFragment,\n} from '@paypalcorp/c3-graphql-fragments';\nimport { updateFeature, updateContingency } from '@paypalcorp/c3-util-store';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport { CHECKOUT_BUTTON_STATES } from '../CheckoutButton/constants';\nimport { fallback } from '@/lib/redirects';\nimport { isIframe } from '@paypalcorp/c3-util-browser';\nimport { experiences, threeDsExperienceVars } from '@paypalcorp/c3-util-threed-ds';\n\nconst query = gql`\n ${FundingOptionFragment}\n ${PaymentContingenciesFragment}\n query OpenBanking($experiences: [ThreeDSPaymentExperience], $token: String!) {\n checkoutSession(token: $token) {\n fundingOptions(returnAllPlans: true, groupSourcesOnType: INCENTIVE) {\n ...FundingOptionFragment\n }\n paymentContingencies {\n ...PaymentContingenciesFragment\n threeDomainSecure(experiences: $experiences) {\n ...ThreeDomainSecureFields\n }\n }\n userAction\n }\n }\n`;\n\nconst shouldAutoDisplayComponent = ({\n allQueryData: [\n {\n data: { checkoutSession = {} },\n },\n ],\n features,\n contingencies: { BANK_LOGIN_CREDENTIALS_INVALID } = {},\n}) => {\n const {\n paymentContingencies: { needConsentForBankAccountInfoRetrieval: { encryptedId } = {} } = {},\n fundingOptions = [],\n } = checkoutSession;\n const { status } = features.CHECKOUT_BUTTON.data;\n const contingencyMatchesAnFi =\n encryptedId && !!fundingOptions.find((item) => item.id === encryptedId);\n\n if (isIframe() && BANK_LOGIN_CREDENTIALS_INVALID) {\n fallback({ reason: 'moneynodewebRedirection' });\n } else {\n return (\n (contingencyMatchesAnFi && status === CHECKOUT_BUTTON_STATES.PENDING) ||\n BANK_LOGIN_CREDENTIALS_INVALID\n );\n }\n};\n\nconst shouldLoadFeatureComponent = ({\n allQueryData: [\n {\n data: { checkoutSession = {} },\n },\n ],\n features,\n contingencies: { BANK_LOGIN_CREDENTIALS_INVALID } = {},\n}) => {\n const {\n paymentContingencies: { needConsentForBankAccountInfoRetrieval: { encryptedId } = {} } = {},\n fundingOptions = [],\n } = checkoutSession;\n const { status } = features.CHECKOUT_BUTTON.data;\n const contingencyMatchesAnFi =\n encryptedId && !!fundingOptions.find((item) => item.id === encryptedId);\n\n return (\n (contingencyMatchesAnFi && status === CHECKOUT_BUTTON_STATES.PENDING) ||\n BANK_LOGIN_CREDENTIALS_INVALID\n );\n};\n\n// This feature will get loaded when 'SHARED_INSTRUMENT_CONSENT_REQUIRED' contingency is thrown from FI\n// This will display a shared card consent page to send consent of the logged in user to share his details to the card owner\nconst OpenBanking = Feature({\n id: 'OPEN_BANKING',\n queries: [\n {\n query: query,\n variables: threeDsExperienceVars({ token: getToken() }),\n context: { skipFallback: true },\n fetchPolicy: 'cache-only',\n },\n ],\n interstitial: true,\n interstitialOptions: {\n onBeforeCloseFn: () => {\n updateFeature('CHECKOUT_BUTTON', {\n data: {\n status: CHECKOUT_BUTTON_STATES.INITIAL,\n inContingencyFlow: false,\n },\n }).then(() => updateContingency('BANK_LOGIN_CREDENTIALS_INVALID', { clear: true }));\n },\n },\n subscribeTo: ['CHECKOUT_BUTTON', 'PAY_WITH'],\n contingencies: ['BANK_LOGIN_CREDENTIALS_INVALID'],\n LoadingComponent: InterstitialLoading,\n shouldLoadFeatureComponent,\n shouldAutoDisplayComponent,\n})(() => import('./OpenBankingInterstitial'));\n\nexport default OpenBanking;\n","import gql from 'graphql-tag';\nimport Feature from '@/components/Feature';\nimport { CHECKOUT_BUTTON_STATES } from '@/components/CheckoutButton/constants';\nimport { logger } from '@paypalcorp/c3-util-logger';\nimport { OTP_CONFIRMATION_PAYLOAD } from '@paypalcorp/c3-util-logger';\nimport { updateFeature } from '@paypalcorp/c3-util-store';\nimport { getToken, getCountry, getLocale } from '@paypalcorp/c3-shared-globals';\nimport getContent from '@/lib/content';\nimport { InterstitialLoading } from '@/shared/components/Loading';\nimport { OTP_CONFIRMATION_QUERY } from './queries.gql';\n\nconst shouldLoadFeatureComponent = (props) => {\n const { INITIATE_OTP_CONTINGENCY } = props.contingencies;\n const { fundingInstrumentId } = props?.feature?.data;\n\n return Boolean(INITIATE_OTP_CONTINGENCY || fundingInstrumentId);\n};\n\n/**\n * @description `OTPConfirmation` component allows the user to verify their card with a one time password sent to their phone.\n *\n * @summary\n *\n */\nconst OTPConfirmation = Feature({\n id: 'OTP_CONFIRMATION',\n interstitial: true,\n interstitialOptions: {\n onBeforeCloseFn: ({ feature }) => {\n if (!feature?.data?.isNewCard) {\n updateFeature('CHECKOUT_BUTTON', {\n data: { status: CHECKOUT_BUTTON_STATES.INITIAL },\n });\n }\n\n updateFeature('OTP_CONFIRMATION', {\n data: {\n isNewCard: false,\n card: {\n expirationDate: null,\n securityCode: null,\n },\n fundingInstrumentId: null,\n phone: {\n number: null,\n countryCode: null,\n },\n },\n });\n },\n headerTitleFunc: () => getContent('otpConfirmation.title'),\n type: 'tall',\n },\n LoadingComponent: InterstitialLoading,\n contingencies: ['INITIATE_OTP_CONTINGENCY'],\n queries: [\n {\n query: OTP_CONFIRMATION_QUERY,\n variables: {\n token: getToken(),\n },\n fetchPolicy: 'cache-only',\n },\n ],\n shouldLoadFeatureComponent,\n shouldAutoDisplayComponent: shouldLoadFeatureComponent,\n})(() => import('./OTPConfirmation'));\n\nexport default OTPConfirmation;\n","import React from 'react';\nimport { useQuery } from '@apollo/react-hooks';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport { useFeature } from '@/components/Feature/hooks';\nimport { useEligibilityContext, usePayLaterContext } from '@/components/ContextProviders';\nimport { lazyComponent } from '@/lib/lazyLoad';\nimport TabsLoading from './Loading';\nimport PayWithLoading from '../PayWith/Loading';\nimport { PayWithQueryDocument as payWithQuery } from '@paypalcorp/c3-graphql-fragments';\nimport { threeDsExperienceVars } from '@paypalcorp/c3-util-threed-ds';\nimport PayWithSingle from '@/components/PayWithSingle';\n\nconst StackedPaymentOptions = lazyComponent(() => import('./StackedPaymentOptions'), {\n id: 'STACKED_PAYMENT_OPTIONS',\n loading: () => <PayWithLoading />,\n});\n\nconst TabbedPaymentOptions = lazyComponent(() => import('./TabbedPaymentOptions'), {\n id: 'TABBED_PAYMENT_OPTIONS',\n loading: () => <PayWithLoading />,\n});\n\nfunction PaymentOptionsContainer() {\n const { enabled, visible } = useFeature('PAYMENT_OPTIONS');\n const { loading, showTabs } = useEligibilityContext();\n const payLaterContext = usePayLaterContext();\n const { isReturningFromCredit, shouldShowPayWithSingle } = payLaterContext.payLaterState;\n\n // Prefetch the PayWith query\n useQuery(payWithQuery, {\n variables: threeDsExperienceVars({ token: getToken() }),\n context: { planningBatch: true },\n errorPolicy: 'ignore',\n });\n\n if (!enabled || !visible) {\n return null;\n }\n\n if (loading) {\n return (\n <>\n <TabsLoading />\n <PayWithLoading />\n </>\n );\n }\n\n if (isReturningFromCredit) {\n return <PayWithLoading />;\n }\n\n if (shouldShowPayWithSingle) {\n return <PayWithSingle />;\n }\n\n if (showTabs) {\n return <TabbedPaymentOptions />;\n }\n\n return <StackedPaymentOptions />;\n}\n\nexport default PaymentOptionsContainer;\n","import React from 'react';\nimport { uniqueStr } from '@checkout/react-components';\n\nconst TabsLoading = () => {\n const clipPathId = uniqueStr();\n const gradientId = uniqueStr();\n\n return (\n <svg viewBox=\"0 0 350 30\" version=\"1.1\" preserveAspectRatio=\"xMidYMid meet\" width=\"100%\">\n <rect\n clipPath={`url(#${clipPathId})`}\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"30\"\n style={{ fill: `url(#${gradientId})` }}\n />\n <defs>\n <clipPath id={clipPathId}>\n <rect x=\"0\" y=\"0\" rx=\"4\" ry=\"4\" width=\"100%\" height=\"30\" />\n </clipPath>\n <linearGradient id={gradientId}>\n <stop offset=\"-1.9\" stopColor=\"#f3f3f3\">\n <animate attributeName=\"offset\" values=\"-2; 1\" dur=\"2s\" repeatCount=\"indefinite\" />\n </stop>\n <stop offset=\"-1.4\" stopColor=\"#ecebeb\">\n <animate attributeName=\"offset\" values=\"-1.5; 1.5\" dur=\"2s\" repeatCount=\"indefinite\" />\n </stop>\n <stop offset=\"-0.9\" stopColor=\"#f3f3f3\">\n <animate attributeName=\"offset\" values=\"-1; 2\" dur=\"2s\" repeatCount=\"indefinite\" />\n </stop>\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nexport default TabsLoading;\n","// extracted by extract-css-chunks-webpack-plugin\nmodule.exports = {\"ppui-font-family-300\":\"'PayPalSansBig-Light'\",\"ppuiFontFamily300\":\"'PayPalSansBig-Light'\",\"loading\":\"Loading_loading_1DqRj\",\"title\":\"Loading_title_17TXV\",\"svg\":\"Loading_svg_2O58Z\"};","import React from 'react';\nimport { lazyComponent } from '@/lib/lazyLoad';\nimport Loading from '@/components/PayWith/Loading';\n\nconst PayWithSingle = lazyComponent(() => import('./PayWithSingle'), {\n id: 'PAY_WITH_SINGLE',\n loading: () => <Loading />,\n});\n\nexport default PayWithSingle;\n","import Loading from './Loading';\nimport gql from 'graphql-tag';\nimport Feature from '@/components/Feature';\n\nexport const query = gql`\n query PersonalizedBannerQuery {\n user {\n name {\n givenName\n familyName\n }\n profileImage(type: XS) {\n url {\n href\n }\n }\n }\n }\n`;\n\nconst PersonalizedBannerContainer = Feature({\n id: 'PERSONALIZED_BANNER',\n queries: [\n {\n query: query,\n context: {\n skipFallback: true,\n }\n },\n ],\n LoadingComponent: Loading,\n})(() => import('./PersonalizedBanner'));\n\nexport default PersonalizedBannerContainer;\n","import React from 'react';\nimport { uniqueStr } from '@checkout/react-components';\nimport styles from './styles.css';\n\nexport default function PersonalizedBannerLoader() {\n const clipPathId = uniqueStr();\n const gradientId = uniqueStr();\n\n return (\n <div className={styles.Container}>\n <svg version=\"1.1\" preserveAspectRatio=\"xMinYMid meet\" height=\"60\" viewBox=\"0 0 300 45\">\n <rect\n clipPath={`url(#${clipPathId})`}\n width=\"100%\"\n height=\"100%\"\n style={{ fill: `url(#${gradientId})` }}\n />\n <defs>\n <clipPath id={clipPathId}>\n <circle cx=\"15\" cy=\"22\" r=\"15\" />\n <rect x=\"36\" y=\"17\" rx=\"1\" ry=\"1\" width=\"200\" height=\"12\" />\n </clipPath>\n <linearGradient id={gradientId}>\n <stop offset=\"-0.487006\" stopColor=\"#f3f3f3\">\n <animate attributeName=\"offset\" values=\"-2; 1\" dur=\"1s\" repeatCount=\"indefinite\" />\n </stop>\n <stop offset=\"0.0129941\" stopColor=\"#ecebeb\">\n <animate\n attributeName=\"offset\"\n values=\"-1.5; 1.5\"\n dur=\"1s\"\n repeatCount=\"indefinite\"\n />\n </stop>\n <stop offset=\"0.512994\" stopColor=\"#f3f3f3\">\n <animate attributeName=\"offset\" values=\"-1; 2\" dur=\"1s\" repeatCount=\"indefinite\" />\n </stop>\n </linearGradient>\n </defs>\n </svg>\n </div>\n );\n}\n","import Feature from '@/components/Feature';\n\n/**\n * For country Japan there's a specific policy agreement we need to render\n * See from hermesnodeweb: https://github.paypal.com/Checkout-R/hermesnodeweb/blob/develop/config/config.json#L2245\n */\nconst PolicyAgreement = Feature({\n id: 'POLICY_AGREEMENT',\n})(() => import('./PolicyAgreement'));\n\nexport default PolicyAgreement;\n","import React, { useState } from 'react';\nimport { usePrevious } from 'react-use';\nimport { useQuery } from '@apollo/react-hooks';\nimport { useFeature } from '@/components/Feature/hooks';\nimport { getToken, getCredit } from '@paypalcorp/c3-shared-globals';\nimport { params } from '@/lib/utils';\nimport { lazyComponent } from '@/lib/lazyLoad';\nimport { ECONSENT_QUERY } from '@/components/Econsent';\nimport { creditPpcOffersGqlParams } from '@/lib/credit';\nimport { CREDIT_SECOND_BUTTON_QUERY } from './query.gql.js';\n\nconst RedirectToCredit = lazyComponent(() => import('./RedirectToCredit'), {\n id: 'REDIRECT_TO_CREDIT',\n loading: () => null,\n});\n\nconst RedirectToCreditContainer = () => {\n const { visible: econsentVisible } = useFeature('ECONSENT');\n const previousEconsentVisible = usePrevious(econsentVisible);\n const { data: userData } = useQuery(ECONSENT_QUERY);\n const { data: checkoutSessionData } = useQuery(CREDIT_SECOND_BUTTON_QUERY, {\n variables: { token: getToken(), ...creditPpcOffersGqlParams() },\n context: { planningBatch: true },\n errorPolicy: 'ignore',\n });\n const newUser = getCredit().newUser;\n\n // assume that econsent could be shown until user data is ready\n const isEconsentInitiallyShown = userData?.user?.eConsent ?? true;\n const isEconsentTriggeredRefresh = econsentVisible === false && previousEconsentVisible === true;\n const shouldMountComponent = !params().key && getCredit().isCreditSecondButton;\n const isLoadedData = Boolean(checkoutSessionData && userData);\n const isRedirectWaitForEconsent = isEconsentInitiallyShown && !isEconsentTriggeredRefresh;\n const [waitingOnEconsent, setWaitingOnEconsent] = useState(true);\n\n // dont redirect to CAPE before eConsent is accepted\n if (waitingOnEconsent && (newUser || !isRedirectWaitForEconsent)) {\n setWaitingOnEconsent(false);\n }\n\n if ((!newUser && !isLoadedData) || !shouldMountComponent) {\n return null;\n }\n\n const props = {\n ...checkoutSessionData,\n waitingOnEconsent,\n };\n\n return <RedirectToCredit {...props} />;\n};\n\nexport default RedirectToCreditContainer;\n","import gql from 'graphql-tag';\nimport { FundingOptionFragment } from '@paypalcorp/c3-graphql-fragments';\nimport { CreditOfferFragment } from '@/components/CreditOffer';\n\nexport const CREDIT_SECOND_BUTTON_QUERY = gql`\n ${FundingOptionFragment}\n ${CreditOfferFragment}\n query RedirectToCreditQuery($areCookiesDisabled: Boolean, $isIframe: Boolean, $token: String!) {\n checkoutSession(token: $token) {\n fundingOptions(returnAllPlans: true, groupSourcesOnType: INCENTIVE) {\n ...FundingOptionFragment\n }\n creditPPCOffers(areCookiesDisabled: $areCookiesDisabled, isIframe: $isIframe) {\n ...CreditOfferFragment\n }\n flags {\n hasPPCreditInstallments\n showPPCreditOffer\n isEligibleForCreditSecondButton\n }\n }\n }\n`;\n","import Feature from '@/components/Feature';\nimport { isDestination, params } from '@/lib/utils';\n\n/**\n * Handles redirect from PPC\n */\nconst ReturnFromCredit = Feature({\n id: 'RETURN_FROM_CREDIT',\n shouldLoadFeatureComponent: () => Boolean(params().key),\n})(() => import('./ReturnFromCredit'));\n\nexport default ReturnFromCredit;\n","import React from 'react';\nimport { useQuery } from '@apollo/react-hooks';\nimport { useContingency, useFeature } from '@/components/Feature/hooks';\nimport { getIsUserDeviceTokenImplicitLogin } from '@/authStates';\nimport { lazyComponent } from '@/lib/lazyLoad';\nimport gql from 'graphql-tag';\nimport { getToken, getCredit, getIsScaRegion } from '@paypalcorp/c3-shared-globals';\n\nexport const REVIEW_PAGE_ALERT_QUERY = gql`\n query ReviewPageAlertQuery($token: String!) {\n checkoutSession(token: $token) {\n flags {\n isEligibleForCreditSecondButton\n }\n }\n }\n`;\n\nconst ReviewPageAlert = lazyComponent(() => import('./ReviewPageAlert'), {\n id: 'REVIEW_PAGE_ALERT',\n loading: () => <></>,\n});\n\nconst ReviewPageAlertContainer = () => {\n const { visible, data: featureData } = useFeature('REVIEW_PAGE_ALERT');\n\n const needCreditCardContingency = useContingency('NEED_CREDIT_CARD');\n const needCreditCardOrBankAccountContingency = useContingency('NEED_CREDIT_CARD_OR_BANK_ACCOUNT');\n const expiredCreditCardContingency = useContingency('EXPIRED_CREDIT_CARD');\n\n const { loading, data } = useQuery(REVIEW_PAGE_ALERT_QUERY, {\n variables: { token: getToken() },\n context: { skipFallback: true },\n fetchPolicy: process.env.NODE_ENV === 'test' ? 'no-cache' : 'cache-only',\n });\n\n if (loading || !visible) {\n return null;\n }\n\n const checkoutSession = data?.checkoutSession;\n const isScaRegion = getIsScaRegion();\n const isCreditSecondButton = getCredit().isCreditSecondButton;\n const isPPCEligible = checkoutSession?.flags?.isEligibleForCreditSecondButton ?? true;\n const newUser = getCredit().newUser;\n\n const shouldShowComponent =\n needCreditCardContingency ||\n needCreditCardOrBankAccountContingency ||\n expiredCreditCardContingency ||\n (getIsUserDeviceTokenImplicitLogin() && !isScaRegion) ||\n (isCreditSecondButton && !newUser && !isPPCEligible) ||\n featureData?.message;\n\n if (shouldShowComponent) {\n const props = {\n contingencies: {\n needCreditCardContingency,\n needCreditCardOrBankAccountContingency,\n expiredCreditCardContingency,\n },\n isCreditSecondButton,\n isPPCEligible,\n isScaRegion,\n };\n return <ReviewPageAlert {...props} />;\n } else {\n return null;\n }\n};\n\nexport default ReviewPageAlertContainer;\n","import React from 'react';\nimport { areCookiesDisabled } from '@/lib/cookie';\nimport { lazyComponent } from '@/lib/lazyLoad';\nimport {\n logger,\n TRUSTED_BENEFICIARY_PAYLOAD,\n SCA_CONTINGENCY_PAYLOAD,\n} from '@paypalcorp/c3-util-logger';\nimport { isWebView } from '@paypalcorp/c3-util-browser';\nimport { EXEMPTIONS, TRUSTED_BENEFICIARY_FLOW, REVIEW_BEFORE_LOGIN_FLOW } from './constants';\nimport { useSca } from './hooks';\n\n\nconst ReviewBeforeLogin = lazyComponent(() => import('./ReviewBeforeLogin'), {\n id: 'REVIEW_BEFORE_LOGIN',\n loading: () => null,\n});\n\nconst TrustedBeneficiaryOptIn = lazyComponent(() => import('./TrustedBeneficiaryOptIn'), {\n id: 'TRUSTED_BENEFICIARY_OPT_IN',\n loading: () => null,\n});\n\nfunction ScaContainer() {\n const {\n exemptReason,\n isLoading,\n reviewBeforeLoginEligible,\n reviewBeforeLoginProps,\n trustedBeneficiaryEligible,\n trustedBeneficiaryProps,\n } = useSca();\n\n if (isLoading) {\n return null;\n }\n\n if (exemptReason) {\n logger.fpti(\n EXEMPTIONS[exemptReason],\n SCA_CONTINGENCY_PAYLOAD({ action: EXEMPTIONS[exemptReason] })\n );\n return null;\n }\n\n if (trustedBeneficiaryEligible) {\n if (areCookiesDisabled()) {\n logger.fpti(\n TRUSTED_BENEFICIARY_FLOW.cookieDisabledTraffic,\n TRUSTED_BENEFICIARY_PAYLOAD({ action: TRUSTED_BENEFICIARY_FLOW.cookieDisabledTraffic })\n );\n return null;\n }\n\n if (isWebView(navigator?.userAgent)) {\n logger.fpti(\n TRUSTED_BENEFICIARY_FLOW.webview,\n TRUSTED_BENEFICIARY_PAYLOAD({ action: TRUSTED_BENEFICIARY_FLOW.webview })\n );\n return null;\n }\n return <TrustedBeneficiaryOptIn {...trustedBeneficiaryProps} />;\n }\n if (reviewBeforeLoginEligible) {\n if (areCookiesDisabled()) {\n logger.fpti(\n REVIEW_BEFORE_LOGIN_FLOW.cookieDisabledTraffic,\n SCA_CONTINGENCY_PAYLOAD({ action: REVIEW_BEFORE_LOGIN_FLOW.cookieDisabledTraffic })\n );\n return null;\n }\n\n if (isWebView(navigator?.userAgent)) {\n logger.fpti(\n REVIEW_BEFORE_LOGIN_FLOW.webview,\n SCA_CONTINGENCY_PAYLOAD({ action: REVIEW_BEFORE_LOGIN_FLOW.webview })\n );\n return null;\n }\n return <ReviewBeforeLogin {...reviewBeforeLoginProps} />;\n }\n return null;\n}\n\nexport default ScaContainer;\n","import Feature from '@/components/Feature';\nimport { FundingOptionFragment } from '@paypalcorp/c3-graphql-fragments';\nimport getContent from '@/lib/content';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport gql from 'graphql-tag';\nimport { logger } from '@paypalcorp/c3-util-logger';\nimport { memoize } from '@paypalcorp/c3-util-lang';\nimport get from 'dlv';\nimport { getPreferredFi, getSplitBalancePlan, updateFeature } from '@paypalcorp/c3-util-store';\nimport { LANDING_PAGE } from '@/lib/landingPage';\n\nexport const SELECT_FI_QUERY = gql`\n ${FundingOptionFragment}\n query GetFundingInstruments($token: String!) {\n checkoutSession(token: $token) {\n fundingOptions(returnAllPlans: true, groupSourcesOnType: INCENTIVE) {\n ...FundingOptionFragment\n }\n }\n }\n`;\n\nconst shouldLoadFeatureComponent = memoize((fundingOptions) => {\n const hasAttribution = fundingOptions.some((fi) => get(fi, 'fundingInstrument.attribution'));\n const hasSplitBalance = fundingOptions.some((fi) => getSplitBalancePlan(fi));\n\n return fundingOptions.length >= 1 && !hasAttribution && !hasSplitBalance;\n});\n\nconst shouldAutoDisplayComponent = memoize((fundingOptions) => {\n let preferredFi = getPreferredFi(fundingOptions);\n\n if (preferredFi || fundingOptions.length === 1) {\n logger.cal.info('SELECT_FI_LANDING_RYI');\n updateFeature('SELECT_FI', { data: { landingPage: LANDING_PAGE.REVIEW } });\n return false;\n }\n\n logger.cal.info('SELECT_FI_LANDING_CHOICE');\n\n updateFeature('SELECT_FI', { data: { landingPage: LANDING_PAGE.CHOICE } });\n\n return true;\n});\n\n/**\n * Component responsible for displaying the funding instruments in the Choice feature (SelectFi).\n */\nconst SelectFi = Feature({\n id: 'SELECT_FI',\n interstitial: true,\n interstitialOptions: {\n type: 'tall',\n showCloseBtn: true,\n headerTitleFunc: () => getContent('choice.title'),\n },\n queries: [\n {\n query: SELECT_FI_QUERY,\n variables: { token: getToken() },\n fetchPolicy: 'cache-only',\n },\n ],\n shouldAutoDisplayComponent: (props) => {\n const fundingOptions = get(props, 'allQueryData.0.data.checkoutSession.fundingOptions', []);\n return shouldAutoDisplayComponent(fundingOptions);\n },\n shouldLoadFeatureComponent: (props) => {\n const fundingOptions = get(props, 'allQueryData.0.data.checkoutSession.fundingOptions', []);\n return shouldLoadFeatureComponent(fundingOptions);\n },\n})(() => import('./SelectFi'));\n\nexport default SelectFi;\n","import React from 'react';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport { lazyComponent } from '@/lib/lazyLoad';\nimport { shipToQuery } from '@/components/ShipTo';\nimport { useQuery } from '@apollo/react-hooks';\n\nconst SelectShippingInterstitial = lazyComponent(() => import('./SelectShippingInterstitial'), {\n id: 'SELECT_SHIPPING_INTERSTITIAL',\n loading: () => <></>,\n});\n\nfunction SelectShippingInterstitialContainer() {\n const { loading, data } = useQuery(shipToQuery, {\n context: { planningBatch: true },\n variables: { token: getToken() },\n });\n return <SelectShippingInterstitial checkoutSession={data?.checkoutSession} isLoading={loading} />;\n}\n\nexport default SelectShippingInterstitialContainer;\n","import gql from 'graphql-tag';\nimport get from 'dlv';\n\nimport Feature from '@/components/Feature';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport getContent from '@/lib/content';\nimport { updateFeature } from '@paypalcorp/c3-util-store';\nimport { CHECKOUT_BUTTON_STATES } from '@/components/CheckoutButton/constants';\nimport { InterstitialLoading } from '@/shared/components/Loading';\nimport { SepaMandateAcceptanceNeededFragment } from '@paypalcorp/c3-graphql-fragments';\n\n// checkoutSession api call\nconst query = gql`\n ${SepaMandateAcceptanceNeededFragment}\n query SEPA_CONFIRMATION_QUERY($token: String!) {\n checkoutSession(token: $token) {\n paymentContingencies {\n sepaMandateAcceptanceNeeded {\n ...SepaMandateAcceptanceNeededFragment\n }\n }\n }\n }\n`;\n\nconst shouldLoadFeatureComponent = (props) => {\n const contingency = get(\n props,\n 'allQueryData.0.data.checkoutSession.paymentContingencies.sepaMandateAcceptanceNeeded'\n );\n const bankData = get(props, 'feature.data.bankData');\n\n return Boolean(bankData) || Boolean(contingency);\n};\n\n/**\n * @description `SepaConfirmation` component resolves the SepaMandateAcceptanceNeeded payment contingency through the interstitial page.\n *\n * @summary On clicking the continue button in the review page, if the selected FI needs to resolve the\n * contingency then sepa interstitial will get triggered. Once the user clicks 'agree & continue' the contingency\n * will be cleared.\n *\n * @todo Currently the payWith feature will query the SepaMandateAcceptanceNeededFragment. This feature will use the cache-only\n * fetch policy to get the data from the cache instead of making its own query to the server. In the future it would be good to\n * remove this query from payWith, so that payWith only has to query the 'id' to check for a SEPA contingency.\n *\n */\nconst SepaConfirmation = Feature({\n id: 'SEPA_CONFIRMATION',\n interstitial: true,\n interstitialOptions: {\n onBeforeCloseFn: () => {\n updateFeature('SEPA_CONFIRMATION', { data: { bankData: null } });\n updateFeature('CHECKOUT_BUTTON', {\n data: {\n status: CHECKOUT_BUTTON_STATES.INITIAL,\n inContingencyFlow: false,\n },\n });\n },\n headerTitleFunc: () => getContent('sepa.title'),\n },\n LoadingComponent: InterstitialLoading,\n shouldLoadFeatureComponent,\n queries: [{ query: query, variables: { token: getToken() }, fetchPolicy: 'cache-only' }],\n})(() => import('./SepaInterstitial'));\n\nexport default SepaConfirmation;\n","import Feature from '@/components/Feature';\nimport getContent from '@/lib/content';\nimport { InterstitialLoading } from '@/shared/components/Loading';\nimport { logger } from '@paypalcorp/c3-util-logger';\nimport { ADD_CARD_PAYLOAD } from '@paypalcorp/c3-util-logger';\nimport { isObject } from '@paypalcorp/c3-util-lang';\nimport { updateContingency } from '@paypalcorp/c3-util-store';\n\nconst shouldAutoDisplayComponent = ({ contingencies, features }) => {\n const hasContingency = contingencies && contingencies.SHARED_INSTRUMENT_CONSENT_REQUIRED;\n const hasFormData = features.ADD_CARD.data && isObject(features.ADD_CARD.data);\n\n return hasContingency && hasFormData;\n};\n\nconst shouldLoadFeatureComponent = ({ contingencies, features }) => {\n const shouldLoadFeature = shouldAutoDisplayComponent({ contingencies, features });\n\n if (shouldLoadFeature) {\n logger.fpti(\n 'prepareSaveSharedCardConsent',\n ADD_CARD_PAYLOAD({ action: 'prepareSaveSharedCardConsent' })\n );\n }\n\n // this `SharedCardConsent` test is so flaky...not exactly sure why, but it's annoying 🤦‍♂️\n // so we should always load this feature when running tests\n return process.env.NODE_ENV === 'test' || shouldLoadFeature;\n};\n\n// This feature will get loaded when 'SHARED_INSTRUMENT_CONSENT_REQUIRED' contingency is thrown from FI\n// This will display a shared card consent page to send consent of the logged in user to share his details to the card owner\nconst SharedCardConsent = Feature({\n id: 'SHARED_CARD_CONSENT_PAGE',\n interstitial: true,\n interstitialOptions: {\n onBeforeCloseFn: () => {\n updateContingency('SHARED_INSTRUMENT_CONSENT_REQUIRED', { clear: true });\n },\n headerTitleFunc: () => getContent('sharedCard.consentPageHeader'),\n },\n LoadingComponent: InterstitialLoading,\n subscribeTo: ['ADD_CARD', 'SPLIT_TENDER_GATE'],\n shouldLoadFeatureComponent,\n shouldAutoDisplayComponent,\n contingencies: ['NEED_CREDIT_CARD', 'SHARED_INSTRUMENT_CONSENT_REQUIRED'],\n})(() => import('./SharedCardConsent'));\n\nexport default SharedCardConsent;\n","import Feature from '@/components/Feature';\nimport getContent from '@/lib/content';\nimport { InterstitialLoading } from '@/shared/components/Loading';\nimport { logger } from '@paypalcorp/c3-util-logger';\nimport { ADD_CARD_PAYLOAD } from '@paypalcorp/c3-util-logger';\nimport { updateContingency } from '@paypalcorp/c3-util-store';\n\nconst shouldAutoDisplayComponent = ({ contingencies }) => {\n return contingencies && contingencies.ORIGINAL_USER_CHECK_PENDING;\n};\n\nconst shouldLoadFeatureComponent = ({ contingencies, feature }) => {\n const shouldLoadFeature = shouldAutoDisplayComponent({ contingencies });\n const from = feature.data && feature.data.from;\n\n // instrumentation to track only if user is coming from add card and has skipped consent page\n if (shouldLoadFeature && from !== 'shared_card_consent') {\n logger.fpti(\n 'prepareWaitAfterSharedCardConsent',\n ADD_CARD_PAYLOAD({ action: 'prepareWaitAfterSharedCardConsent' })\n );\n }\n\n return shouldLoadFeature;\n};\n\nconst getHeaderTitle = ({ contingencies }) => {\n if (contingencies.NEED_CREDIT_CARD) {\n return getContent('sharedCard.waitPageHeaderNoFI');\n }\n return getContent('sharedCard.waitPageHeader');\n};\n\n// This feature will get loaded when 'ORIGINAL_USER_CHECK_PENDING' contingency is thrown from FI\n// This will display a shared card wait page giving an option to the logged in user to wait until the card owner gives a OK to share card\n\nconst SharedCardWait = Feature({\n id: 'SHARED_CARD_CONSENT_WAIT_PAGE',\n interstitial: true,\n interstitialOptions: {\n onBeforeCloseFn: () => {\n updateContingency('ORIGINAL_USER_CHECK_PENDING', { clear: true });\n },\n headerTitleFunc: getHeaderTitle,\n },\n LoadingComponent: InterstitialLoading,\n shouldLoadFeatureComponent,\n shouldAutoDisplayComponent,\n contingencies: ['NEED_CREDIT_CARD', 'ORIGINAL_USER_CHECK_PENDING'],\n})(() => import('./SharedCardWait'));\n\nexport default SharedCardWait;\n","import Feature from '@/components/Feature';\nimport getContent from '@/lib/content';\n\nconst SplitTenderBackup = Feature({\n id: 'SPLIT_TENDER_BACKUP',\n interstitial: true,\n interstitialOptions: {\n type: 'tall',\n showCloseBtn: true,\n headerTitleFunc: () => getContent('splitTender.backup.title'),\n },\n subscribeTo: ['SPLIT_TENDER_GATE'],\n})(() => import('./SplitTenderBackup'));\n\nexport default SplitTenderBackup;\n","// extracted by extract-css-chunks-webpack-plugin\nmodule.exports = {\"ppui-spacing-xl-2\":\"1.5rem\",\"ppuiSpacingXl2\":\"1.5rem\",\"ppui-grid-media-query-sm\":\"36rem\",\"ppuiGridMediaQuerySm\":\"36rem\",\"alert\":\"SplitTenderErrors_alert_1C_77\"};","import React from 'react';\nimport Feature from '@/components/Feature';\nimport { SPLIT_TENDER_GATE_QUERY } from '../query.gql';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport {\n experience as logExperience,\n gateLoaded as logGateLoaded,\n gateOpen as logGateOpen,\n} from '@/components/SplitTender/logging';\nimport { useFeature } from '@/components/Feature/hooks';\nimport { useState } from 'react';\nimport { useEligibilityContext } from '@/components/ContextProviders';\n\nconst FEATURE_NAME = 'SPLIT_TENDER_GATE';\n\n/**\n * Component responsible for being the gate to all split tender functionalities.\n */\nconst SplitTenderGate = Feature({\n id: FEATURE_NAME,\n queries: [\n {\n query: SPLIT_TENDER_GATE_QUERY,\n variables: { token: getToken() },\n fetchPolicy: 'cache-only',\n },\n ],\n})(() => import('./SplitTenderGate'));\n\n// This is to take advantage of using the mount and logging only once effectively\nexport default function SplitTenderEntry() {\n const featureSplitTenderGate = useFeature('SPLIT_TENDER_GATE');\n const featureTabs = useFeature('TABBED_PAYMENT_OPTIONS');\n const { showSplitTender } = useEligibilityContext();\n\n const [experienceLogged, setExperienceLogged] = useState(false);\n const mountSplitTender = () => {\n const { resolvedTreatment: gateTreatment } = featureSplitTenderGate?.experiment || {};\n const isGateOpen = gateTreatment === 'TREATMENT_1';\n logGateLoaded();\n logGateOpen(isGateOpen);\n };\n\n React.useEffect(mountSplitTender, []);\n React.useEffect(() => {\n if (!experienceLogged && featureSplitTenderGate && featureTabs) {\n const { resolvedTreatment: tabTreatment } = featureTabs?.experiment || {};\n\n const experience = tabTreatment === 'TREATMENT_1' ? 'TAB' : 'TOGGLE';\n\n logExperience(experience);\n setExperienceLogged(true);\n }\n }, [featureSplitTenderGate, featureTabs, experienceLogged]);\n\n return showSplitTender && <SplitTenderGate />;\n}\n","/*\n * This component is rendered for WPS flows (NOT for EC flows)\n * For WPS flows the payment is captured and the 'receipt' is shown\n * using WPSDonePage\n */\nimport React from 'react';\nimport { lazyComponent } from '@/lib/lazyLoad';\nimport { useFeature } from '../Feature/hooks';\nimport { useWPSDonePage } from './hooks';\n\nconst WPSDonePage = lazyComponent(() => import('./WPSDonePage'), {\n id: 'WPS_DONE_PAGE',\n});\n\nexport default function WPSDonePageContainer() {\n const { visible } = useFeature('WPS_DONE_PAGE');\n const { isPaymentCompleted } = useWPSDonePage();\n\n if (visible && isPaymentCompleted) {\n return <WPSDonePage />;\n }\n\n return null;\n}\n","import Feature from '@/components/Feature';\n\nconst LearnMoreInterstitial = Feature({\n id: 'PAY_LATER_LEARN_MORE',\n})(() => import('./LearnMoreInterstitial'));\n\nexport default LearnMoreInterstitial;\n","import React, { useState, useEffect } from 'react';\nimport { useFeature } from '../Feature/hooks';\nimport { useQuery } from '@apollo/react-hooks';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport { lazyComponent } from '@/lib/lazyLoad';\nimport { SOLD_OUT_PAGE_QUERY } from './query.gql';\n\nconst InventorySoldOut = lazyComponent(() => import('./InventorySoldOut'), {\n id: 'INVENTORY_SOLD_OUT',\n loading: () => <></>,\n});\n\nexport default function SoldOutPage() {\n\n const { visible, data: url } = useFeature('INVENTORY_SOLD_OUT');\n const [showPage, setShowPage] = useState(false);\n const [merchantName, setMerchantName] = useState(null);\n const [buttonUrl, setButtonUrl] = useState(null);\n const [soldOutItem, setSoldOutItem] = useState(null);\n\n const { data: soldOutPageData, loading } = useQuery(SOLD_OUT_PAGE_QUERY, {\n variables: {\n token: getToken(),\n },\n fetchPolicy: 'cache-only',\n });\n\n useEffect(() => {\n\n setShowPage(soldOutPageData?.checkoutSession?.cart?.showSoldoutPage ?? false);\n setMerchantName(soldOutPageData?.checkoutSession?.merchant?.name || '');\n setButtonUrl(soldOutPageData?.checkoutSession?.cart?.soldoutUrl || url?.soldOutUrl || null);\n setSoldOutItem(soldOutPageData?.checkoutSession?.cart?.items[0]?.name || null);\n \n }, [soldOutPageData, url]);\n \n if (!loading && (showPage || (visible && soldOutPageData))) {\n return (\n <InventorySoldOut\n merchantName={merchantName}\n buttonUrl={buttonUrl}\n soldOutItem={soldOutItem}\n />\n );\n }\n return null;\n}\n","import gql from 'graphql-tag';\n\nexport const SOLD_OUT_PAGE_QUERY = gql`\n query SoldOutPage($token: String!) {\n checkoutSession(token: $token) {\n cart {\n soldoutUrl\n showSoldoutPage\n items {\n name\n quantity\n }\n }\n merchant {\n name\n }\n }\n }\n`;\n","import React from 'react';\nimport { lazyComponent } from '@/lib/lazyLoad';\nimport { useFeature } from '@/components/Feature/hooks';\n\nconst SelectShippingOptionInterstitial = lazyComponent(\n () => import('./ShippingAndTaxInterstitial'),\n {\n id: 'SELECT_SHIPPING_OPTION_INTERSTITIAL',\n Interstitial: true,\n }\n);\n\nexport default function SelectShippingOptionInterstitialContainer() {\n const { visible } = useFeature('SHIP_TAX_INTERSTITIAL');\n\n if (!visible) {\n return null;\n }\n\n return <SelectShippingOptionInterstitial />;\n}\n","// extracted by extract-css-chunks-webpack-plugin\nmodule.exports = {\"ppui-spacing-lg\":\"0.75rem\",\"ppuiSpacingLg\":\"0.75rem\",\"container\":\"Hermione_container_7H6Em\",\"dividerClass\":\"Hermione_dividerClass_1JoNc\",\"cancelLink\":\"Hermione_cancelLink_2UjcA\"};","import React from 'react';\nimport getContent from '@/lib/content';\nimport { Button } from '@paypalcorp/pp-react-buttons';\nimport { updateFeature } from '@paypalcorp/c3-util-store';\nimport { arrayToObject } from '@/shared/utilities/arrayToObject';\nimport { useFeature } from '@/components/Feature/hooks';\nimport {\n selectInputProcess as logSelectInputProcess,\n splitContinueLoaded as logSplitContinueLoaded,\n} from '../logging';\n\nconst SplitTenderContinue = () => {\n const {\n data: { splitFundingOptions = [], selectedValues = [], incentiveValues = [] } = {},\n } = useFeature('SPLIT_TENDER_GATE');\n const { data: { preferredId } = {} } = useFeature('PAY_WITH');\n\n const allSplitValues = [...selectedValues, ...incentiveValues];\n\n const splitFundingOptionsObject = arrayToObject(splitFundingOptions, ({ id }) => id);\n\n const onSubmit = () => {\n // If user enter full amount only in one FI, then we're going to send to the PAY WITH screen\n if (selectedValues.length < 2) {\n updateFeature('SPLIT_TENDER_GATE', {\n data: { showSplitExperience: false, showSplitContinue: false },\n });\n return;\n }\n\n const selectedSplitFundingInstruments = allSplitValues.map(({ id, amount }) => ({\n value: amount,\n ...splitFundingOptionsObject[id],\n }));\n\n // Filter out any FI which is ineligible to be a backup\n const splitOptionsEligibleForBackup = allSplitValues.filter(\n ({ id }) => splitFundingOptionsObject[id]?.isEligibleForPrimaryInstrument\n );\n\n // Find if there is already a preferred FI selected by the user.\n // Because the preferred fi is not made available to us from the splitFundingOptions,\n // we get this info from the paywith component.\n let selectedBackupFundingInstrument = (\n splitOptionsEligibleForBackup.find(({ id }) => preferredId && id === preferredId) || {}\n ).id;\n\n const isBackupPreferred = !!selectedBackupFundingInstrument;\n // If there is no preferred FI on file, then pick the FI which has the largest amount to be the backup\n if (!selectedBackupFundingInstrument) {\n selectedBackupFundingInstrument = splitOptionsEligibleForBackup.sort(\n (fiA, fiB) => fiB?.amount - fiA?.amount\n )[0]?.id;\n }\n\n logSelectInputProcess(\n selectedSplitFundingInstruments,\n selectedBackupFundingInstrument,\n isBackupPreferred\n );\n\n updateFeature('SPLIT_TENDER_GATE', {\n data: {\n selectedSplitFundingInstruments,\n selectedBackupFundingInstrument,\n isSplitReady: true,\n },\n });\n };\n\n React.useEffect(() => {\n logSplitContinueLoaded();\n }, []);\n\n return (\n <Button onClick={onSubmit} data-testid={'split-tender-continue'}>\n {getContent('buttons.continue')}\n </Button>\n );\n};\n\nexport default SplitTenderContinue;\n","/**\n * Puts array items into an object and\n * uses a key function to determine the key\n * @param {Array} array\n * @param {Function} keyFn\n */\nexport const arrayToObject = (array, keyFn) =>\n array.reduce((object, item) => ({ ...object, [keyFn(item)]: item }), {});\n","import gql from 'graphql-tag';\nimport { PaymentContingenciesFragment } from '@paypalcorp/c3-graphql-fragments';\n\nexport const SCA_CONTINGENCY_QUERY = gql`\n ${PaymentContingenciesFragment}\n query SCA_CONTINGENCY_QUERY($token: String!, $experiences: [ThreeDSPaymentExperience]) {\n checkoutSession(token: $token) {\n cart {\n cancelUrl {\n href\n }\n }\n merchant {\n isTrustedBeneficiary\n logo {\n href\n }\n merchantId\n name\n }\n paymentContingencies {\n ...PaymentContingenciesFragment\n }\n secureCustomerAuthenticationContext {\n status\n exemptReason\n }\n }\n }\n`;\n","import { useQuery } from '@apollo/react-hooks';\nimport { useFeature } from '@/components/Feature/hooks';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport { threeDsExperienceVars } from '@paypalcorp/c3-util-threed-ds';\nimport { SCA_CONTEXT_STATUS } from './constants';\nimport { SCA_CONTINGENCY_QUERY } from './query.gql';\n\nexport const useSca = () => {\n const { experiment: tbExperiment } = useFeature('TRUSTED_BENEFICIARY_OPT_IN');\n const { data } = useQuery(SCA_CONTINGENCY_QUERY, {\n variables: threeDsExperienceVars({ token: getToken() }),\n fetchPolicy: 'cache-only',\n });\n\n if (!data) {\n return { isLoading: true };\n }\n\n const checkoutSession = data?.checkoutSession || {};\n const {\n cart = {},\n merchant = {},\n paymentContingencies = {},\n secureCustomerAuthenticationContext,\n } = checkoutSession;\n\n const cancelUrl = cart?.cancelUrl?.href;\n const isTrustedBeneficiary = merchant?.isTrustedBeneficiary;\n const logo = merchant?.logo?.href;\n const merchantId = merchant?.merchantId;\n const name = merchant?.name;\n const contextId = paymentContingencies?.strongCustomerAuthenticationRequired?.contextId;\n const { status: scaStatus, exemptReason } = secureCustomerAuthenticationContext || {};\n\n const { COMPLETE, IN_PROGRESS } = SCA_CONTEXT_STATUS;\n\n const trustedBeneficiaryEligible =\n isTrustedBeneficiary === false &&\n scaStatus === COMPLETE &&\n tbExperiment?.resolvedTreatment !== 'CONTROL';\n\n const reviewBeforeLoginEligible = Boolean(contextId) && scaStatus === IN_PROGRESS;\n\n return {\n exemptReason,\n isLoading: false,\n reviewBeforeLoginEligible,\n reviewBeforeLoginProps: {\n cancelUrl,\n contextId,\n name,\n },\n trustedBeneficiaryEligible,\n trustedBeneficiaryProps: {\n logo,\n merchantId,\n },\n };\n};\n","import gql from 'graphql-tag';\n\nexport const MERCHANT_DESCRIPTION_QUERY = gql`\n query MerchantDescriptionQuery($token: String!) {\n checkoutSession(token: $token) {\n cart {\n description\n }\n merchant {\n name\n }\n checkoutSessionType\n }\n }\n`;\n","import React from 'react';\nimport { useQuery } from '@apollo/react-hooks';\nimport { isBillingAgreement } from '@/lib/checkoutSession';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport getContent from '@/lib/content';\nimport Divider from '@/shared/components/Divider';\nimport { heading as headingStyles } from '@/App.css';\nimport styles from './styles.css';\nimport { MERCHANT_DESCRIPTION_QUERY } from './query.gql';\n\n/**\n * MerchantDescription displays description from merchant \n * ONLY if provided by merchant and is billing agreement with purchase flow\n */\n\nconst MerchantDescription = (props) => {\n const { data } = useQuery(MERCHANT_DESCRIPTION_QUERY, {\n variables: { token: getToken() },\n fetchPolicy: 'cache-only',\n });\n\n const isBillingAgreementWithPurchase = isBillingAgreement(\n data?.checkoutSession?.checkoutSessionType\n );\n const merchantName = data?.checkoutSession?.merchant?.name;\n const merchantDescription = data?.checkoutSession?.cart?.description;\n\n const merchantMsgHeader = getContent('billingAgreement.merchantMsgHeader', {\n merchantName: merchantName || getContent('base.theMerchant'),\n });\n\n if (!merchantDescription || !isBillingAgreementWithPurchase) {\n return null;\n }\n\n return (\n <>\n <section data-testid=\"merchantdescription-container\" className={styles.container}>\n <h2 data-testid=\"merchantdescription-header\" className={`${styles.title} ${headingStyles}`}>\n {merchantMsgHeader}\n </h2>\n <p className={styles.text} data-testid=\"merchantdescription-text\">\n {merchantDescription}\n </p>\n </section>\n <Divider />\n </>\n );\n};\n\nexport default MerchantDescription;\n","import React from 'react';\nimport { Alert } from '@paypalcorp/pp-react';\nimport { updateFeature } from '@paypalcorp/c3-util-store';\nimport { useFeature } from '@/components/Feature/hooks';\nimport getContent from '@/lib/content';\nimport styles from './styles.css';\n\nconst SplitTenderErrors = () => {\n const featureSplitTenderGate = useFeature('SPLIT_TENDER_GATE');\n const { errorsOccurrenceCount = 0, showSplitTenderError = false } =\n featureSplitTenderGate?.data || {};\n\n const messageId =\n errorsOccurrenceCount > 2\n ? 'splitTender.toast.stillPayUsualWay'\n : 'splitTender.toast.pleaseRetryAgain';\n\n // The general `temporary` rule is that we're going to allow users to try submitting their order three times per session,\n // if for some reason all of the attempts resulted with an error, then we're going to disable the Split experience for now.\n // Note that this is a temporary solution since we do not know what all of the error types that PAPS returns are.\n if (errorsOccurrenceCount > 2) {\n updateFeature('SPLIT_TENDER_GATE', {\n visible: false,\n data: {\n splitFundingOptions: [],\n selectedSplitFundingInstruments: [],\n isSplitReady: false,\n userCanSplit: false,\n showSplitExperience: false,\n },\n });\n }\n\n return (\n showSplitTenderError && (\n <div data-testid=\"split-tender-warning-alert\" className={styles.alert}>\n <Alert type=\"warning\">{getContent(messageId)}</Alert>\n </div>\n )\n );\n};\n\nexport default SplitTenderErrors;\n","import React from 'react';\nimport cx from 'classnames';\n\nimport { CryptoQuoteProvider } from '@paypalcorp/c3-context-providers';\n\nimport { BillingAgreement } from '@/components/BillingAgreement';\nimport { Econsent } from '@/components/Econsent';\nimport { LANDING_PAGE } from '@/lib/landingPage';\nimport { RewardsInterstitial } from '@/components/Rewards';\nimport { SelectInstallmentsInterstitial } from '@/components/Installments';\nimport Spinner from '@/components/Spinner';\nimport { ThreeDSTwoConfirmation } from '@/components/ThreeDSTwoConfirmation';\nimport AddFI from '@/components/AddFI';\nimport AddNormalizedAddress from '@/components/AddNormalizedAddress';\nimport AddShipping from '@/components/ShipTo/AddShipping';\nimport CancelLink from '@/components/CancelLink';\nimport CartDropdown from '@/components/CartDropdown';\nimport CheckoutButtonContainer from '@/components/CheckoutButtonContainer';\nimport CipDisclaimer from '@/components/Disclaimer/CipDisclaimer';\nimport CreditApplyPortable from '@/components/CreditApplyPortable';\nimport CreditOffer from '@/components/CreditOffer';\nimport CreditOfferAsFi from '@/components/CreditOfferAsFi';\nimport CreditOfferAsFiDE from '@/components/CreditOfferAsFiDE';\nimport CreditSingleFIDisplay from '@/components/CreditSingleFIDisplay';\nimport CryptoTermsInterstitial from '@/components/Crypto/CryptoTermsInterstitial';\nimport CurrencyConversion from '@/components/CurrencyConversion';\nimport CvvConfirmation from '@/components/CvvConfirmation';\nimport Divider from '@/shared/components/Divider';\nimport DolphinBanner from '@/components/Dolphin/DolphinBanner';\nimport DolphinInterstitial from '@/components/Dolphin/DolphinInterstitial';\nimport DonationShareAddress from '@/components/DonationShareAddress';\nimport Footer from '@/components/Footer';\nimport GiveAtCheckout from '@/components/GiveAtCheckout';\nimport Header from '@/components/Header';\nimport MerchantDescription from '@/components/MerchantDescription';\nimport MerchantLogo from '@/components/MerchantLogo';\nimport Notifications from '@/components/Notifications';\nimport OpenBanking from '@/components/OpenBanking';\nimport OTPConfirmation from '@/components/OTPConfirmation';\nimport PaymentOptions from '@/components/PaymentOptions';\nimport PersonalizedBanner from '@/components/PersonalizedBanner';\nimport PolicyAgreement from '@/components/PolicyAgreement';\nimport RedirectToCredit from '@/components/RedirectToCredit';\nimport RestrictedAccount from '@/components/ErrorPages/RestrictedAccount';\nimport ReturnFromCredit from '@/components/ReturnFromCredit';\nimport ReviewPageAlert from '@/components/ReviewPageAlert';\nimport Sca from '@/components/Sca';\nimport SelectFi from '@/components/SelectFi';\nimport SelectShippingInterstitial from '@/components/ShipTo/SelectShippingInterstitial';\nimport SepaConfirmation from '@/components/SepaConfirmation';\nimport SharedCardConsent from '@/components/SharedCard/SharedCardConsent';\nimport SharedCardWait from '@/components/SharedCard/SharedCardWait';\nimport ShipTo from '@/components/ShipTo';\nimport SplitTenderBackup from '@/components/SplitTender/SplitTenderBackup';\nimport SplitTenderErrors from '@/components/SplitTender/SplitTenderErrors';\nimport SplitTenderGate from '@/components/SplitTender/SplitTenderGate';\nimport ThreeDSConfirmation from '@/components/ThreeDSConfirmation';\nimport WPSDonePage from '@/components/WPSDonePage';\nimport PayLaterLearnMore from '@/components/PayLater/LearnMoreInterstitial';\nimport InventorySoldOut from '@/components/InventorySoldOut';\nimport ShippingAndTaxInterstitial from '@/components/ShippingAndTax/ShippingAndTaxInterstitial';\n\n\nimport AppStyles from '../../App.css';\nimport styles from './styles.css';\n\n// context providers\nimport { composeProviders } from '@/lib/contextProvider';\nimport {\n EligibilityProvider,\n PayLaterProvider,\n PayProvider,\n usePayContext,\n} from '@/components/ContextProviders';\n\n// resolves from right to left\nexport const Providers = composeProviders(EligibilityProvider, PayLaterProvider, PayProvider);\n\nconst Hermione = () => {\n const { fundingOptions, selectedFundingOption } = usePayContext();\n\n return (\n <CryptoQuoteProvider fundingOptions={fundingOptions}>\n <div className={cx(AppStyles.pageWrapper, 'modal-foreground-container')}>\n <header>\n <MerchantLogo />\n <Header />\n <Divider className={styles.dividerClass} />\n <CartDropdown />\n <SplitTenderErrors />\n </header>\n <main role=\"main\" className={AppStyles.container}>\n <DolphinBanner />\n <PersonalizedBanner />\n <Divider className={styles.dividerClass} />\n <ReviewPageAlert />\n <Notifications className={AppStyles.notifications} />\n <MerchantDescription />\n <DonationShareAddress />\n <ShipTo />\n <Divider />\n <CipDisclaimer />\n <PaymentOptions />\n <CreditOfferAsFi />\n {/*\n NOTE: `CreditOfferAsFiDE` and `CreditOfferAsFi` will be merged into a\n single `CreditOfferAsFi` component someday. Please see the comment here:\n ./CreditOfferAsFiDE/index.js\n */}\n <CreditOfferAsFiDE />\n <CreditSingleFIDisplay />\n <BillingAgreement />\n <CreditOffer placement={LANDING_PAGE.REVIEW} />\n <GiveAtCheckout />\n <PolicyAgreement />\n <CheckoutButtonContainer />\n <CancelLink className={styles.cancelLink} />\n <RedirectToCredit />\n <ReturnFromCredit />\n </main>\n <Footer />\n\n {/* interstitial features */}\n <Spinner selectedFI={selectedFundingOption?.fundingInstrument} />\n <Sca />\n <Econsent />\n <AddFI />\n <AddShipping />\n <SelectShippingInterstitial />\n <AddNormalizedAddress />\n <CryptoTermsInterstitial />\n <CurrencyConversion />\n <CvvConfirmation />\n <ThreeDSConfirmation />\n <SharedCardConsent />\n <SharedCardWait />\n <OpenBanking />\n <DolphinInterstitial />\n <CreditApplyPortable />\n <SelectFi />\n <SepaConfirmation />\n <RewardsInterstitial />\n <SelectInstallmentsInterstitial />\n <OTPConfirmation />\n <RestrictedAccount />\n <SplitTenderGate />\n <SplitTenderBackup />\n <ThreeDSTwoConfirmation />\n <ShippingAndTaxInterstitial />\n <WPSDonePage />\n <PayLaterLearnMore />\n <InventorySoldOut />\n </div>\n </CryptoQuoteProvider>\n );\n};\n\nexport default Providers(Hermione);\n","import React from 'react';\n\n/**\n * helper to Compose Context Providers\n */\nexport const composeProviders = (...Providers) => (Child) => (props) =>\n Providers.reduce((acc, Provider) => <Provider>{acc}</Provider>, <Child {...props} />);\n","import { logger, GENERIC_PAYLOAD } from '@paypalcorp/c3-util-logger';\n\n// construct popup window features when user clicks on a link\n// which we want to open as a native popup\nconst getWindowFeatures = () => {\n const config = {\n popupWindowName: 'popup',\n width: 835,\n height: 500,\n\n popupWindowFeatures: {\n location: 1,\n status: 1,\n scrollbars: 1,\n resizable: 1,\n toolbar: 0,\n menubar: 0,\n },\n };\n\n let left = 0;\n let top = 0;\n\n // Edge 16 / 17 throws unspecified error in this block of code\n // and fallbacks as a result on initial render\n // To prevent fallbacks:\n\n // 1. wrap this code in try / catch\n // 2. execute it only when user clicks on a link\n try {\n if (window.outerWidth) {\n left = Math.round((window.outerWidth - config.width) / 2) + window.screenX;\n top = Math.round((window.outerHeight - config.height) / 2) + window.screenY;\n } else if (window.screen.width) {\n left = Math.round((window.screen.width - config.width) / 2);\n top = Math.round((window.screen.height - config.height) / 2);\n }\n } catch (err) {\n const { message, stack } = err || {};\n\n logger.cal.info('popup_link_get_features_error', {\n error: message,\n stack: JSON.stringify(stack),\n });\n }\n\n let features = Object.keys(config.popupWindowFeatures)\n .map(function (feature) {\n return `${feature}=${config.popupWindowFeatures[feature]}`;\n })\n .join(',');\n\n // put together WindowFeatures, since, window.open needs it as a string\n return `${features},width=${config.width},height=${config.height},left=${left},top=${top}`;\n};\n\nconst popup = ({ href, name }) => {\n const features = getWindowFeatures();\n\n logger.cal.info('popup_link_open', { href });\n logger.fpti(\n 'POPUP_LINK_OPEN',\n GENERIC_PAYLOAD({\n stateName: 'popup_link',\n action: 'popup_link_open',\n popup_link: href,\n })\n );\n window.open(href, name, features, false);\n return false;\n};\n\nexport default popup;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { isFunction } from '@paypalcorp/c3-util-lang';\nimport popup from './popup';\n\nexport default function PopupLink({ link = {}, onClick }) {\n const { href, label, style, tabIndex } = link;\n return (\n <a\n data-testid=\"popup-link\"\n className={style}\n href={href}\n onClick={(e) => {\n e.preventDefault();\n if (isFunction(onClick)) {\n onClick();\n }\n popup(link);\n }}\n tabIndex={tabIndex}\n >\n {label}\n </a>\n );\n}\n\nPopupLink.propTypes = {\n link: PropTypes.shape({\n href: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n style: PropTypes.string,\n tabIndex: PropTypes.string,\n }),\n onClick: PropTypes.func,\n};\n","import { getUserAction } from '@paypalcorp/c3-shared-globals';\n\nexport const CHECKOUT_USER_ACTION_FLOWS = {\n CONTINUE: 'CONTINUE',\n BUY_NOW: 'BUY_NOW',\n};\n\n/**\n * Indicates if it's a Continue or Pay Now checkout flow.\n * In case of Continue, buyer will be redirected to the merchant page without processing the payment.\n * In case of Pay Now, Paypal will process the payment immediately when the customer clicks Pay Now\n *\n * There are 3 ways for merchants to set PAY NOW flow.\n *\n * 1. via Order API v2 by setting user_action as 'PAY_NOW' (https://developer.paypal.com/docs/api/orders/v2/)\n * 2. via attaching 'useraction=commit' to the checkout url after token creation\n * 3. via commit=true param for incontext\n * 4. in case of WPS the flow is always PAY_NOW (xorouternodeweb attaches useraction=commit)\n * @param {String} checkoutSessionUserAction value from application data that can be equal to PAY_NOW or CHECKOUT\n */\nexport function getCheckoutUserActionFlow(checkoutSessionUserAction) {\n if (checkoutSessionUserAction === 'PAY_NOW' || getUserAction() === 'commit') {\n return CHECKOUT_USER_ACTION_FLOWS.BUY_NOW;\n }\n\n return CHECKOUT_USER_ACTION_FLOWS.CONTINUE;\n}\n\nexport function getIsPayNowUserActionFlow(checkoutSessionUserAction) {\n return (\n getCheckoutUserActionFlow(checkoutSessionUserAction) === CHECKOUT_USER_ACTION_FLOWS.BUY_NOW\n );\n}\n\nexport function getIsContinueUserActionFlow(checkoutSessionUserAction) {\n return (\n getCheckoutUserActionFlow(checkoutSessionUserAction) === CHECKOUT_USER_ACTION_FLOWS.CONTINUE\n );\n}\n","import { logger, ERROR_PAYLOAD, TRANSITION_PAYLOAD } from '@paypalcorp/c3-util-logger';\nconst prefix = 'split_tender_';\n\nconst _logger = (event, transition, payload = {}) => {\n event = `${prefix}${event}`.toLowerCase();\n transition = `${prefix}${transition}`.toLocaleLowerCase();\n logger.fpti(\n event,\n TRANSITION_PAYLOAD({\n from: event,\n to: transition,\n ...payload,\n })\n );\n};\n\nexport const loggit = ({\n stateName,\n process,\n transition,\n splitFiList,\n backupSelected,\n remaining = {},\n}) => {\n transition = transition || (process ? 'COMPLETED' : 'SHOWN');\n const transitionName = `${stateName}_${transition}`.toUpperCase();\n const params = {};\n if (splitFiList) {\n params.split_fi_list = JSON.stringify(splitFiList);\n }\n if (backupSelected) {\n params.split_backup_selected = backupSelected;\n }\n _logger(stateName, transitionName, { ...params, ...remaining });\n};\n\nexport const amountEntry = (payload = {}) => {\n const { amount, entryType, fiId } = payload;\n const stateName = 'AMOUNT_ENTRY';\n const transition = 'PROCESS';\n loggit({\n stateName,\n transition,\n remaining: {\n amount,\n entry_type: entryType,\n fi_id: fiId,\n },\n });\n};\n\nexport const experience = (type = 'BUTTON') => {\n const stateName = 'EXPERIENCE';\n const transition = type.toUpperCase();\n loggit({\n stateName,\n transition,\n });\n};\n\n// logged when ELMO gate component is loaded\nexport const gateLoaded = () => {\n const stateName = 'GATE';\n loggit({ stateName, transition: 'LOADED' });\n};\n\n// logged when ELMO gate state: [open | closed]\nexport const gateOpen = (isOpen = false) => {\n const stateName = 'GATE';\n const transition = isOpen ? 'OPEN' : 'CLOSED';\n loggit({ stateName, transition });\n};\n\n// logged when doing a gql request for split tender options\nexport const requestSplitTenderOptions = () => {\n const stateName = 'QUERY';\n const transition = 'REQUEST';\n loggit({ stateName, transition });\n};\n\n// logged when gql request is completed\nexport const responseSplitTenderOptions = (splitFundingOptions = null) => {\n const stateName = 'QUERY';\n const transition = 'RESPONSE';\n const splitFiList = splitFundingOptions.map((option) => {\n let {\n id,\n isPreferred,\n isEligibleForPrimaryInstrument,\n availableAmount,\n mustUseFullAmount,\n canEditAmount,\n fundingInstrument: { type: fundingInstrumentType },\n canSplitWith,\n } = option;\n return {\n id,\n isPreferred,\n isEligibleForPrimaryInstrument,\n availableAmount,\n mustUseFullAmount,\n canEditAmount,\n fundingInstrumentType,\n canSplitWith,\n };\n });\n loggit({ stateName, transition, splitFiList });\n};\n\nexport const triggerLoaded = (type = 'BUTTON') => {\n const stateName = 'TRIGGER_LOADED';\n const transition = type.toUpperCase();\n loggit({\n stateName,\n transition,\n });\n};\n\nexport const selectInputLoaded = (loaded = false) => {\n const stateName = 'SELECTINPUT';\n const transition = loaded ? 'LOADED' : 'UNLOADED';\n loggit({\n stateName,\n transition,\n });\n};\n\nexport const splitContinueLoaded = () => {\n const stateName = 'SELECTINPUT';\n const transition = 'CONTINUE';\n loggit({\n stateName,\n transition,\n });\n};\n\nexport const selectInputProcess = (splitFiList, backupSelected, isBackupPreferred) => {\n const stateName = 'SELECTINPUT';\n const transition = 'PROCESS';\n loggit({\n stateName,\n transition,\n splitFiList,\n backupSelected,\n remaining: {\n backup_logic: isBackupPreferred ? 'preferred_fi' : 'highest_amount',\n },\n });\n};\n\nexport const backupViewShown = (splitFundingOptions = null) => {\n const stateName = 'BACKUP_VIEW';\n const process = false;\n const splitFiList = splitFundingOptions.map((option) => option.id);\n loggit({ stateName, process, splitFiList });\n};\n\nexport const backupViewCompleted = (backupSelected) => {\n const stateName = 'BACKUP_VIEW';\n const process = true;\n loggit({ stateName, process, backupSelected });\n};\n\nexport const payWithViewShown = () => {\n const stateName = `PAYWITH_VIEW`;\n const process = false;\n loggit({ stateName, process });\n};\n\nexport const payWithChangeClicked = () => {\n const stateName = `PAYWITH_CHANGE`;\n const transition = 'CLICKED';\n loggit({ stateName, transition });\n};\n\nexport const payWithChangeViewShown = () => {\n const stateName = `PAYWITH_CHANGE_VIEW`;\n const process = false;\n loggit({ stateName, process });\n};\n\nexport const payWithViewChangeAmounts = () => {\n const stateName = `PAYWITH_CHANGE_VIEW`;\n const transition = 'CHANGE_AMOUNTS';\n loggit({ stateName, transition });\n};\n\nexport const payWithViewCancelSplit = () => {\n const stateName = `PAYWITH_CHANGE_VIEW`;\n const transition = 'CANCEL_SPLIT';\n loggit({ stateName, transition });\n};\n\nexport const payWithChangeBackup = () => {\n const stateName = `PAYWITH_VIEW`;\n const transition = 'CHANGE_BACKUP';\n loggit({ stateName, transition });\n};\n\nexport const approvePaymentPrepare = (splitFundingOptions) => {\n const stateName = `REVIEW`;\n const transition = 'APPROVE_REQUEST';\n let backupSelected;\n const splitFiList = splitFundingOptions.map((option) => {\n let { isPrimaryInstrument, id, amount } = option;\n if (isPrimaryInstrument) {\n backupSelected = id;\n }\n return { id, isPrimaryInstrument, amount };\n });\n loggit({ stateName, transition, splitFiList, backupSelected });\n};\n\n// splitFiList has selected values and their amounts\nexport const approvePaymentProcess = (\n splitFundingOptions,\n currencyCode,\n buyerCountry,\n shipping = {}\n) => {\n const stateName = `REVIEW`;\n const transition = 'PROCESS_REVIEW';\n let backupSelected;\n const splitFiList = splitFundingOptions.map((option) => {\n let { isPrimaryInstrument, id, amount } = option;\n if (isPrimaryInstrument) {\n backupSelected = id;\n }\n return { id, isPrimaryInstrument, amount };\n });\n const remaining = {\n currency_code: currencyCode,\n buyer_country: buyerCountry,\n ...shipping,\n };\n loggit({ stateName, transition, splitFiList, backupSelected, remaining });\n\n // analytics/instrumentation req to match current payment completed log\n logger.fpti(\n 'approvePayment',\n TRANSITION_PAYLOAD({\n from: stateName,\n to: transition.toLowerCase(),\n split_fi_list: JSON.stringify(splitFiList),\n split_backup_selected: backupSelected,\n ...remaining,\n })\n );\n};\n\nexport const approvePaymentError = (error) => {\n logger.fpti(`approvePaymentSplitTenderError`, ERROR_PAYLOAD({ code: 'GQLError', error }));\n logger.fpti(`approvePaymentError`, ERROR_PAYLOAD({ code: 'GQLError' }));\n};\n\n// try to log context_id/token\n// SPLIT_TENDER_XOB_\n// REQUEST\n// RESPONSE\n","import React from 'react';\nimport { uniqueStr } from '@checkout/react-components';\nimport LoadingContainer from '@/shared/components/LoadingContainer';\nimport styles from './styles.css';\n\nexport default function PayWithLoader() {\n const clipPathId = uniqueStr();\n const gradientId = uniqueStr();\n\n return (\n <LoadingContainer className={styles.loading}>\n <svg viewBox=\"0 0 400 141\" preserveAspectRatio=\"xMidYMid meet\" className={styles.svg}>\n <rect\n clipPath={`url(#${clipPathId})`}\n x=\"0\"\n y=\"0\"\n width=\"400\"\n height=\"141\"\n style={{ fill: `url(#${gradientId})` }}\n />\n <defs>\n <clipPath id={clipPathId}>\n <circle cx=\"11\" cy=\"17\" r=\"10\" />\n <rect x=\"30\" y=\"10\" rx=\"1\" ry=\"1\" width=\"20\" height=\"15\" />\n <rect x=\"61\" y=\"6\" rx=\"1\" ry=\"1\" width=\"220\" height=\"12\" />\n <rect x=\"61\" y=\"22\" rx=\"1\" ry=\"1\" width=\"150\" height=\"8\" />\n <circle cx=\"11\" cy=\"64\" r=\"11\" />\n <rect x=\"30\" y=\"57\" rx=\"1\" ry=\"1\" width=\"20\" height=\"15\" />\n <rect x=\"61\" y=\"53\" rx=\"1\" ry=\"1\" width=\"220\" height=\"12\" />\n <rect x=\"61\" y=\"69\" rx=\"1\" ry=\"1\" width=\"150\" height=\"8\" />\n <circle cx=\"11\" cy=\"111\" r=\"11\" />\n <rect x=\"30\" y=\"104\" rx=\"1\" ry=\"1\" width=\"20\" height=\"15\" />\n <rect x=\"61\" y=\"100\" rx=\"1\" ry=\"1\" width=\"220\" height=\"12\" />\n <rect x=\"61\" y=\"116\" rx=\"1\" ry=\"1\" width=\"150\" height=\"8\" />\n </clipPath>\n <linearGradient id={gradientId}>\n <stop offset=\"-0.911697\" stopColor=\"#f3f3f3\">\n <animate attributeName=\"offset\" values=\"-2; 1\" dur=\"2s\" repeatCount=\"indefinite\" />\n </stop>\n <stop offset=\"-0.411697\" stopColor=\"#ecebeb\">\n <animate\n attributeName=\"offset\"\n values=\"-1.5; 1.5\"\n dur=\"2s\"\n repeatCount=\"indefinite\"\n />\n </stop>\n <stop offset=\"0.088303\" stopColor=\"#f3f3f3\">\n <animate attributeName=\"offset\" values=\"-1; 2\" dur=\"2s\" repeatCount=\"indefinite\" />\n </stop>\n </linearGradient>\n </defs>\n </svg>\n </LoadingContainer>\n );\n}\n","import { Loading } from './Loading';\nimport gql from 'graphql-tag';\nimport { getToken } from '@paypalcorp/c3-shared-globals';\nimport { ShippingCartAmountFragment } from '@paypalcorp/c3-graphql-fragments';\nimport Feature from '@/components/Feature';\n\nexport const ShippingAddressesFragment = gql`\n fragment ShippingAddressesFragment on CheckoutShippingAddress {\n isPrimary\n isSelected\n isDisabled\n isDefault\n state\n postalCode\n country\n city\n name {\n fullName\n }\n fullAddress\n addressId\n __typename\n }\n`;\n\nexport const shipToQuery = gql`\n ${ShippingAddressesFragment}\n ${ShippingCartAmountFragment}\n query ShipToQuery($token: String!) {\n checkoutSession(token: $token) {\n merchant {\n name\n }\n shippingAddresses {\n ...ShippingAddressesFragment\n }\n flags {\n isChangeShippingAddressAllowed\n hideShipping\n blockNonDomesticShipping\n isOptionallyShareAddress\n isSntSupported\n }\n cart {\n total {\n currencyFormatSymbolISOCurrency\n currencyCode\n currencyValue\n }\n amounts {\n ...ShippingCartAmountFragment\n }\n shippingMethods {\n id\n type\n label\n selected\n amount {\n currencyCode\n currencyValue\n currencyFormatSymbolISOCurrency\n }\n }\n cancelUrl {\n href\n }\n paymentId\n }\n }\n }\n`;\n\nconst ShipTo = Feature({\n id: 'SHIP_TO',\n queries: [\n {\n query: shipToQuery,\n variables: { token: getToken() },\n context: { planningBatch: true },\n },\n ],\n subscribeTo: ['DONATION_SHARE_ADDRESS', 'CREDIT_SINGLE_FI_DISPLAY'],\n LoadingComponent: Loading,\n})(() => import('./ShipTo'));\n\nexport default ShipTo;\n","import React from 'react';\nimport styles from './styles.css';\nimport { Text } from '@paypalcorp/pp-react';\nimport cx from 'classnames';\n\n/**\n * Divider component\n * @param {string} className | if you want to add additional styles.\n * @returns {Divider} Component\n *\n * Example: Usage -\n * 1. Divider without content.\n <Divider/>\n\n * 2. Divider with content\n <Divider>\n <Divider.Content>{getContent('base.paypal')}</Divider.Content>\n </Divider>\n */\n\nconst Divider = (props) => {\n const { className, children } = props;\n\n const dividerClasses = cx(className, styles.container);\n\n return (\n <div className={dividerClasses}>\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child);\n }\n })}\n </div>\n );\n};\n\nconst Content = (props) => {\n const { className, children, ...rest } = props;\n\n const contentClasses = cx(styles.contentContainer, className);\n\n return (\n <Text data-testid={'divider-content'} as={'p'} className={contentClasses} {...rest}>\n {children}\n </Text>\n );\n};\n\nDivider.Content = Content;\n\nexport default Divider;\n","/**\n * Expand to include TB, various error reasons\n */\n\nexport const EXEMPTIONS = {\n LOW_VALUE_TRANSACTION: 'lowValueExemption',\n BUYER_NOT_PRESENT: 'buyerNotPresentExemption',\n REFERENCE_TRANSACTION: 'referenceTxnExemption',\n TRUSTED_BENEFICIARY: 'isTrustedBeneficiaryExemption',\n};\n\nexport const REVIEW_BEFORE_LOGIN_FLOW = {\n cookieDisabledTraffic: 'rbl_ineligible_cdb',\n webview: 'rbl_ineligible_webview',\n init: 'initReviewBeforeLogin',\n success: 'loginSuccess',\n close: 'cancelReviewBeforeLogin',\n error: 'loginError',\n prepare: 'prepare_rbl',\n};\n\nexport const TRUSTED_BENEFICIARY_FLOW = {\n cookieDisabledTraffic: 'tb_ineligible_cdb',\n webview: 'tb_ineligible_webview',\n render: 'renderTrustedBeneficiary',\n optedIn: 'trustedBeneficiaryOptedIn',\n noThanks: 'trustedBeneficiaryNoThanks',\n error: 'trustedBeneficiaryError',\n};\n\nexport const SCA_CONTEXT_STATUS = {\n COMPLETE: 'COMPLETE',\n IN_PROGRESS: 'IN_PROGRESS',\n};\n","export * from './PayWithRewards';\nexport * from './RewardsInterstitial';\n","import { updateFeatures } from '@paypalcorp/c3-util-store';\n\n/**\n * Groups an array of offers into an object based on the presence of a `MultiOffer` field\n * @param {Array<Offer>} offers\n * @returns {Object}\n */\nexport function groupOffersByMultiInstallment(offers) {\n if (!offers) return [];\n\n return offers.reduce((sortedOffers, offer) => {\n const type = offer.content.MultiOffer ? 'installmentOffers' : 'nonInstallmentOffers';\n\n sortedOffers[type] = (sortedOffers[type] || []).concat(offer);\n return sortedOffers;\n }, {});\n}\n\n/**\n * Determine if a fundingInstrument contains the isMultiOffer field\n * @param {Object} fundingInstrument\n * @returns {Boolean}\n */\nexport function isMultiOfferFundingInstrument(fundingInstrument) {\n return fundingInstrument?.creditFields?.creditOffer?.uiElements?.isMultiOffer;\n}\n\n/**\n * Determine if a funding instrument is specific to DE GPL\n * @param {Object} fundingInstrument\n * @returns {Boolean}\n */\nexport function isPayLaterDE(fundingInstrument) {\n return (\n fundingInstrument?.name?.includes('PAY_LATER_DE') && fundingInstrument?.type === 'PAYPAL_CREDIT'\n );\n}\n\nexport const handleMultiOfferContinueButtonAction = (payLaterContext, selectedAddressId) => {\n // If selecting the offer that was already approved, go back to the specialized RYI page\n if (payLaterContext?.payLaterState?.offer?.isApproved) {\n updateFeatures([\n {\n id: 'PAYMENT_OPTIONS',\n visible: false,\n },\n {\n id: 'CREDIT_SINGLE_FI_DISPLAY',\n visible: true,\n data: {\n isGPLFi: true,\n },\n },\n ]);\n } else {\n // Otherwise the user should go back through the credit application flow again because\n // this offer has not been approved yet.\n payLaterContext.processGplOffer(selectedAddressId);\n }\n};\n\n/**\n * Returns a string of comma-separated financing codes from the offers passed in\n * @param {Array<Offer>} offers\n * @returns {String}\n */\nexport const offerFinancingCodesToCSV = (offers) => {\n if (!offers) return '';\n\n return offers.map((offer) => offer?.content?.FinancingCode).join(',');\n};\n\n/**\n * Returns a string containing details about the selected offer for use in FPTI\n * @param {Object<Offer>} offers\n * @returns {String}\n */\nexport const offerDetailsForFPTI = (offer) => {\n if (!offer) return '';\n const { FIText2, OfferText1, OfferText2 } = offer?.content;\n\n return `${FIText2}, ${OfferText1}, ${OfferText2}`;\n};\n\n/**\n * Returns a JSON string of offer details to be used in FPTI\n * @param {Array<Offer>} offers\n * @returns {String}\n */\nexport const allOfferDetailsToJsonString = (offers) => {\n if (!offers) return '';\n\n const offerDetails = offers.map((offer, i) => {\n const { FIText2, OfferText1, OfferText2 } = offer?.content;\n return {\n [`offer${i + 1}`]: `${FIText2}, ${OfferText1}, ${OfferText2}`,\n };\n });\n\n return JSON.stringify(offerDetails);\n};\n","import React from 'react';\nimport getContent from '@/lib/content';\n\nimport { heading as headingStyles } from '@/App.css';\nimport styles from './styles.css';\n\nexport const Title = () => (\n <h2 id=\"ShipTo\" className={`${headingStyles} ${styles.title}`}>\n {getContent('shipping.shipToHeader')}\n </h2>\n);\n\nexport default Title;\n","import React from 'react';\nimport cx from 'classnames';\nimport { useFeature } from '@/components/Feature/hooks';\nimport OpenBankingNotification from '@/components/Notifications/OpenBankingNotification';\nimport DeclineNotification from '@/components/Notifications/DeclineNotification';\n\nexport default function Notifications(props) {\n const { eligible: isOpenBankingNotificationShown } = useFeature('OPEN_BANKING_NOTIFICATION');\n const { eligible: isDeclineNotificationShown } = useFeature('DECLINE_NOTIFICATION_NEW');\n const isNotificationShown = isOpenBankingNotificationShown || isDeclineNotificationShown;\n\n // featureId provides the name of the notification caller (parent component)\n const { featureId, className } = props;\n const notificationClasses = cx({ [className]: isNotificationShown });\n\n return (\n <div className={notificationClasses}>\n <OpenBankingNotification featureId={featureId} />\n <DeclineNotification featureId={featureId} />\n </div>\n );\n}\n","import gql from 'graphql-tag';\nimport { SplitFundingOptionsFragment } from '@paypalcorp/c3-graphql-fragments';\n\nexport const SPLIT_TENDER_CART_QUERY = gql`\n query SplitTenderInputQuery($token: String!) {\n checkoutSession(token: $token) {\n cart {\n amounts {\n total {\n currencyCode\n currencySymbol\n currencyFormat\n currencyValue\n }\n }\n billingChargePattern\n }\n checkoutSessionType\n merchant {\n country\n isGambling\n name\n }\n }\n }\n`;\n\nexport const SPLIT_TENDER_GATE_QUERY = gql`\n query SplitTenderGateQuery($token: String!) {\n checkoutSession(token: $token) {\n fundingOptions(returnAllPlans: true, groupSourcesOnType: INCENTIVE) {\n id\n }\n }\n }\n`;\n\nexport const SPLIT_TENDER_OPTIONS_QUERY = gql`\n ${SplitFundingOptionsFragment}\n query SplitTenderOptionsQuery($token: String!) {\n checkoutSession(token: $token) {\n splitFundingOptions {\n ...SplitFundingOptionsFragment\n }\n }\n }\n`;\n\nexport const SPLIT_TENDER_APPROVE_MUTATION = gql`\n mutation approveMemberPaymentWithSplitFundingOptions(\n $token: String!\n $splitFundingOptions: [SplitFundingOptionsInput]!\n $selectedAddressId: String\n $preferredShippingAddressId: String\n ) {\n approveMemberPaymentWithSplitFundingOptions(\n token: $token\n splitFundingOptions: $splitFundingOptions\n selectedAddressId: $selectedAddressId\n preferredShippingAddressId: $preferredShippingAddressId\n ) {\n state\n buyer {\n userId\n }\n cart {\n intent\n paymentId\n billingToken\n returnUrl {\n href\n }\n state\n }\n }\n }\n`;\n","import { getCountry } from '@paypalcorp/c3-shared-globals';\nimport { useFeature } from '@/components/Feature/hooks';\nimport { isPayLaterDE } from './utils';\n\nexport const useGplMultiOfferInstallments = (offers) => {\n const hasGplInstallments = offers?.some((offer) => offer?.content?.MultiOffer);\n\n return {\n isDisclaimerRequired: hasGplInstallments && getCountry() === 'DE',\n hasGplInstallments,\n };\n};\n\n/**\n * Determines if the button text from the offer should be displayed\n * in the checkout button on the final RYI\n * @param {Object} creditFIOption\n * @returns {Boolean}\n */\nexport const useGplButtonTextOnFinalRyi = (creditFIOption) => {\n const { data } = useFeature('CREDIT_SINGLE_FI_DISPLAY');\n\n return isPayLaterDE(creditFIOption?.fundingInstrument) && data?.isGPLFi;\n};\n\n/**\n * Returns the lowest monthly payment value for all of the offers\n * @param {Offer[]} offers\n * @returns {Object|String}\n */\n\nexport const getLowestOffer = (offers) => {\n if (offers && offers.length > 1) {\n const sortedOffers = [...offers].sort((a, b) => {\n if (a?.content?.MonthlyPayment && b?.content?.MonthlyPayment) {\n const value1 = JSON.parse(a?.content?.MonthlyPayment)?.value;\n const value2 = JSON.parse(b?.content?.MonthlyPayment)?.value;\n return parseInt(value1) - parseInt(value2);\n }\n });\n return sortedOffers[0] ?? '';\n }\n};\n"],"sourceRoot":""}