@bigcommerce/checkout-sdk 1.944.0 → 1.946.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/checkout-button.js +1 -1
- package/dist/cjs/checkout-sdk-essential.js +1 -1
- package/dist/cjs/checkout-sdk.js +1 -1
- package/dist/cjs/hosted-form-v2-iframe-host.js +1 -1
- package/dist/cjs/integrations/amazon-pay.js +1 -1
- package/dist/cjs/integrations/bigcommerce-payments.js +1 -1
- package/dist/cjs/integrations/braintree.js +1 -1
- package/dist/cjs/integrations/braintree.js.map +1 -1
- package/dist/cjs/integrations/google-pay.js +1 -1
- package/dist/cjs/integrations/klarna.js +1 -1
- package/dist/cjs/integrations/paypal-commerce.js +1 -1
- package/dist/cjs/integrations/paypal-commerce.js.map +1 -1
- package/dist/cjs/integrations/paypal-express.js +1 -1
- package/dist/cjs/integrations/zip.js +1 -1
- package/dist/cjs/wallet-button.js +1 -1
- package/dist/cjs/wallet-button.js.map +1 -1
- package/dist/esm/checkout-button.js +1 -1
- package/dist/esm/checkout-sdk-essential.js +1 -1
- package/dist/esm/checkout-sdk.js +1 -1
- package/dist/esm/hosted-form-v2-iframe-host.js +1 -1
- package/dist/esm/integrations/amazon-pay.js +1 -1
- package/dist/esm/integrations/bigcommerce-payments.js +1 -1
- package/dist/esm/integrations/braintree.js +1 -1
- package/dist/esm/integrations/braintree.js.map +1 -1
- package/dist/esm/integrations/google-pay.js +1 -1
- package/dist/esm/integrations/klarna.js +1 -1
- package/dist/esm/integrations/paypal-commerce.js +1 -1
- package/dist/esm/integrations/paypal-commerce.js.map +1 -1
- package/dist/esm/integrations/paypal-express.js +1 -1
- package/dist/esm/integrations/zip.js +1 -1
- package/dist/esm/wallet-button.js +1 -1
- package/dist/esm/wallet-button.js.map +1 -1
- package/dist/types/integrations/braintree.d.ts +61 -0
- package/dist/types/integrations/paypal-commerce.d.ts +27 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrations/paypal-commerce.js","mappings":"uQAEe,SAASA,EACpBC,EACAC,GAEA,OAAOC,OAAOC,OAAOH,EAAQ,CAAEC,cACnC,CCAe,MAAeG,UAAsBC,MAIhD,WAAAC,CAAYC,GCXD,IAAqCC,EDY5CC,MAAMF,GAAW,qCAJrBG,KAAAC,KAAO,gBACPD,KAAAE,KAAO,WCTyCJ,aDcZA,UCbhCN,OAAOW,eACPX,OAAOW,eDYQH,KCZeF,GDYfE,KCVRI,UAAYN,EDYoB,mBAA5BH,MAAMU,kBACbV,MAAMU,kBAAkBL,iBAExBA,KAAKM,MAAQ,IAAIX,MAAMK,KAAKH,SAASS,KAE7C,EEfW,MAAMC,UAA4Cb,EAC7D,WAAAE,CAAYC,GACRE,MACIF,GACI,uGAGRG,KAAKC,KAAO,sCACZD,KAAKE,KAAO,mCAChB,ECbJ,IAAYM,GAAZ,SAAYA,GACRA,EAAAA,EAAA,iDACAA,EAAAA,EAAA,6BACAA,EAAAA,EAAA,qCACAA,EAAAA,EAAA,6CACAA,EAAAA,EAAA,qCACAA,EAAAA,EAAA,iDACAA,EAAAA,EAAA,+BACAA,EAAAA,EAAA,2CACAA,EAAAA,EAAA,mCACAA,EAAAA,EAAA,mCACAA,EAAAA,EAAA,wCACAA,EAAAA,EAAA,wDACAA,EAAAA,EAAA,gDACAA,EAAAA,EAAA,0DACAA,EAAAA,EAAA,gDACAA,EAAAA,EAAA,8CACAA,EAAAA,EAAA,mDACH,CAlBD,CAAYA,IAAAA,EAAoB,KAyBjB,MAAMC,UAAyBf,EAC1C,WAAAE,CAAmBc,GACfX,MAOR,SAAyBG,GACrB,OAAQA,GACJ,KAAKM,EAAqBG,sBACtB,MAAO,iEAEX,KAAKH,EAAqBI,YACtB,MAAO,sDAEX,KAAKJ,EAAqBK,oBACtB,MAAO,8DAEX,KAAKL,EAAqBM,gBACtB,MAAO,0DAEX,KAAKN,EAAqBO,gBACtB,MAAO,0DAEX,KAAKP,EAAqBQ,sBAC1B,KAAKR,EAAqBS,mBACtB,MAAO,+DAEX,KAAKT,EAAqBU,aACtB,MAAO,uDAEX,KAAKV,EAAqBW,eACtB,MAAO,0EAEX,KAAKX,EAAqBY,eACtB,MAAO,yDAEX,KAAKZ,EAAqBa,oBACtB,MAAO,+EAEX,KAAKb,EAAqBc,qBACtB,MAAO,2FAEX,KAAKd,EAAqBe,uBACtB,MAAO,kEAEX,QACI,MAAO,8DAEnB,CAjDcC,CAAgBd,IADPV,KAAAU,QAAAA,EAGfV,KAAKC,KAAO,mBACZD,KAAKE,KAAO,cAChB,ECjCG,MAAMuB,EAA2B,CACpC,mBAAoB,qBACpB,UAAW,QAOFC,EAA+B,CACxC,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SC3mBW,SAASC,EACpBC,GAEA,IAAKA,EACD,OAGJ,IAAIC,EAEJ,GAAID,EAAcE,SAAS,KAAM,CAC7B,MAAOC,EAAUC,GAAUJ,EAAcK,MAAM,KAE/CJ,EAAS,GAAGE,KAAYC,EAAOE,eACnC,MACIL,EAAS,GAAGD,KAAiBA,EAAcM,gBAG/C,OAAOR,EAA6BI,SAASD,GAAUA,OAASM,CACpE,uSCJe,MAAMC,EAGjB,WAAAxC,CAAoByC,GAAArC,KAAAqC,aAAAA,EAChBrC,KAAKsC,OAASA,MAClB,CAEM,YAAAC,CACFC,EACAC,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","sources":["webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/to-resolvable-module.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/standard-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/set-prototype-of.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-method-client-unavailable-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/missing-data-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/paypal-commerce-constants.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/utils/transform-locale-to-paypal-format.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/paypal-sdk-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/create-paypal-sdk-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/buy-now-cart-creation-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/request-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/cart/cart-source.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/paypal-types.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/paypal-integration-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/common/http-request/internal-api-headers.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/common/http-request/content-type.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/common/http-request/sdk-version-headers.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/paypal-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/create-paypal-integration-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/ui/src/loading-indicator/loading-indicator.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/invalid-argument-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-argument-invalid-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-method-invalid-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/order-finalization-not-required-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/payment/is-hosted-intrument-like.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/payment/is-vaulted-instrument.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/is-request-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/utils/get-paypal-messages-styles-from-bnpl-config.ts","webpack://@bigcommerce/checkout-sdk/./packages/utility/src/is-base-instrument/is-base-instrument.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/utils/is-redirect-action-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/utils/is-paypal-provider-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/create-paypal-commerce-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/not-implemented-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/create-paypal-commerce-credit-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-venmo/create-paypal-commerce-venmo-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-constants.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/timeout-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-types.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-alternative-methods/paypal-commerce-alternative-methods-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/utility/src/is-experiment-enabled/is-experiment-enabled.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-alternative-methods/create-paypal-commerce-alternative-methods-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/payment/instrument.ts","webpack://@bigcommerce/checkout-sdk/./packages/storage/src/cookie-storage.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/hosted-form/hosted-field-type.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/paypal-fastlane-utils.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/create-paypal-fastlane-utils.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/hosted-form/is-credit-card-form-fields.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/hosted-form/is-credit-card-vaulted-form-fields.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-method-failed-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/not-initialized-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-invalid-form-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit-card/paypal-commerce-credit-cards-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-utils/src/utils/is-paypal-commerce-accelerated-checkout-customer.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit-card/create-paypal-commerce-credit-cards-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-ratepay/paypal-commerce-ratepay-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-ratepay/create-paypal-commerce-ratepay-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/utils/get-fastlane-styles.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/utils/is-paypal-fastlane-customer.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-fastlane/paypal-commerce-fastlane-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/utils/is-paypal-fastlane-request-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-fastlane/create-paypal-commerce-fastlane-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/paypal-button-creation-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/checkout-buttons/default-checkout-button-height.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/create-paypal-commerce-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-integration-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/create-paypal-commerce-integration-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/create-paypal-commerce-credit-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-venmo/create-paypal-commerce-venmo-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-fastlane/paypal-commerce-fastlane-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-fastlane/create-paypal-commerce-fastlane-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/create-paypal-commerce-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/create-paypal-commerce-credit-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-venmo/create-paypal-commerce-venmo-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-wallet-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-wallet-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/create-paypal-commerce-wallet-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-wallet-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/create-paypal-commerce-credit-wallet-strategy.ts"],"sourcesContent":["import ResolvableModule from './resolvable-module';\n\nexport default function toResolvableModule<TModule extends object, TIdentifier>(\n module: TModule,\n resolveIds: TIdentifier[],\n): ResolvableModule<TModule, TIdentifier> {\n return Object.assign(module, { resolveIds });\n}\n","import CustomError from './custom-error';\nimport setPrototypeOf from './set-prototype-of';\n\n/**\n * This error type should not be constructed directly. It is a base class for\n * all custom errors thrown in this library.\n */\nexport default abstract class StandardError extends Error implements CustomError {\n name = 'StandardError';\n type = 'standard';\n\n constructor(message?: string) {\n super(message || 'An unexpected error has occurred.');\n\n setPrototypeOf(this, new.target.prototype);\n\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, new.target);\n } else {\n this.stack = new Error(this.message).stack;\n }\n }\n}\n","export default function setPrototypeOf(object: any, prototype: object) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(object, prototype);\n } else {\n object.__proto__ = prototype;\n }\n\n return object;\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when the client library of a payment method fails\n * to load, or for some reason, it is inaccessible.\n */\nexport default class PaymentMethodClientUnavailableError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Unable to proceed because the client library of a payment method is not loaded or ready to be used.',\n );\n\n this.name = 'PaymentMethodClientUnavailableError';\n this.type = 'payment_method_client_unavailable';\n }\n}\n","import StandardError from './standard-error';\n\nexport enum MissingDataErrorType {\n MissingBillingAddress,\n MissingCart,\n MissingCheckout,\n MissingConsignments,\n MissingCustomer,\n MissingCheckoutConfig,\n MissingOrder,\n MissingOrderConfig,\n MissingOrderId,\n MissingPayment,\n MissingPaymentId,\n MissingPaymentInstrument,\n MissingPaymentMethod,\n MissingPaymentRedirectUrl,\n MissingPaymentStatus,\n MissingPaymentToken,\n MissingShippingAddress,\n}\n\n/**\n * Throw this error when data that is expected to exist is missing. Usually it\n * is due to the fact that certain data has not been retrieved from or saved to\n * the server yet. And such data is required to perform certain actions.\n */\nexport default class MissingDataError extends StandardError {\n constructor(public subtype: MissingDataErrorType) {\n super(getErrorMessage(subtype));\n\n this.name = 'MissingDataError';\n this.type = 'missing_data';\n }\n}\n\nfunction getErrorMessage(type: MissingDataErrorType): string {\n switch (type) {\n case MissingDataErrorType.MissingBillingAddress:\n return 'Unable to proceed because billing address data is unavailable.';\n\n case MissingDataErrorType.MissingCart:\n return 'Unable to proceed because cart data is unavailable.';\n\n case MissingDataErrorType.MissingConsignments:\n return 'Unable to proceed because consignments data is unavailable.';\n\n case MissingDataErrorType.MissingCheckout:\n return 'Unable to proceed because checkout data is unavailable.';\n\n case MissingDataErrorType.MissingCustomer:\n return 'Unable to proceed because customer data is unavailable.';\n\n case MissingDataErrorType.MissingCheckoutConfig:\n case MissingDataErrorType.MissingOrderConfig:\n return 'Unable to proceed because configuration data is unavailable.';\n\n case MissingDataErrorType.MissingOrder:\n return 'Unable to proceed because order data is unavailable.';\n\n case MissingDataErrorType.MissingOrderId:\n return 'Unable to proceed because order ID is unavailable or not generated yet.';\n\n case MissingDataErrorType.MissingPayment:\n return 'Unable to proceed because payment data is unavailable.';\n\n case MissingDataErrorType.MissingPaymentToken:\n return 'Unable to proceed because the token required to submit a payment is missing.';\n\n case MissingDataErrorType.MissingPaymentMethod:\n return 'Unable to proceed because payment method data is unavailable or not properly configured.';\n\n case MissingDataErrorType.MissingShippingAddress:\n return 'Unable to proceed because shipping address data is unavailable.';\n\n default:\n return 'Unable to proceed because the required data is unavailable.';\n }\n}\n","export const LOADING_INDICATOR_STYLES = {\n 'background-color': 'rgba(0, 0, 0, 0.4)',\n 'z-index': '1000',\n};\n\n/**\n * PayPal SDK supported locales\n * https://developer.paypal.com/sdk/js/configuration/#link-locale\n */\nexport const PAYPAL_SDK_SUPPORTED_LOCALES = [\n 'ar_BH',\n 'ar_DZ',\n 'ar_EG',\n 'ar_JO',\n 'ar_KW',\n 'ar_MA',\n 'ar_OM',\n 'ar_QA',\n 'ar_SA',\n 'ar_TN',\n 'ar_YE',\n 'ar_AE',\n 'bg_BG',\n 'cs_CZ',\n 'da_DK',\n 'da_FO',\n 'da_GL',\n 'de_AT',\n 'de_CH',\n 'de_DE',\n 'de_LU',\n 'el_GR',\n 'en_AD',\n 'en_AE',\n 'en_AG',\n 'en_AI',\n 'en_AL',\n 'en_AM',\n 'en_AN',\n 'en_AO',\n 'en_AT',\n 'en_AU',\n 'en_AW',\n 'en_AZ',\n 'en_BB',\n 'en_BE',\n 'en_BH',\n 'en_BJ',\n 'en_BM',\n 'en_BN',\n 'en_BS',\n 'en_BT',\n 'en_BW',\n 'en_BY',\n 'en_BZ',\n 'en_C2',\n 'en_CA',\n 'en_CD',\n 'en_CG',\n 'en_CH',\n 'en_CI',\n 'en_CK',\n 'en_CL',\n 'en_CM',\n 'en_CN',\n 'en_CO',\n 'en_CR',\n 'en_CV',\n 'en_CY',\n 'en_CZ',\n 'en_DE',\n 'en_DJ',\n 'en_DK',\n 'en_DM',\n 'en_DO',\n 'en_DZ',\n 'en_EC',\n 'en_EE',\n 'en_EG',\n 'en_ER',\n 'en_ES',\n 'en_ET',\n 'en_FI',\n 'en_FJ',\n 'en_FK',\n 'en_FM',\n 'en_FO',\n 'en_FR',\n 'en_GA',\n 'en_GB',\n 'en_GD',\n 'en_GE',\n 'en_GF',\n 'en_GI',\n 'en_GL',\n 'en_GM',\n 'en_GN',\n 'en_GP',\n 'en_GR',\n 'en_GT',\n 'en_GW',\n 'en_GY',\n 'en_HK',\n 'en_HN',\n 'en_HR',\n 'en_HU',\n 'en_ID',\n 'en_IE',\n 'en_IL',\n 'en_IN',\n 'en_IS',\n 'en_IT',\n 'en_JM',\n 'en_JO',\n 'en_JP',\n 'en_KE',\n 'en_KG',\n 'en_KH',\n 'en_KI',\n 'en_KM',\n 'en_KN',\n 'en_KR',\n 'en_KW',\n 'en_KY',\n 'en_KZ',\n 'en_LA',\n 'en_LC',\n 'en_LI',\n 'en_LK',\n 'en_LS',\n 'en_LT',\n 'en_LU',\n 'en_LV',\n 'en_MA',\n 'en_MC',\n 'en_MD',\n 'en_ME',\n 'en_MG',\n 'en_MH',\n 'en_MK',\n 'en_ML',\n 'en_MN',\n 'en_MQ',\n 'en_MR',\n 'en_MS',\n 'en_MT',\n 'en_MU',\n 'en_MV',\n 'en_MW',\n 'en_MY',\n 'en_MZ',\n 'en_NA',\n 'en_NC',\n 'en_NE',\n 'en_NF',\n 'en_NG',\n 'en_NI',\n 'en_NL',\n 'en_NO',\n 'en_NP',\n 'en_NR',\n 'en_NU',\n 'en_NZ',\n 'en_OM',\n 'en_PA',\n 'en_PE',\n 'en_PF',\n 'en_PG',\n 'en_PH',\n 'en_PL',\n 'en_PM',\n 'en_PN',\n 'en_PT',\n 'en_PW',\n 'en_PY',\n 'en_QA',\n 'en_RE',\n 'en_RO',\n 'en_RS',\n 'en_RU',\n 'en_RW',\n 'en_SA',\n 'en_SB',\n 'en_SC',\n 'en_SE',\n 'en_SG',\n 'en_SH',\n 'en_SI',\n 'en_SJ',\n 'en_SK',\n 'en_SL',\n 'en_SM',\n 'en_SN',\n 'en_SO',\n 'en_SR',\n 'en_ST',\n 'en_SV',\n 'en_SZ',\n 'en_TC',\n 'en_TD',\n 'en_TG',\n 'en_TH',\n 'en_TJ',\n 'en_TM',\n 'en_TN',\n 'en_TO',\n 'en_TR',\n 'en_TT',\n 'en_TV',\n 'en_TW',\n 'en_TZ',\n 'en_UA',\n 'en_UG',\n 'en_US',\n 'en_UY',\n 'en_VA',\n 'en_VC',\n 'en_VE',\n 'en_VG',\n 'en_VN',\n 'en_VU',\n 'en_WF',\n 'en_WS',\n 'en_YE',\n 'en_YT',\n 'en_ZA',\n 'en_ZM',\n 'en_ZW',\n 'es_AD',\n 'es_AI',\n 'es_AO',\n 'es_AR',\n 'es_AW',\n 'es_BB',\n 'es_BJ',\n 'es_BM',\n 'es_BO',\n 'es_BS',\n 'es_BZ',\n 'es_CD',\n 'es_CG',\n 'es_CK',\n 'es_CL',\n 'es_CO',\n 'es_CR',\n 'es_CV',\n 'es_DJ',\n 'es_DM',\n 'es_DO',\n 'es_DZ',\n 'es_EC',\n 'es_EG',\n 'es_ER',\n 'es_ES',\n 'es_ET',\n 'es_FJ',\n 'es_FK',\n 'es_FO',\n 'es_GA',\n 'es_GD',\n 'es_GE',\n 'es_GI',\n 'es_GL',\n 'es_GM',\n 'es_GN',\n 'es_GT',\n 'es_GW',\n 'es_GY',\n 'es_HN',\n 'es_IE',\n 'es_JM',\n 'es_JO',\n 'es_KE',\n 'es_KG',\n 'es_KI',\n 'es_KM',\n 'es_KN',\n 'es_KW',\n 'es_KY',\n 'es_KZ',\n 'es_LC',\n 'es_LI',\n 'es_LS',\n 'es_LU',\n 'es_MA',\n 'es_MG',\n 'es_MH',\n 'es_ML',\n 'es_MR',\n 'es_MS',\n 'es_MU',\n 'es_MW',\n 'es_MX',\n 'es_MZ',\n 'es_NA',\n 'es_NC',\n 'es_NE',\n 'es_NF',\n 'es_NI',\n 'es_NR',\n 'es_NU',\n 'es_NZ',\n 'es_OM',\n 'es_PA',\n 'es_PE',\n 'es_PF',\n 'es_PG',\n 'es_PM',\n 'es_PN',\n 'es_PW',\n 'es_PY',\n 'es_QA',\n 'es_RS',\n 'es_RW',\n 'es_SA',\n 'es_SB',\n 'es_SC',\n 'es_SH',\n 'es_SJ',\n 'es_SL',\n 'es_SM',\n 'es_SN',\n 'es_SO',\n 'es_SR',\n 'es_ST',\n 'es_SV',\n 'es_SZ',\n 'es_TC',\n 'es_TD',\n 'es_TG',\n 'es_TJ',\n 'es_TM',\n 'es_TN',\n 'es_TT',\n 'es_TV',\n 'es_UA',\n 'es_UG',\n 'es_US',\n 'es_UY',\n 'es_VA',\n 'es_VC',\n 'es_VE',\n 'es_VG',\n 'es_VU',\n 'es_WF',\n 'es_YE',\n 'es_ZM',\n 'et_EE',\n 'fi_FI',\n 'fr_AD',\n 'fr_AE',\n 'fr_AI',\n 'fr_AM',\n 'fr_AO',\n 'fr_AW',\n 'fr_AZ',\n 'fr_BB',\n 'fr_BE',\n 'fr_BF',\n 'fr_BI',\n 'fr_BJ',\n 'fr_BM',\n 'fr_BS',\n 'fr_BZ',\n 'fr_CA',\n 'fr_CD',\n 'fr_CG',\n 'fr_CH',\n 'fr_CI',\n 'fr_CK',\n 'fr_CM',\n 'fr_CV',\n 'fr_DJ',\n 'fr_DM',\n 'fr_DO',\n 'fr_DZ',\n 'fr_EC',\n 'fr_ER',\n 'fr_ET',\n 'fr_FJ',\n 'fr_FK',\n 'fr_FO',\n 'fr_FR',\n 'fr_GA',\n 'fr_GD',\n 'fr_GE',\n 'fr_GF',\n 'fr_GI',\n 'fr_GL',\n 'fr_GM',\n 'fr_GN',\n 'fr_GP',\n 'fr_GT',\n 'fr_GW',\n 'fr_GY',\n 'fr_HN',\n 'fr_IE',\n 'fr_JM',\n 'fr_JO',\n 'fr_KE',\n 'fr_KG',\n 'fr_KI',\n 'fr_KM',\n 'fr_KN',\n 'fr_KW',\n 'fr_KY',\n 'fr_KZ',\n 'fr_LC',\n 'fr_LI',\n 'fr_LS',\n 'fr_LU',\n 'fr_MA',\n 'fr_MC',\n 'fr_MG',\n 'fr_MH',\n 'fr_ML',\n 'fr_MQ',\n 'fr_MR',\n 'fr_MS',\n 'fr_MU',\n 'fr_MW',\n 'fr_MZ',\n 'fr_NA',\n 'fr_NC',\n 'fr_NE',\n 'fr_NF',\n 'fr_NI',\n 'fr_NR',\n 'fr_NU',\n 'fr_NZ',\n 'fr_OM',\n 'fr_PA',\n 'fr_PE',\n 'fr_PF',\n 'fr_PG',\n 'fr_PM',\n 'fr_PN',\n 'fr_PW',\n 'fr_QA',\n 'fr_RE',\n 'fr_RS',\n 'fr_RW',\n 'fr_SA',\n 'fr_SB',\n 'fr_SC',\n 'fr_SH',\n 'fr_SJ',\n 'fr_SL',\n 'fr_SM',\n 'fr_SN',\n 'fr_SO',\n 'fr_SR',\n 'fr_ST',\n 'fr_SV',\n 'fr_SZ',\n 'fr_TC',\n 'fr_TD',\n 'fr_TG',\n 'fr_TJ',\n 'fr_TM',\n 'fr_TN',\n 'fr_TT',\n 'fr_TV',\n 'fr_UA',\n 'fr_UG',\n 'fr_US',\n 'fr_UY',\n 'fr_VA',\n 'fr_VC',\n 'fr_VE',\n 'fr_VG',\n 'fr_VU',\n 'fr_WF',\n 'fr_YE',\n 'fr_YT',\n 'fr_ZA',\n 'fr_ZM',\n 'he_IL',\n 'hu_HU',\n 'id_ID',\n 'it_IT',\n 'ja_JP',\n 'ko_KR',\n 'lv_LV',\n 'lt_LT',\n 'ms_BN',\n 'ms_MY',\n 'nl_BE',\n 'nl_NL',\n 'pl_PL',\n 'pt_BR',\n 'pt_PT',\n 'ro_RO',\n 'ru_EE',\n 'ru_LT',\n 'ru_LV',\n 'ru_RU',\n 'ru_UA',\n 'si_LK',\n 'sk_SK',\n 'sl_SI',\n 'sq_AL',\n 'sv_SE',\n 'tl_PH',\n 'th_TH',\n 'tr_TR',\n 'vi_VN',\n 'zh_C2',\n 'zh_CN',\n 'zh_HK',\n 'zh_TW',\n 'zh_AD',\n 'zh_AE',\n 'zh_AI',\n 'zh_AO',\n 'zh_AW',\n 'zh_BB',\n 'zh_BH',\n 'zh_BJ',\n 'zh_BM',\n 'zh_BS',\n 'zh_BZ',\n 'zh_CD',\n 'zh_CG',\n 'zh_CK',\n 'zh_CL',\n 'zh_CO',\n 'zh_CV',\n 'zh_DJ',\n 'zh_DM',\n 'zh_DO',\n 'zh_DZ',\n 'zh_EC',\n 'zh_EG',\n 'zh_ER',\n 'zh_ET',\n 'zh_FJ',\n 'zh_FK',\n 'zh_FO',\n 'zh_GA',\n 'zh_GD',\n 'zh_GE',\n 'zh_GI',\n 'zh_GL',\n 'zh_GM',\n 'zh_GN',\n 'zh_GT',\n 'zh_GW',\n 'zh_GY',\n 'zh_HN',\n 'zh_IE',\n 'zh_JM',\n 'zh_JO',\n 'zh_KE',\n 'zh_KG',\n 'zh_KI',\n 'zh_KM',\n 'zh_KN',\n 'zh_KW',\n 'zh_KY',\n 'zh_KZ',\n 'zh_LC',\n 'zh_LI',\n 'zh_LS',\n 'zh_LT',\n 'zh_LU',\n 'zh_MA',\n 'zh_MG',\n 'zh_MH',\n 'zh_ML',\n 'zh_MR',\n 'zh_MS',\n 'zh_MU',\n 'zh_MW',\n 'zh_MZ',\n 'zh_NA',\n 'zh_NC',\n 'zh_NE',\n 'zh_NF',\n 'zh_NI',\n 'zh_NR',\n 'zh_NU',\n 'zh_NZ',\n 'zh_OM',\n 'zh_PA',\n 'zh_PE',\n 'zh_PF',\n 'zh_PG',\n 'zh_PM',\n 'zh_PN',\n 'zh_PW',\n 'zh_QA',\n 'zh_RS',\n 'zh_RW',\n 'zh_SA',\n 'zh_SB',\n 'zh_SC',\n 'zh_SH',\n 'zh_SJ',\n 'zh_SL',\n 'zh_SM',\n 'zh_SN',\n 'zh_SO',\n 'zh_SR',\n 'zh_ST',\n 'zh_SV',\n 'zh_SZ',\n 'zh_TC',\n 'zh_TD',\n 'zh_TG',\n 'zh_TJ',\n 'zh_TM',\n 'zh_TN',\n 'zh_TT',\n 'zh_TV',\n 'zh_UA',\n 'zh_UG',\n 'zh_US',\n 'zh_UY',\n 'zh_VA',\n 'zh_VC',\n 'zh_VE',\n 'zh_VG',\n 'zh_VU',\n 'zh_WF',\n 'zh_YE',\n 'zh_ZA',\n 'zh_ZM',\n];\n","import { PAYPAL_SDK_SUPPORTED_LOCALES } from '../paypal-commerce-constants';\n\n/**\n * Transforms store language to PayPal SDK locale format.\n * PayPal SDK expects locale in format 'en_US' (underscore separator).\n * Returns undefined if the locale is not supported by PayPal SDK.\n * Examples: 'fr-CA' -> 'fr_CA', 'fr' -> 'fr_FR'\n */\nexport default function transformLocaleToPayPalFormat(\n storeLanguage: string | undefined,\n): string | undefined {\n if (!storeLanguage) {\n return undefined;\n }\n\n let locale: string;\n\n if (storeLanguage.includes('-')) {\n const [language, region] = storeLanguage.split('-');\n\n locale = `${language}_${region.toUpperCase()}`;\n } else {\n locale = `${storeLanguage}_${storeLanguage.toUpperCase()}`;\n }\n\n return PAYPAL_SDK_SUPPORTED_LOCALES.includes(locale) ? locale : undefined;\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n MissingDataError,\n MissingDataErrorType,\n PaymentMethod,\n PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n FundingType,\n PayPalFastlaneSdk,\n PayPalGooglePaySdk,\n PayPalHostWindow,\n PayPalInitializationData,\n PayPalMessagesSdk,\n PayPalSDK,\n PayPalSdkComponents,\n PayPalSdkConfig,\n} from './paypal-types';\nimport { transformLocaleToPayPalFormat } from './utils';\n\nexport default class PayPalSdkScriptLoader {\n private window: PayPalHostWindow;\n\n constructor(private scriptLoader: ScriptLoader) {\n this.window = window;\n }\n\n async getPayPalSDK(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n initializesOnCheckoutPage?: boolean,\n forceLoad?: boolean,\n ): Promise<PayPalSDK> {\n if (!this.window.paypal || forceLoad) {\n const paypalSdkScriptConfig = this.getPayPalSdkScriptConfigOrThrow(\n paymentMethod,\n currencyCode,\n storeLanguage,\n initializesOnCheckoutPage,\n );\n\n await this.loadPayPalSdk(paypalSdkScriptConfig);\n\n if (!this.window.paypal) {\n throw new PaymentMethodClientUnavailableError();\n }\n }\n\n return this.window.paypal;\n }\n\n async getPayPalFastlaneSdk(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n sessionId: string,\n storeLanguage: string | undefined,\n ): Promise<PayPalFastlaneSdk> {\n if (!this.window.paypalFastlaneSdk) {\n const config = this.getPayPalFastlaneSdkConfiguration(\n paymentMethod,\n currencyCode,\n sessionId,\n storeLanguage,\n );\n\n await this.loadPayPalSdk(config);\n\n if (!this.window.paypalFastlaneSdk) {\n throw new PaymentMethodClientUnavailableError();\n }\n }\n\n return this.window.paypalFastlaneSdk;\n }\n\n async getPayPalGooglePaySdk(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n initializesOnCheckoutPage?: boolean,\n forceLoad?: boolean,\n ): Promise<PayPalGooglePaySdk> {\n if (!this.window.paypalGooglePay || forceLoad) {\n const paypalSdkScriptConfig = this.getPayPalGooglePaySdkScriptConfigOrThrow(\n paymentMethod,\n currencyCode,\n storeLanguage,\n initializesOnCheckoutPage,\n );\n\n await this.loadPayPalSdk(paypalSdkScriptConfig);\n }\n\n if (!this.window.paypalGooglePay) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.window.paypalGooglePay;\n }\n\n async getPayPalApmsSdk(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n ) {\n if (!this.window.paypalApms) {\n const config = this.getPayPalApmSdkConfiguration(\n paymentMethod,\n currencyCode,\n storeLanguage,\n );\n\n await this.loadPayPalSdk(config);\n\n if (!this.window.paypalApms) {\n throw new PaymentMethodClientUnavailableError();\n }\n }\n\n return this.window.paypalApms;\n }\n\n async getPayPalMessages(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n ): Promise<PayPalMessagesSdk> {\n if (!this.window.paypalMessages) {\n const paypalSdkMessagesConfig = this.getPayPalSdkMessagesConfiguration(\n paymentMethod,\n currencyCode,\n storeLanguage,\n );\n\n await this.loadPayPalSdk(paypalSdkMessagesConfig);\n }\n\n if (!this.window.paypalMessages) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.window.paypalMessages;\n }\n\n /**\n *\n * loadPayPalSdk is a paypal sdk script loader\n * which loads paypal sdk based on provided configuration\n *\n */\n private async loadPayPalSdk({ options, attributes }: PayPalSdkConfig): Promise<void> {\n const scriptOptions = this.transformConfig<PayPalSdkConfig['options']>(options);\n const scriptAttributes = this.transformConfig<PayPalSdkConfig['attributes']>(attributes);\n\n const paypalSdkUrl = 'https://www.paypal.com/sdk/js';\n const scriptQuery = new URLSearchParams(scriptOptions).toString();\n const scriptSrc = `${paypalSdkUrl}?${scriptQuery}`;\n\n await this.scriptLoader.loadScript(scriptSrc, {\n async: true,\n attributes: scriptAttributes,\n });\n }\n\n /**\n *\n * Configurations section\n *\n */\n private getPayPalSdkScriptConfigOrThrow(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n initializesOnCheckoutPage = true,\n ): PayPalSdkConfig {\n const { id, clientToken, initializationData } = paymentMethod;\n\n if (!initializationData || !initializationData.clientId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const {\n intent,\n clientId,\n merchantId,\n buyerCountry,\n attributionId,\n isVenmoEnabled,\n isHostedCheckoutEnabled,\n isPayPalCreditAvailable,\n isDeveloperModeApplicable,\n availableAlternativePaymentMethods = [],\n enabledAlternativePaymentMethods = [],\n isGooglePayEnabled,\n } = initializationData;\n\n const commit = isHostedCheckoutEnabled || initializesOnCheckoutPage;\n\n const shouldEnableCard =\n id === 'paypalcommercecreditcards' || id === 'bigcommerce_payments_creditcards';\n const enableCardFunding = shouldEnableCard ? ['card'] : [];\n const disableCardFunding = !shouldEnableCard ? ['card'] : [];\n\n const enableCreditFunding = isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n const disableCreditFunding = !isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n\n const enableVenmoFunding = isVenmoEnabled ? ['venmo'] : [];\n const disableVenmoFunding = !isVenmoEnabled ? ['venmo'] : [];\n const disableAPMsFunding = availableAlternativePaymentMethods.filter(\n (apm: string) => !enabledAlternativePaymentMethods.includes(apm),\n );\n const googlePayComponent: PayPalSdkComponents = isGooglePayEnabled ? ['googlepay'] : [];\n const cardFieldsComponent: PayPalSdkComponents = initializesOnCheckoutPage\n ? ['card-fields']\n : [];\n const disableFunding: FundingType = [\n ...disableCardFunding,\n ...disableCreditFunding,\n ...disableVenmoFunding,\n ...disableAPMsFunding,\n ];\n const enableFunding: FundingType = [\n ...enableCardFunding,\n ...enableCreditFunding,\n ...enableVenmoFunding,\n ...enabledAlternativePaymentMethods,\n ];\n\n const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n return {\n options: {\n 'client-id': clientId,\n 'merchant-id': merchantId,\n 'enable-funding': enableFunding.length > 0 ? enableFunding : undefined,\n 'disable-funding': disableFunding.length > 0 ? disableFunding : undefined,\n commit,\n components: [\n 'buttons',\n 'hosted-fields',\n 'payment-fields',\n 'legal',\n ...googlePayComponent,\n ...cardFieldsComponent,\n ],\n currency: currencyCode,\n intent,\n ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n ...(locale && { locale }),\n },\n attributes: {\n 'data-partner-attribution-id': attributionId,\n 'data-client-token': clientToken,\n },\n };\n }\n\n private getPayPalFastlaneSdkConfiguration(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n sessionId: string,\n storeLanguage: string | undefined,\n ): PayPalSdkConfig {\n const { clientToken, initializationData } = paymentMethod;\n\n if (!initializationData || !initializationData.clientId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const { intent, clientId, merchantId, attributionId } = initializationData;\n\n const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n return {\n options: {\n 'client-id': clientId,\n 'merchant-id': merchantId,\n commit: true,\n components: [\n 'fastlane',\n 'buttons',\n 'payment-fields',\n 'hosted-fields',\n 'three-domain-secure',\n ],\n currency: currencyCode,\n ...(locale && { locale }),\n intent,\n },\n attributes: {\n 'data-client-metadata-id': sessionId.replace(/-/g, ''),\n 'data-namespace': 'paypalFastlaneSdk',\n 'data-partner-attribution-id': attributionId,\n 'data-sdk-client-token': clientToken,\n },\n };\n }\n\n private getPayPalGooglePaySdkScriptConfigOrThrow(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n initializesOnCheckoutPage = true,\n ): PayPalSdkConfig {\n const { clientToken, initializationData } = paymentMethod;\n\n if (!initializationData || !initializationData.clientId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const {\n intent,\n clientId,\n merchantId,\n buyerCountry,\n attributionId,\n isHostedCheckoutEnabled,\n isDeveloperModeApplicable,\n } = initializationData;\n\n const commit = isHostedCheckoutEnabled || initializesOnCheckoutPage;\n\n const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n return {\n options: {\n 'client-id': clientId,\n 'merchant-id': merchantId,\n commit,\n components: ['googlepay'],\n currency: currencyCode,\n intent,\n ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n ...(locale && { locale }),\n },\n attributes: {\n 'data-partner-attribution-id': attributionId,\n 'data-client-token': clientToken,\n 'data-namespace': 'paypalGooglePay',\n },\n };\n }\n\n private getPayPalApmSdkConfiguration(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n ): PayPalSdkConfig {\n const { initializationData } = paymentMethod;\n\n if (!initializationData || !initializationData.clientId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const {\n intent,\n clientId,\n merchantId,\n buyerCountry,\n attributionId,\n isDeveloperModeApplicable,\n availableAlternativePaymentMethods = [],\n enabledAlternativePaymentMethods = [],\n } = initializationData;\n\n const enableAPMsFunding = enabledAlternativePaymentMethods;\n const disableAPMsFunding = availableAlternativePaymentMethods.filter(\n (apm: string) => !enabledAlternativePaymentMethods.includes(apm),\n );\n\n const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n return {\n options: {\n 'client-id': clientId,\n 'merchant-id': merchantId,\n 'enable-funding': enableAPMsFunding.length > 0 ? enableAPMsFunding : undefined,\n 'disable-funding': disableAPMsFunding.length > 0 ? disableAPMsFunding : undefined,\n commit: true,\n components: ['buttons', 'payment-fields'],\n currency: currencyCode,\n intent,\n ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n ...(locale && { locale }),\n },\n attributes: {\n 'data-partner-attribution-id': attributionId,\n 'data-namespace': 'paypalApms',\n },\n };\n }\n\n private getPayPalSdkMessagesConfiguration(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n ): PayPalSdkConfig {\n const { initializationData } = paymentMethod;\n\n if (!initializationData || !initializationData.clientId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const { clientId, merchantId, attributionId, isDeveloperModeApplicable, buyerCountry } =\n initializationData;\n\n const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n return {\n options: {\n 'client-id': clientId,\n 'merchant-id': merchantId,\n components: ['messages'],\n currency: currencyCode,\n ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n ...(locale && { locale }),\n },\n attributes: {\n 'data-namespace': 'paypalMessages',\n 'data-partner-attribution-id': attributionId,\n },\n };\n }\n\n /**\n *\n * Utils methods\n *\n */\n private transformConfig<T extends Record<string, unknown>>(config: T): Record<string, string> {\n let transformedConfig = {};\n\n const keys = Object.keys(config) as Array<keyof T>;\n\n keys.forEach((key) => {\n const value = config[key];\n\n if (\n value === undefined ||\n value === null ||\n value === '' ||\n (Array.isArray(value) && value.length === 0)\n ) {\n return;\n }\n\n transformedConfig = {\n ...transformedConfig,\n [key]: Array.isArray(value) ? value.join(',') : value,\n };\n });\n\n return transformedConfig;\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport PayPalSdkScriptLoader from './paypal-sdk-script-loader';\n\nexport default function createPayPalSdkScriptLoader(): PayPalSdkScriptLoader {\n return new PayPalSdkScriptLoader(getScriptLoader());\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when a shopper tries to sign in as a guest but\n * they are already signed in as a registered customer.\n */\nexport default class BuyNowCartCreationError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'An unexpected error has occurred during buy now cart creation process. Please try again later.',\n );\n\n this.name = 'BuyNowCartCreationError';\n this.type = 'buy_now_cart_creation_error';\n }\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport StandardError from './standard-error';\n\nconst DEFAULT_RESPONSE = {\n body: {},\n headers: {},\n status: 0,\n};\n\n/**\n * Throw this error if we are unable to make a request to the server. It wraps\n * any server response into a JS error object.\n */\nexport default class RequestError<TBody = any> extends StandardError {\n body: TBody | object;\n headers: { [key: string]: any };\n errors: Array<{ code: string; message?: string }>;\n status: number;\n\n constructor(\n response?: Response<TBody | object>,\n {\n message,\n errors,\n }: {\n message?: string;\n errors?: Array<{ code: string; message?: string }>;\n } = {},\n ) {\n const { body, headers, status } = response || DEFAULT_RESPONSE;\n\n super(message || 'An unexpected error has occurred.');\n\n this.name = 'RequestError';\n this.type = 'request';\n this.body = body;\n this.headers = headers;\n this.status = status;\n this.errors = errors || [];\n }\n}\n","export enum CartSource {\n BuyNow = 'BUY_NOW',\n INVOICE = 'B2B_INVOICE',\n}\n","import {\n BuyNowCartRequestBody,\n CardInstrument,\n CustomerAddress,\n HostedInstrument,\n ShippingOption,\n VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n *\n * PayPal Funding sources\n *\n */\nexport type FundingType = string[];\nexport type EnableFundingType = FundingType | string;\n\nexport interface PayPalCommerceSDKFunding {\n CARD: string;\n PAYPAL: string;\n CREDIT: string;\n PAYLATER: string;\n OXXO: string;\n SEPA: string;\n VENMO: string;\n}\n\n/**\n *\n * PayPal BuyNow\n *\n */\nexport interface PayPalBuyNowInitializeOptions {\n getBuyNowCartRequestBody(): BuyNowCartRequestBody;\n}\n\n/**\n *\n * PayPal Initialization Data\n *\n */\nexport interface PayPalInitializationData {\n attributionId?: string;\n availableAlternativePaymentMethods: FundingType;\n buttonStyle?: PayPalButtonStyleOptions;\n buyerCountry?: string;\n clientId: string;\n clientToken?: string;\n fastlaneStyles?: FastlaneStylesSettings;\n connectClientToken?: string; // TODO: remove when PPCP Fastlane A/B test will be finished\n enabledAlternativePaymentMethods: FundingType;\n isDeveloperModeApplicable?: boolean;\n intent?: PayPalIntent;\n isAcceleratedCheckoutEnabled?: boolean; // PayPal Fastlane related\n isFastlaneShippingOptionAutoSelectEnabled?: boolean; // PayPal Fastlane related\n isFastlaneStylingEnabled?: boolean;\n isHostedCheckoutEnabled?: boolean;\n isPayPalAnalyticsV2Enabled?: boolean; // PayPal Fastlane related\n isPayPalCreditAvailable?: boolean;\n isPayPalCommerceAnalyticsV2Enabled?: boolean; // PayPal Fastlane related\n isVenmoEnabled?: boolean;\n isGooglePayEnabled?: boolean;\n merchantId?: string;\n orderId?: string;\n shouldRenderFields?: boolean;\n shouldRunAcceleratedCheckout?: boolean; // TODO: remove when PPCP Fastlane A/B test will be finished\n paymentButtonStyles?: Record<string, PayPalButtonStyleOptions>;\n paypalBNPLConfiguration?: PayPalBNPLConfigurationItem[];\n threeDSVerificationMethod?: string;\n isServerSideShippingCallbacksEnabled?: boolean;\n}\n\n/**\n *\n * PayPalHostWindow contains different\n * PayPal Sdk instances for different purposes\n *\n */\nexport interface PayPalHostWindow extends Window {\n paypal?: PayPalSDK;\n paypalFastlane?: PayPalFastlane;\n paypalFastlaneSdk?: PayPalFastlaneSdk;\n paypalMessages?: PayPalMessagesSdk;\n paypalApms?: PayPalApmSdk;\n paypalGooglePay?: PayPalGooglePaySdk;\n}\n\n/**\n *\n * PayPal SDK config\n *\n */\nexport interface PayPalSdkConfig {\n options: {\n 'client-id'?: string;\n 'merchant-id'?: string;\n 'buyer-country'?: string;\n 'enable-funding'?: EnableFundingType;\n 'disable-funding'?: FundingType;\n currency?: string;\n commit?: boolean;\n intent?: PayPalIntent;\n components?: PayPalSdkComponents;\n locale?: string;\n };\n attributes: {\n 'data-client-metadata-id'?: string;\n 'data-partner-attribution-id'?: string;\n 'data-sdk-client-token'?: string;\n 'data-namespace'?: string;\n 'data-client-token'?: string;\n };\n}\n\nexport enum PayPalIntent {\n AUTHORIZE = 'authorize',\n CAPTURE = 'capture',\n}\n\nexport type PayPalSdkComponents = Array<\n | 'fastlane'\n | 'three-domain-secure'\n | 'buttons'\n | 'funding-eligibility'\n | 'hosted-fields'\n | 'messages'\n | 'payment-fields'\n | 'legal'\n | 'googlepay'\n | 'connect'\n | 'card-fields'\n>;\n\nexport type PayPalLegal = (params: { fundingSource: string }) => {\n render(container: string): void;\n};\n\nexport interface LegalFunding {\n FUNDING: {\n PAY_UPON_INVOICE: string;\n };\n}\n\nexport interface BirthDate {\n getFullYear(): number;\n getDate(): number;\n getMonth(): number;\n}\n\n/**\n *\n * PayPal Sdk instances\n *\n */\nexport interface PayPalSDK {\n CardFields: (data: PaypalCardFieldsConfig) => Promise<PayPalCardFields>;\n Googlepay: () => {\n config: () => Promise<GooglePayConfig>;\n confirmOrder: (arg0: {\n orderId: string;\n paymentMethodData: ConfirmOrderData;\n }) => Promise<{ status: string }>;\n initiatePayerAction: () => void;\n };\n FUNDING: PayPalCommerceSDKFunding;\n HostedFields: {\n isEligible(): boolean;\n render(data: PayPalHostedFieldsRenderOptions): Promise<PayPalHostedFields>;\n };\n Legal: PayPalLegal & LegalFunding;\n Buttons(options: PayPalButtonsOptions): PayPalButtons;\n PaymentFields(options: PayPalPaymentFieldsOptions): PayPalPaymentFields;\n Messages(options: PayPalMessagesOptions): PayPalMessages;\n}\n\nexport interface PaypalCardFieldsConfig {\n inputEvents: {\n onChange(data: PayPalCardFieldsState): void;\n onFocus(data: PayPalCardFieldsState): void;\n onBlur(data: PayPalCardFieldsState): void;\n onInputSubmitRequest(data: PayPalCardFieldsState): void;\n };\n createVaultSetupToken?: (data: PayPalCardFieldsState) => void;\n createOrder?: () => Promise<string>;\n style: PayPalHostedFieldsRenderOptions['styles'];\n onApprove(data: PayPalCardFieldsOnApproveData): void;\n onError(): void;\n}\n\ninterface PayPalFieldsInitializationData {\n placeholder?: string;\n}\n\nexport interface PayPalCardFields {\n isEligible(): boolean;\n CVVField(config?: PayPalFieldsInitializationData): PayPalFields;\n ExpiryField(config?: PayPalFieldsInitializationData): PayPalFields;\n NameField(config?: PayPalFieldsInitializationData): PayPalFields;\n NumberField(config?: PayPalFieldsInitializationData): PayPalFields;\n submit(config?: PayPalCardFieldsSubmitConfig): Promise<void>;\n getState(): Promise<PayPalCardFieldsState>;\n}\n\nexport interface PayPalCardFieldsSubmitConfig {\n billingAddress: {\n company?: string;\n addressLine1: string;\n addressLine2?: string;\n adminArea1: string; // State\n adminArea2: string; // City\n postalCode: string;\n countryCode?: string;\n };\n}\n\nexport interface PayPalCardFieldsOnApproveData {\n vaultSetupToken?: string;\n orderID: string;\n liabilityShift?: LiabilityShiftEnum;\n}\n\ninterface PayPalCardFieldsFieldData {\n isFocused: boolean;\n isEmpty: boolean;\n isValid: boolean;\n isPotentiallyValid: boolean;\n}\n\ntype PayPalCardFieldsCard = PayPalHostedFieldsCard;\n\nexport interface PayPalCardFieldsState {\n cards: PayPalCardFieldsCard[];\n emittedBy: string;\n isFormValid: boolean;\n errors: string[];\n fields: {\n cardCvvField: PayPalCardFieldsFieldData;\n cardNumberField: PayPalCardFieldsFieldData;\n cardNameField?: PayPalCardFieldsFieldData;\n cardExpiryField: PayPalCardFieldsFieldData;\n };\n}\n\nexport interface PayPalFields {\n render(container: HTMLElement | string): Promise<void>;\n clear(): void;\n removeClass(className: string): Promise<void>;\n close(): Promise<void>;\n}\n\nexport interface PayPalFastlaneSdk {\n ThreeDomainSecureClient: {\n isEligible(params: threeDSecureParameters): Promise<boolean>;\n show(): Promise<ThreeDomainSecureClientShowResponse>;\n };\n Fastlane(options?: PayPalFastlaneOptions): Promise<PayPalFastlane>;\n}\n\ninterface ThreeDomainSecureClientShowResponse {\n liabilityShift: LiabilityShiftEnum;\n authenticationState: TDSecureAuthenticationState;\n nonce: string; // Enriched nonce or the original nonce\n}\n\nexport enum TDSecureVerificationMethod {\n Always = 'SCA_ALWAYS',\n}\n\nexport enum TDSecureAuthenticationState {\n Succeeded = 'succeeded',\n Cancelled = 'cancelled',\n Errored = 'errored',\n}\n\nexport enum LiabilityShiftEnum {\n Possible = 'POSSIBLE',\n No = 'NO',\n Unknown = 'UNKNOWN',\n Yes = 'YES',\n}\n\nexport interface threeDSecureParameters {\n amount: string;\n currency: string;\n nonce: string;\n threeDSRequested: boolean;\n transactionContext: {\n experience_context: {\n brand_name?: string;\n locale: string;\n return_url: string;\n cancel_url: string;\n };\n };\n}\n\nexport interface PayPalMessagesSdk {\n Messages(options: MessagingOptions): MessagingRender;\n}\n\nexport interface PayPalApmSdk {\n Buttons(options: PayPalButtonsOptions): PayPalButtons;\n PaymentFields(options: PayPalPaymentFieldsOptions): PayPalPaymentFields;\n}\n\nexport interface PayPalGooglePaySdk {\n Googlepay(): GooglePay;\n}\n\n/**\n *\n * PayPal Payments Hosted Fields\n *\n */\nexport interface PayPalHostedFieldsRenderOptions {\n fields?: {\n number?: PayPalHostedFieldOption;\n cvv?: PayPalHostedFieldOption;\n expirationDate?: PayPalHostedFieldOption;\n };\n paymentsSDK?: boolean;\n styles?: {\n input?: { [key: string]: string };\n '.invalid'?: { [key: string]: string };\n '.valid'?: { [key: string]: string };\n ':focus'?: { [key: string]: string };\n };\n createOrder(): Promise<string>;\n}\n\nexport interface PayPalHostedFieldOption {\n selector: string;\n placeholder?: string;\n}\n\nexport interface PayPalHostedFields {\n submit(options?: PayPalHostedFieldsSubmitOptions): Promise<PayPalHostedFieldsApprove>;\n getState(): PayPalHostedFieldsState;\n on(eventName: string, callback: (event: PayPalHostedFieldsState) => void): void;\n}\n\nexport interface PayPalHostedFieldsSubmitOptions {\n contingencies?: Array<'3D_SECURE'>;\n cardholderName?: string;\n}\n\nexport interface PayPalHostedFieldsApprove {\n orderId: string;\n liabilityShift?: 'POSSIBLE' | 'NO' | 'UNKNOWN';\n}\n\nexport interface PayPalHostedFieldsState {\n cards: PayPalHostedFieldsCard[];\n emittedBy: string;\n fields: {\n number?: PayPalHostedFieldsFieldData;\n expirationDate?: PayPalHostedFieldsFieldData;\n expirationMonth?: PayPalHostedFieldsFieldData;\n expirationYear?: PayPalHostedFieldsFieldData;\n cvv?: PayPalHostedFieldsFieldData;\n postalCode?: PayPalHostedFieldsFieldData;\n };\n}\n\nexport interface PayPalHostedFieldsCard {\n type: string;\n niceType: string;\n code: {\n name: string;\n size: number;\n };\n}\n\nexport interface PayPalHostedFieldsFieldData {\n container: HTMLElement;\n isFocused: boolean;\n isEmpty: boolean;\n isPotentiallyValid: boolean;\n isValid: boolean;\n}\n\n/**\n *\n * PayPal Buttons\n *\n */\nexport interface PayPalButtons {\n render(id: string): void;\n close(): void;\n isEligible(): boolean;\n hasReturned?(): boolean;\n resume?(): void;\n}\n\nexport interface PayPalButtonsOptions {\n experience?: string;\n style?: PayPalButtonStyleOptions;\n fundingSource: string;\n createOrder(): Promise<string>;\n onApprove(\n data: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n ): Promise<boolean | void> | void;\n onInit?(data: InitCallbackPayload, actions: InitCallbackActions): Promise<void>;\n onComplete?(data: CompleteCallbackDataPayload): Promise<void>;\n onClick?(data: ClickCallbackPayload, actions: ClickCallbackActions): Promise<void> | void;\n onError?(error: Error): void;\n onCancel?(): void;\n onShippingAddressChange?(data: ShippingAddressChangeCallbackPayload): Promise<void>;\n onShippingOptionsChange?(data: ShippingOptionChangeCallbackPayload): Promise<void>;\n}\n\nexport interface ShippingOptionChangeCallbackPayload {\n orderId: string;\n selectedShippingOption: PayPalSelectedShippingOption;\n}\n\nexport interface ShippingAddressChangeCallbackPayload {\n orderId: string;\n shippingAddress: PayPalAddress;\n}\n\nexport interface ClickCallbackPayload {\n fundingSource: string;\n}\n\nexport interface ClickCallbackActions {\n reject(): void;\n resolve(): void;\n}\n\nexport interface InitCallbackPayload {\n correlationID: string;\n}\n\nexport interface InitCallbackActions {\n disable(): void;\n enable(): void;\n}\n\nexport interface PayPalAddress {\n city: string;\n countryCode: string;\n postalCode: string;\n state: string;\n}\n\nexport interface PaypalAddressCallbackData {\n city: string;\n country_code: string;\n postal_code: string;\n state: string;\n}\n\nexport interface PayPalSelectedShippingOption {\n amount: {\n currency_code: string;\n value: string;\n };\n id: string;\n label: string;\n selected: boolean;\n type: string;\n}\n\nexport interface ApproveCallbackPayload {\n orderID?: string;\n}\n\nexport interface ApproveCallbackActions {\n order: {\n get: () => Promise<PayPalOrderDetails>;\n };\n}\n\nexport interface PayPalOrderDetails {\n payer: {\n name: {\n given_name: string;\n surname: string;\n };\n email_address: string;\n address: PayPalOrderAddress;\n phone?: {\n phone_number: {\n national_number: string;\n };\n };\n };\n purchase_units: Array<{\n shipping: {\n address: PayPalOrderAddress;\n name: {\n full_name: string;\n };\n };\n }>;\n}\n\nexport interface PayPalOrderAddress {\n address_line_1: string;\n address_line_2: string;\n admin_area_2: string;\n admin_area_1?: string;\n postal_code: string;\n country_code: string;\n}\n\nexport interface CompleteCallbackDataPayload {\n intent: string;\n orderID: string;\n}\n\nexport enum StyleButtonLabel {\n paypal = 'paypal',\n checkout = 'checkout',\n buynow = 'buynow',\n pay = 'pay',\n installment = 'installment',\n}\n\nexport enum StyleButtonColor {\n gold = 'gold',\n blue = 'blue',\n silver = 'silver',\n black = 'black',\n white = 'white',\n}\n\nexport enum StyleButtonShape {\n pill = 'pill',\n rect = 'rect',\n}\n\nexport interface PayPalButtonStyleOptions {\n color?: StyleButtonColor;\n shape?: StyleButtonShape;\n height?: number;\n label?: StyleButtonLabel;\n}\n\nexport interface PayPalButtonOptions {\n fundingSource: string;\n style?: PayPalButtonStyleOptions;\n isServerSideShippingCallbacksEnabled?: boolean;\n isHostedCheckoutEnabled?: boolean;\n onClick?: () => void;\n onCancel?: () => void;\n onPaymentComplete?: () => void;\n onError?(error?: Error | unknown): void;\n}\n\n/**\n *\n * PayPal Messages\n */\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalMessages {\n render(id: string): void;\n}\n\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalMessagesOptions {\n amount: number;\n placement: string;\n style?: PayPalMessagesStyleOptions;\n fundingSource?: string;\n}\n\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalMessagesStyleOptions {\n layout?: string;\n}\n\n/**\n *\n * Google Pay related types\n *\n */\n\ninterface GooglePay {\n config: () => Promise<GooglePayConfig>;\n confirmOrder: (confirmOrderConfig: ConfirmOrderConfig) => Promise<{ status: string }>;\n initiatePayerAction: (payerActionConfig: PayerActionConfig) => Promise<void>;\n}\n\ninterface ConfirmOrderConfig {\n orderId: string;\n paymentMethodData: ConfirmOrderData;\n}\n\nexport interface ConfirmOrderData {\n tokenizationData: {\n type: string;\n token: string;\n };\n info: {\n cardNetwork: string;\n cardDetails: string;\n };\n type: string;\n}\n\ninterface PayerActionConfig {\n orderId: string;\n}\n\nexport interface GooglePayConfig {\n allowedPaymentMethods: AllowedPaymentMethods[];\n apiVersion: number;\n apiVersionMinor: number;\n countryCode: string;\n isEligible: boolean;\n merchantInfo: {\n merchantId: string;\n merchantOrigin: string;\n };\n}\n\nexport interface AllowedPaymentMethods {\n type: string;\n parameters: {\n allowedAuthMethods: string[];\n allowedCardNetworks: string[];\n billingAddressRequired: boolean;\n assuranceDetailsRequired: boolean;\n billingAddressParameters: {\n format: string;\n };\n };\n tokenizationSpecification: {\n type: string;\n parameters: {\n gateway: string;\n gatewayMerchantId: string;\n };\n };\n}\n\n/**\n *\n * PayPal Payment fields\n *\n */\nexport interface PayPalPaymentFields {\n render(id: string): void;\n}\n\nexport interface PayPalPaymentFieldsOptions {\n style?: PayPalFieldsStyleOptions;\n fundingSource: string;\n fields: {\n name?: {\n value?: string;\n };\n email?: {\n value?: string;\n };\n };\n}\n\nexport interface PayPalFieldsStyleOptions {\n variables?: {\n fontFamily?: string;\n fontSizeBase?: string;\n fontSizeSm?: string;\n fontSizeM?: string;\n fontSizeLg?: string;\n textColor?: string;\n colorTextPlaceholder?: string;\n colorBackground?: string;\n colorInfo?: string;\n colorDanger?: string;\n borderRadius?: string;\n borderColor?: string;\n borderWidth?: string;\n borderFocusColor?: string;\n spacingUnit?: string;\n };\n rules?: {\n [key: string]: any;\n };\n}\n\n/**\n *\n * PayLater Messages related types\n * doc: https://developer.paypal.com/docs/checkout/pay-later/us/integrate/reference\n */\nexport interface MessagingRender {\n render(container: string): void;\n}\n\nexport interface MessagesStyleOptions {\n color?: string; // 'blue' | 'black' | 'white' | 'white-no-border' | 'gray' | 'monochrome' | 'grayscale'\n layout?: string; // 'text' | 'flex'\n logo?: {\n type?: string; // 'primary' | 'alternative' | 'inline' | 'none'\n position?: string; // 'left' | 'right' | 'top'\n };\n ratio?: string; // '1x1' | '1x4' | '8x1' | '20x1'\n text?: {\n align?: string; // 'left' | 'right' | 'center'\n color?: string; // 'black' | 'white' | 'monochrome' | 'grayscale'\n size?: number; // from 10 to 16\n };\n}\n\nexport interface MessagingOptions {\n amount: number;\n placement: string;\n style?: MessagesStyleOptions;\n}\n\nexport interface PayPalBNPLConfigurationItem {\n id: string;\n name: string;\n status: boolean;\n styles: Record<string, string>;\n}\n\n/**\n *\n * PayPal Fastlane related types\n *\n */\nexport interface PayPalFastlane {\n identity: PayPalFastlaneIdentity;\n events: PayPalFastlaneEvents;\n profile: PayPalFastlaneProfile;\n FastlaneCardComponent(\n options: PayPalFastlaneCardComponentOptions,\n ): Promise<PayPalFastlaneCardComponentMethods>;\n}\n\nexport interface PayPalFastlaneOptions {\n styles?: PayPalFastlaneStylesOption;\n}\n\nexport interface PayPalFastlaneIdentity {\n lookupCustomerByEmail(email: string): Promise<PayPalFastlaneLookupCustomerByEmailResult>;\n triggerAuthenticationFlow(\n customerContextId: string,\n ): Promise<PayPalFastlaneAuthenticationResult>;\n}\n\nexport interface PayPalFastlaneLookupCustomerByEmailResult {\n customerContextId?: string;\n}\n\nexport interface PayPalFastlaneAuthenticationResult {\n authenticationState?: PayPalFastlaneAuthenticationState;\n profileData?: PayPalFastlaneProfileData;\n}\n\nexport enum PayPalFastlaneAuthenticationState {\n SUCCEEDED = 'succeeded',\n FAILED = 'failed',\n CANCELED = 'canceled',\n UNRECOGNIZED = 'unrecognized',\n}\n\nexport interface PayPalFastlaneProfileData {\n name: PayPalFastlaneProfileName;\n shippingAddress: PayPalFastlaneShippingAddress;\n card: PayPalFastlaneProfileCard;\n}\n\nexport interface PayPalFastlaneProfileName {\n fullName: string;\n firstName?: string;\n lastName?: string;\n}\n\nexport interface PayPalFastlaneProfilePhone {\n countryCode: string;\n nationalNumber: string;\n}\n\nexport interface PayPalFastlaneShippingAddress {\n name: PayPalFastlaneProfileName;\n phoneNumber: PayPalFastlaneProfilePhone;\n address: PayPalFastlaneAddress;\n}\n\nexport interface PayPalFastlaneProfileCard {\n id: string; // nonce / token\n paymentSource: PayPalFastlanePaymentSource;\n}\n\nexport interface PayPalFastlanePaymentSource {\n card: PayPalFastlaneCardSource;\n}\n\nexport interface PayPalFastlaneCardSource {\n brand: string;\n expiry: string; // \"YYYY-MM\"\n lastDigits: string; // \"1111\"\n name: string;\n billingAddress: PayPalFastlaneAddress;\n}\n\nexport interface PayPalFastlaneAddress {\n company?: string;\n addressLine1: string;\n addressLine2?: string;\n adminArea1: string; // State\n adminArea2: string; // City\n postalCode: string;\n countryCode?: string;\n}\n\nexport interface PayPalFastlaneProfileToBcCustomerDataMappingResult {\n authenticationState: PayPalFastlaneAuthenticationState;\n addresses: CustomerAddress[];\n billingAddress?: CustomerAddress;\n shippingAddress?: CustomerAddress;\n instruments: CardInstrument[];\n}\n\nexport interface PayPalFastlaneStylesOption {\n root?: {\n backgroundColorPrimary?: string;\n errorColor?: string;\n fontFamily?: string;\n fontSizeBase?: string;\n padding?: string;\n primaryColor?: string;\n };\n input?: {\n borderRadius?: string;\n borderColor?: string;\n focusBorderColor?: string;\n backgroundColor?: string;\n borderWidth?: string;\n textColorBase?: string;\n };\n toggle?: {\n colorPrimary?: string;\n colorSecondary?: string;\n };\n text?: {\n body?: {\n color?: string;\n fontSize?: string;\n };\n caption?: {\n color?: string;\n fontSize?: string;\n };\n };\n branding?: string; // 'light' | 'dark'\n}\n\nexport interface PayPalFastlaneProfile {\n showCardSelector(): Promise<PayPalFastlaneCardSelectorResponse>;\n showShippingAddressSelector(): Promise<PayPalFastlaneShippingAddressSelectorResponse>;\n}\n\nexport interface PayPalFastlaneShippingAddressSelectorResponse {\n selectionChanged: boolean;\n selectedAddress: PayPalFastlaneShippingAddress;\n}\n\nexport interface PayPalFastlaneCardSelectorResponse {\n selectionChanged: boolean;\n selectedCard: PayPalFastlaneProfileCard;\n}\n\nexport interface PayPalFastlaneCardComponentMethods {\n getPaymentToken(\n options: PayPalFastlaneGetPaymentTokenOptions,\n ): Promise<PayPalFastlaneProfileCard>;\n render(element: string): void;\n}\n\nexport interface PayPalFastlaneGetPaymentTokenOptions {\n name?: PayPalFastlaneProfileName;\n billingAddress?: PayPalFastlaneAddress;\n}\n\nexport interface PayPalFastlaneCardComponentOptions {\n fields?: PayPalFastlaneCardComponentFields;\n}\n\nexport interface PayPalFastlaneCardComponentFields {\n cardholderName?: {\n enabled?: boolean;\n prefill?: string;\n };\n phoneNumber?: {\n placeholder?: string;\n prefill?: string;\n };\n}\n\nexport interface PayPalFastlaneEvents {\n apmSelected: (options: PayPalFastlaneApmSelectedEventOptions) => void;\n emailSubmitted: (options: PayPalFastlaneEmailEnteredEventOptions) => void;\n orderPlaced: (options: PayPalFastlaneOrderPlacedEventOptions) => void;\n}\n\nexport interface PayPalFastlaneEventCommonOptions {\n context_type: 'cs_id';\n context_id: string; // checkout session id\n page_type: 'checkout_page';\n page_name: string; // title of the checkout initiation page\n partner_name: 'bigc';\n user_type: 'store_member' | 'store_guest'; // type of the user on the merchant site\n store_id: string;\n merchant_name: string;\n experiment: string; // stringify JSON object \"[{ treatment_group: 'test' | 'control' }]\"\n}\n\nexport interface PayPalFastlaneApmSelectedEventOptions extends PayPalFastlaneEventCommonOptions {\n apm_shown: '0' | '1'; // alternate payment shown on the checkout page\n apm_list: string; // list of alternate payment shown on checkout page\n apm_selected: string; // alternate payment method selected / methodId\n apm_location: 'pre-email section' | 'payment section'; // placement of APM, whether it be above the email entry or in the radio buttons\n}\n\nexport interface PayPalFastlaneEmailEnteredEventOptions extends PayPalFastlaneEventCommonOptions {\n user_email_saved: boolean; // shows whether checkout was loaded with or without a saved email\n apm_shown: '0' | '1'; // alternate payment shown on the checkout page\n apm_list: string; // list of alternate payment shown on checkout page 'applepay,googlepay,paypal'\n}\n\nexport interface PayPalFastlaneOrderPlacedEventOptions extends PayPalFastlaneEventCommonOptions {\n selected_payment_method: string;\n currency_code: string;\n}\n\nexport interface PayPalFastlanePaymentFormattedPayload {\n paypal_connect_token?: {\n order_id?: string;\n token: string;\n };\n paypal_fastlane_token?: {\n order_id?: string;\n token: string;\n };\n}\n\nexport interface FastlaneStylesSettings {\n fastlaneRootSettingsBackgroundColor?: string;\n fastlaneRootSettingsErrorColor?: string;\n fastlaneRootSettingsFontFamily?: string;\n fastlaneRootSettingsPadding?: string;\n fastlaneRootSettingsPrimaryColor?: string;\n fastlaneRootSettingsFontSize?: string;\n fastlaneInputSettingsBackgroundColor?: string;\n fastlaneInputSettingsBorderRadius?: string;\n fastlaneInputSettingsBorderWidth?: string;\n fastlaneInputSettingsTextColorBase?: string;\n fastlaneInputSettingsBorderColor?: string;\n fastlaneInputSettingsFocusBorderBase?: string;\n fastlaneToggleSettingsColorPrimary?: string;\n fastlaneToggleSettingsColorSecondary?: string;\n fastlaneTextBodySettingsColor?: string;\n fastlaneTextBodySettingsFontSize?: string;\n fastlaneTextCaptionSettingsFontSize?: string;\n fastlaneTextCaptionSettingsColor?: string;\n fastlaneBrandingSettings?: string;\n}\n\n/**\n *\n * Other\n *\n */\nexport enum NonInstantAlternativePaymentMethods {\n OXXO = 'oxxo',\n}\n\nexport interface PayPalOrderData {\n orderId: string;\n setupToken?: string;\n approveUrl: string;\n}\n\nexport interface PayPalUpdateOrderRequestBody {\n availableShippingOptions?: ShippingOption[];\n cartId: string;\n selectedShippingOption?: ShippingOption | null;\n methodId?: string;\n orderId?: number;\n}\n\nexport interface PayPalUpdateOrderResponse {\n statusCode: number;\n}\n\nexport interface PayPalCreateOrderRequestBody extends HostedInstrument, VaultedInstrument {\n cartId: string;\n metadataId?: string;\n setupToken?: boolean;\n fastlaneToken?: string;\n}\n\nexport enum PayPalOrderStatus {\n Approved = 'APPROVED',\n Created = 'CREATED',\n PayerActionRequired = 'PAYER_ACTION_REQUIRED',\n PollingStop = 'POLLING_STOP',\n PollingError = 'POLLING_ERROR',\n}\n\nexport interface PayPalOrderStatusData {\n status: PayPalOrderStatus;\n}\n\nexport interface PayPalCreateOrderCardFieldsResponse {\n orderId: string;\n setupToken?: string;\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { isNil, omitBy } from 'lodash';\n\nimport {\n BillingAddressRequestBody,\n BuyNowCartCreationError,\n Cart,\n CartSource,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethodClientUnavailableError,\n RequestError,\n RequestOptions,\n ShippingOption,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalRequestSender from './paypal-request-sender';\nimport PayPalSdkScriptLoader from './paypal-sdk-script-loader';\nimport {\n PayPalButtonStyleOptions,\n PayPalBuyNowInitializeOptions,\n PayPalCreateOrderCardFieldsResponse,\n PayPalCreateOrderRequestBody,\n PayPalInitializationData,\n PayPalOrderDetails,\n PayPalOrderStatus,\n PayPalSDK,\n StyleButtonColor,\n StyleButtonLabel,\n StyleButtonShape,\n} from './paypal-types';\n\nexport default class PayPalIntegrationService {\n private paypalSdk?: PayPalSDK;\n\n constructor(\n private formPoster: FormPoster,\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalRequestSender: PayPalRequestSender,\n private paypalSdkLoader: PayPalSdkScriptLoader,\n ) {}\n\n /**\n *\n * PayPalSDK methods\n *\n */\n async loadPayPalSdk(\n methodId: string,\n providedCurrencyCode?: string,\n initializesOnCheckoutPage?: boolean,\n forceLoad?: boolean,\n ): Promise<PayPalSDK | undefined> {\n const state = this.paymentIntegrationService.getState();\n const currencyCode = providedCurrencyCode || state.getCartOrThrow().currency.code;\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const storeLanguage = state.getLocale();\n\n this.paypalSdk = await this.paypalSdkLoader.getPayPalSDK(\n paymentMethod,\n currencyCode,\n storeLanguage,\n initializesOnCheckoutPage,\n forceLoad,\n );\n\n return this.paypalSdk;\n }\n\n getPayPalSdkOrThrow(): PayPalSDK {\n if (!this.paypalSdk) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.paypalSdk;\n }\n\n /**\n *\n * Buy Now cart creation methods\n *\n */\n async createBuyNowCartOrThrow(\n buyNowInitializeOptions: PayPalBuyNowInitializeOptions,\n ): Promise<Cart> {\n const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n return await this.paymentIntegrationService.createBuyNowCart(cartRequestBody);\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n\n /**\n *\n * Order methods\n *\n */\n async createOrder(\n providerId: string,\n requestBody?: Partial<PayPalCreateOrderRequestBody>,\n ): Promise<string> {\n const cartId = this.paymentIntegrationService.getState().getCartOrThrow().id;\n\n const { orderId } = await this.paypalRequestSender.createOrder(providerId, {\n cartId,\n ...requestBody,\n });\n\n return orderId;\n }\n\n async createOrderCardFields(\n providerId: string,\n requestBody?: Partial<PayPalCreateOrderRequestBody>,\n ): Promise<PayPalCreateOrderCardFieldsResponse> {\n const cartId = this.paymentIntegrationService.getState().getCartOrThrow().id;\n\n const { orderId, setupToken } = await this.paypalRequestSender.createOrder(providerId, {\n cartId,\n ...requestBody,\n });\n\n return { orderId, ...(setupToken ? { setupToken } : {}) };\n }\n\n async updateOrder(\n providerId: string,\n methodId?: string,\n orderId?: number,\n isServerSideShippingCallbacksEnabled?: boolean,\n ): Promise<void> {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n let consignment;\n\n if (!isServerSideShippingCallbacksEnabled) {\n consignment = state.getConsignmentsOrThrow()[0];\n }\n\n try {\n await this.paypalRequestSender.updateOrder(providerId, {\n availableShippingOptions: isServerSideShippingCallbacksEnabled\n ? []\n : consignment?.availableShippingOptions,\n cartId: cart.id,\n selectedShippingOption: isServerSideShippingCallbacksEnabled\n ? null\n : consignment?.selectedShippingOption,\n ...(methodId ? { methodId } : {}),\n ...(orderId ? { orderId } : {}),\n });\n } catch (_error) {\n throw new RequestError();\n }\n }\n\n async getOrderStatus(methodId: string, options?: RequestOptions): Promise<PayPalOrderStatus> {\n try {\n const { status } = await this.paypalRequestSender.getOrderStatus(methodId, options);\n\n return status;\n } catch (_error) {\n throw new RequestError();\n }\n }\n\n /**\n *\n * Payment submitting and tokenizing methods\n *\n */\n tokenizePayment(methodId: string, orderId?: string): void {\n const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n\n if (!orderId) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n return this.formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n action: 'set_external_checkout',\n provider: methodId,\n order_id: orderId,\n ...(cart.source === CartSource.BuyNow && { cart_id: cart.id }),\n });\n }\n\n async submitPayment(methodId: string, orderId: string, gatewayId?: string): Promise<void> {\n const paymentData = {\n formattedPayload: {\n vault_payment_instrument: null,\n set_as_default_stored_instrument: null,\n device_info: null,\n method_id: methodId,\n paypal_account: {\n order_id: orderId,\n },\n },\n };\n\n await this.paymentIntegrationService.submitPayment({\n methodId,\n paymentData,\n ...(gatewayId ? { gatewayId } : {}),\n });\n }\n\n /**\n *\n * Shipping options methods\n *\n */\n getShippingOptionOrThrow(selectedShippingOptionId?: string): ShippingOption {\n const state = this.paymentIntegrationService.getState();\n const consignment = state.getConsignmentsOrThrow()[0];\n\n const availableShippingOptions = consignment.availableShippingOptions || [];\n\n const recommendedShippingOption = availableShippingOptions.find(\n (option) => option.isRecommended,\n );\n\n const selectedShippingOption = selectedShippingOptionId\n ? availableShippingOptions.find((option) => option.id === selectedShippingOptionId)\n : availableShippingOptions.find((option) => {\n if (consignment.selectedShippingOption) {\n const shippingOptionId = consignment.selectedShippingOption.id;\n\n return option.id === shippingOptionId;\n }\n\n return false;\n });\n\n const shippingOptionToSelect =\n selectedShippingOption || recommendedShippingOption || availableShippingOptions[0];\n\n if (!shippingOptionToSelect) {\n throw new Error(\"Your order can't be shipped to this address\");\n }\n\n return shippingOptionToSelect;\n }\n\n /**\n *\n * Address transforming methods\n *\n */\n getAddress(address?: Partial<BillingAddressRequestBody>): BillingAddressRequestBody {\n return {\n firstName: address?.firstName || '',\n lastName: address?.lastName || '',\n email: address?.email || '',\n phone: address?.phone || '',\n company: '',\n address1: address?.address1 || '',\n address2: address?.address2 || '',\n city: address?.city || '',\n countryCode: address?.countryCode || '',\n postalCode: address?.postalCode || '',\n stateOrProvince: '',\n stateOrProvinceCode: address?.stateOrProvinceCode || '',\n customFields: [],\n };\n }\n\n getBillingAddressFromOrderDetails({ payer }: PayPalOrderDetails): BillingAddressRequestBody {\n return this.getAddress({\n firstName: payer.name.given_name,\n lastName: payer.name.surname,\n email: payer.email_address,\n address1: payer.address.address_line_1,\n address2: payer.address.address_line_2,\n city: payer.address.admin_area_2,\n countryCode: payer.address.country_code,\n postalCode: payer.address.postal_code,\n stateOrProvinceCode: payer.address.admin_area_1,\n phone: payer.phone?.phone_number?.national_number,\n });\n }\n\n getShippingAddressFromOrderDetails(\n orderDetails: PayPalOrderDetails,\n ): BillingAddressRequestBody {\n const { payer, purchase_units } = orderDetails;\n const {\n address,\n name: { full_name },\n } = purchase_units[0].shipping;\n\n const [firstName, ...lastName] = full_name.split(' ');\n\n return this.getAddress({\n firstName,\n lastName: lastName.join(' '),\n email: payer.email_address,\n address1: address.address_line_1,\n address2: address.address_line_2,\n city: address.admin_area_2,\n countryCode: address.country_code,\n postalCode: address.postal_code,\n stateOrProvinceCode: address.admin_area_1,\n });\n }\n\n /**\n *\n * Buttons style methods\n *\n */\n getValidButtonStyle(style: PayPalButtonStyleOptions = {}): PayPalButtonStyleOptions {\n const { color, height, label, shape } = style;\n\n const validStyles = {\n color: color && StyleButtonColor[color] ? color : undefined,\n height: this.getValidHeight(height),\n label: label && StyleButtonLabel[label] ? label : undefined,\n shape: shape && StyleButtonShape[shape] ? shape : undefined,\n };\n\n return omitBy(validStyles, isNil);\n }\n\n getValidHeight(height?: number): number {\n const defaultHeight = 40;\n const minHeight = 25;\n const maxHeight = 55;\n\n if (!height || typeof height !== 'number') {\n return defaultHeight;\n }\n\n if (height > maxHeight) {\n return maxHeight;\n }\n\n if (height < minHeight) {\n return minHeight;\n }\n\n return height;\n }\n\n /**\n *\n * Utils methods\n *\n */\n removeElement(elementId?: string): void {\n const element = elementId && document.getElementById(elementId);\n\n if (element) {\n // For now this is a temporary solution, further removeElement method will be removed\n element.style.display = 'none';\n }\n }\n}\n","export const INTERNAL_USE_ONLY =\n 'This API endpoint is for internal use only and may change in the future';\n","enum ContentType {\n Json = 'application/json',\n JsonV1 = 'application/vnd.bc.v1+json',\n}\n\nexport default ContentType;\n","export const SDK_VERSION_HEADERS = { 'X-Checkout-SDK-Version': LIBRARY_VERSION };\n","import { RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n ContentType,\n INTERNAL_USE_ONLY,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n PayPalCreateOrderRequestBody,\n PayPalOrderData,\n PayPalOrderStatusData,\n PayPalUpdateOrderRequestBody,\n PayPalUpdateOrderResponse,\n} from './paypal-types';\n\nexport default class PayPalRequestSender {\n constructor(private requestSender: RequestSender) {}\n\n async createOrder(\n providerId: string,\n requestBody: Partial<PayPalCreateOrderRequestBody>,\n ): Promise<PayPalOrderData> {\n const url = `/api/storefront/payment/${providerId}`;\n const body = requestBody;\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.post<PayPalOrderData>(url, { headers, body });\n\n return res.body;\n }\n\n async updateOrder(\n methodId: string,\n requestBody: PayPalUpdateOrderRequestBody,\n ): Promise<PayPalUpdateOrderResponse> {\n const url = `/api/storefront/initialization/${methodId}`;\n const body = requestBody;\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.put<PayPalUpdateOrderResponse>(url, { headers, body });\n\n return res.body;\n }\n\n async getOrderStatus(\n methodId: string,\n options?: RequestOptions,\n ): Promise<PayPalOrderStatusData> {\n const url = `/api/storefront/initialization/${methodId}`;\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.get<PayPalOrderStatusData>(url, {\n headers,\n ...options,\n });\n\n return res.body;\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalSdkScriptLoader from './create-paypal-sdk-script-loader';\nimport PaypalIntegrationService from './paypal-integration-service';\nimport PaypalRequestSender from './paypal-request-sender';\n\nconst createPayPalIntegrationService = (paymentIntegrationService: PaymentIntegrationService) => {\n const { getHost } = paymentIntegrationService.getState();\n\n return new PaypalIntegrationService(\n createFormPoster(),\n paymentIntegrationService,\n new PaypalRequestSender(createRequestSender({ host: getHost() })),\n createPayPalSdkScriptLoader(),\n );\n};\n\nexport default createPayPalIntegrationService;\n","import {\n LoadingIndicatorContainerStyles,\n LoadingIndicatorStyles,\n} from './loading-indicator-styles';\n\nconst DEFAULT_STYLES: LoadingIndicatorStyles = {\n size: 70,\n color: '#d9d9d9',\n backgroundColor: '#ffffff',\n};\n\nexport const DEFAULT_CONTAINER_STYLES = {\n position: 'fixed',\n 'background-color': 'rgba(0, 0, 0, 0.4)',\n 'z-index': '1000',\n};\n\nconst ROTATION_ANIMATION = 'embedded-checkout-loading-indicator-rotation';\n\ninterface LoadingIndicatorOptions {\n styles?: LoadingIndicatorStyles;\n containerStyles?: LoadingIndicatorContainerStyles;\n}\n\nexport default class LoadingIndicator {\n private container: HTMLElement;\n private indicator: HTMLElement;\n private styles: LoadingIndicatorStyles;\n private containerStyles: LoadingIndicatorContainerStyles;\n\n constructor(options?: LoadingIndicatorOptions) {\n this.styles = { ...DEFAULT_STYLES, ...(options && options.styles) };\n this.containerStyles = { ...(options && options.containerStyles) };\n\n this.defineAnimation();\n\n this.container = this.buildContainer();\n this.indicator = this.buildIndicator();\n\n this.container.appendChild(this.indicator);\n }\n\n show(parentId?: string): void {\n if (parentId) {\n const parent = document.getElementById(parentId);\n\n if (!parent) {\n throw new Error(\n 'Unable to attach the loading indicator because the parent ID is not valid.',\n );\n }\n\n parent.appendChild(this.container);\n }\n\n this.container.style.visibility = 'visible';\n this.container.style.opacity = '1';\n }\n\n hide(): void {\n const handleTransitionEnd = () => {\n this.container.style.visibility = 'hidden';\n\n this.container.removeEventListener('transitionend', handleTransitionEnd);\n };\n\n this.container.addEventListener('transitionend', handleTransitionEnd);\n\n this.container.style.opacity = '0';\n }\n\n private buildContainer(): HTMLElement {\n const container = document.createElement('div');\n\n container.style.display = 'block';\n container.style.bottom = '0';\n container.style.left = '0';\n container.style.height = '100%';\n container.style.width = '100%';\n container.style.position = 'absolute';\n container.style.right = '0';\n container.style.top = '0';\n container.style.transition = 'all 250ms ease-out';\n container.style.opacity = '0';\n\n this.setStyleAttribute(container, this.containerStyles);\n\n return container;\n }\n\n private buildIndicator(): HTMLElement {\n const indicator = document.createElement('div');\n\n indicator.style.display = 'block';\n indicator.style.width = `${this.styles.size}px`;\n indicator.style.height = `${this.styles.size}px`;\n indicator.style.borderRadius = `${this.styles.size}px`;\n indicator.style.border = 'solid 1px';\n indicator.style.borderColor = `${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`;\n indicator.style.margin = '0 auto';\n indicator.style.position = 'absolute';\n indicator.style.left = '0';\n indicator.style.right = '0';\n indicator.style.top = '50%';\n indicator.style.transform = 'translateY(-50%) rotate(0deg)';\n indicator.style.transformStyle = 'preserve-3d';\n indicator.style.animation = `${ROTATION_ANIMATION} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`;\n\n return indicator;\n }\n\n private setStyleAttribute(element: HTMLElement, attrs: { [key: string]: string }): void {\n Object.keys(attrs).forEach((k) => {\n element.style.setProperty(k, attrs[k]);\n });\n }\n\n private defineAnimation(): void {\n // In order to define CSS animation, we need to insert a stylesheet into the host frame.\n // We only have to do it once.\n if (document.getElementById(ROTATION_ANIMATION)) {\n return;\n }\n\n const style = document.createElement('style');\n\n style.id = ROTATION_ANIMATION;\n\n document.head?.appendChild(style);\n\n if (style.sheet instanceof CSSStyleSheet) {\n // We need to provide the 2nd parameter for IE11, even though it is\n // 0 by default for all other browsers.\n style.sheet.insertRule(\n `\n @keyframes ${ROTATION_ANIMATION} {\n 0% { transform: translateY(-50%) rotate(0deg); }\n 100% { transform: translateY(-50%) rotate(360deg); }\n }\n `,\n 0,\n );\n }\n }\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when a method is unable to proceed because the\n * caller has not provided all the arguments according to their requirements,\n * i.e.: if an argument is missing or it is not the expected data type.\n */\nexport default class InvalidArgumentError extends StandardError {\n constructor(message?: string) {\n super(message || 'Invalid arguments have been provided.');\n\n this.name = 'InvalidArgumentError';\n this.type = 'invalid_argument';\n }\n}\n","import InvalidArgumentError from './invalid-argument-error';\n\n/**\n * This error should be thrown when we are unable to submit a payment because\n * the caller has not provided all the required fields, i.e.: if an argument is\n * missing or it is not the expected data type.\n */\nexport default class PaymentArgumentInvalidError extends InvalidArgumentError {\n constructor(invalidFields?: string[]) {\n let message = 'Unable to submit payment for the order because the payload is invalid.';\n\n if (invalidFields) {\n message = `${message} Make sure the following fields are provided correctly: ${invalidFields.join(\n ', ',\n )}.`;\n }\n\n super(message);\n\n this.name = 'PaymentArgumentInvalidError';\n }\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport RequestError from './request-error';\n\n/**\n * Throw this error if we are unable to successfully submit a server request\n * using a payment method because the method has invalid configuration or is in\n * an invalid state.\n */\nexport default class PaymentMethodInvalidError<T = any> extends RequestError<T> {\n constructor(response?: Response<T>) {\n super(response, {\n message: 'There is a problem processing your payment. Please try again later.',\n });\n\n this.name = 'PaymentMethodInvalidError';\n this.type = 'payment_method_invalid';\n }\n}\n","import StandardError from './standard-error';\n\n/**\n * Throw this error if we are trying to make an order finalization request for a\n * payment method that does not require such procedure.\n */\nexport default class OrderFinalizationNotRequiredError extends StandardError {\n constructor() {\n super('The current order does not need to be finalized at this stage.');\n\n this.name = 'OrderFinalizationNotRequiredError';\n this.type = 'order_finalization_not_required';\n }\n}\n","import { HostedInstrument } from './payment';\n\nexport default function isHostedInstrumentLike(\n instrument: unknown,\n): instrument is HostedInstrument {\n return (\n typeof instrument === 'object' &&\n instrument !== null &&\n (typeof (instrument as HostedInstrument).shouldSaveInstrument === 'undefined' ||\n typeof (instrument as HostedInstrument).shouldSaveInstrument === 'boolean') &&\n (typeof (instrument as HostedInstrument).shouldSetAsDefaultInstrument === 'undefined' ||\n typeof (instrument as HostedInstrument).shouldSetAsDefaultInstrument === 'boolean')\n );\n}\n","import {\n FormattedPayload,\n FormattedVaultedInstrument,\n HostedVaultedInstrument,\n PaymentInstrumentPayload,\n VaultedInstrument,\n} from './payment';\n\nexport default function isVaultedInstrument(\n instrument: PaymentInstrumentPayload,\n): instrument is VaultedInstrument {\n return Boolean((instrument as VaultedInstrument).instrumentId);\n}\n\nexport function isHostedVaultedInstrument(\n instrument: PaymentInstrumentPayload,\n): instrument is HostedVaultedInstrument {\n return (\n Boolean((instrument as HostedVaultedInstrument).instrumentId) &&\n !Object.prototype.hasOwnProperty.call(instrument, 'ccNumber') &&\n !Object.prototype.hasOwnProperty.call(instrument, 'ccCvv')\n );\n}\n\nexport function isFormattedVaultedInstrument(\n instrument: PaymentInstrumentPayload,\n): instrument is FormattedPayload<FormattedVaultedInstrument> {\n const formattedInstrument = (instrument as FormattedPayload<FormattedVaultedInstrument>)\n .formattedPayload;\n\n if (!formattedInstrument) {\n return false;\n }\n\n return (\n typeof formattedInstrument.bigpay_token === 'string' ||\n Boolean(formattedInstrument.bigpay_token && formattedInstrument.bigpay_token.token)\n );\n}\n","import RequestError from './request-error';\n\n// Have to use `as` https://stackoverflow.com/questions/73987044/typeguarding-an-unknown-nested-object should be fixed in 4.8+\nconst isRequestError = (error: unknown): error is RequestError => {\n return typeof error === 'object' && error !== null && 'body' in error;\n};\n\nexport default isRequestError;\n","import { MessagesStyleOptions, PayPalBNPLConfigurationItem } from '../paypal-types';\n\nfunction getPaypalMessagesStylesFromBNPLConfig({\n styles,\n}: PayPalBNPLConfigurationItem): MessagesStyleOptions {\n const messagesStyles: MessagesStyleOptions = {};\n\n if (styles.color) {\n messagesStyles.color = styles.color;\n }\n\n if (styles.layout) {\n messagesStyles.layout = styles.layout;\n }\n\n if (styles['logo-type'] || styles['logo-position']) {\n messagesStyles.logo = {};\n\n if (styles['logo-type']) {\n messagesStyles.logo.type = styles['logo-type'];\n }\n\n if (styles['logo-position']) {\n messagesStyles.logo.position = styles['logo-position'];\n }\n }\n\n if (styles.ratio) {\n messagesStyles.ratio = styles.ratio;\n }\n\n if (styles['text-color'] || styles['text-size']) {\n messagesStyles.text = {};\n\n if (styles['text-color']) {\n messagesStyles.text.color = styles['text-color'];\n }\n\n if (styles['text-size']) {\n messagesStyles.text.size = +styles['text-size'];\n }\n }\n\n return messagesStyles;\n}\n\nexport default getPaypalMessagesStylesFromBNPLConfig;\n","export interface BaseInstrument {\n bigpayToken: string;\n defaultInstrument: boolean;\n provider: string;\n trustedShippingAddress: boolean;\n method: string;\n type: string;\n}\n\nexport function isBaseInstrument(instrument: unknown): instrument is BaseInstrument {\n if (typeof instrument !== 'object' || instrument === null) {\n return false;\n }\n\n return (\n 'bigpayToken' in instrument &&\n 'defaultInstrument' in instrument &&\n 'provider' in instrument &&\n 'trustedShippingAddress' in instrument &&\n 'method' in instrument &&\n 'type' in instrument\n );\n}\n","import {\n HostedInstrument,\n InvalidArgumentError,\n isHostedInstrumentLike,\n isVaultedInstrument,\n OrderFinalizationNotRequiredError,\n OrderPaymentRequestBody,\n OrderRequestBody,\n Payment,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentInstrumentPayload,\n PaymentIntegrationService,\n PaymentMethodInvalidError,\n PaymentRequestOptions,\n PaymentStrategy,\n VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n ApproveCallbackPayload,\n ClickCallbackActions,\n getPaypalMessagesStylesFromBNPLConfig,\n isPaypalProviderError,\n isRedirectActionError,\n MessagingOptions,\n PayPalBNPLConfigurationItem,\n PayPalButtons,\n PayPalButtonsOptions,\n PayPalInitializationData,\n PayPalIntegrationService,\n PayPalMessagesSdk,\n PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\nimport { isBaseInstrument } from '@bigcommerce/checkout-sdk/utility';\n\nimport PayPalCommercePaymentInitializeOptions, {\n WithPayPalCommercePaymentInitializeOptions,\n} from './paypal-commerce-payment-initialize-options';\n\nexport default class PayPalCommercePaymentStrategy implements PaymentStrategy {\n private loadingIndicatorContainer?: string;\n private orderId?: string;\n private paypalButton?: PayPalButtons;\n private paypalcommerce?: PayPalCommercePaymentInitializeOptions;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalIntegrationService: PayPalIntegrationService,\n private payPalSdkScriptLoader: PayPalSdkScriptLoader,\n private loadingIndicator: LoadingIndicator,\n ) {}\n\n async initialize(\n options?: PaymentInitializeOptions & WithPayPalCommercePaymentInitializeOptions,\n ): Promise<void> {\n const { methodId, paypalcommerce } = options || {};\n\n this.paypalcommerce = paypalcommerce;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!paypalcommerce) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.`,\n );\n }\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n const { container, bannerContainerId } = paypalcommerce;\n\n const {\n orderId,\n paypalBNPLConfiguration = [],\n isPayPalCreditAvailable,\n } = paymentMethod.initializationData || {};\n\n if (bannerContainerId !== undefined) {\n if (!document.getElementById(bannerContainerId)) {\n // eslint-disable-next-line no-console\n console.error('Unable to create banner without valid banner container ID.');\n\n return;\n }\n\n const bannerConfiguration = paypalBNPLConfiguration?.find(\n ({ id }) => id === 'checkout',\n );\n\n if (isPayPalCreditAvailable || !bannerConfiguration?.status) {\n return;\n }\n\n const paypalMessages = await this.payPalSdkScriptLoader.getPayPalMessages(\n paymentMethod,\n state.getCartOrThrow().currency.code,\n state.getLocale(),\n );\n\n if (!paypalMessages || typeof paypalMessages?.Messages !== 'function') {\n // eslint-disable-next-line no-console\n console.error(\n '[BC PayPalCommerce PayLater]: banner could not be rendered, due to issues with loading PayPal SDK',\n );\n\n return;\n }\n\n return this.renderMessages(paypalMessages, bannerContainerId, bannerConfiguration);\n }\n\n // Info:\n // The PayPal button and fields should not be rendered when shopper was redirected to Checkout page\n // after using smart payment button on PDP or Cart page. In this case backend returns order id if\n // it is available in checkout session. Therefore, it is not necessary to render PayPal button.\n if (orderId) {\n this.orderId = paymentMethod.initializationData?.orderId;\n\n return;\n }\n\n this.loadingIndicatorContainer = container?.split('#')[1];\n\n await this.paypalIntegrationService.loadPayPalSdk(methodId);\n\n if (paypalcommerce.onInit && typeof paypalcommerce.onInit === 'function') {\n paypalcommerce.onInit(() => this.renderButton(methodId, paypalcommerce));\n }\n\n if (\n paypalcommerce.shouldRenderPayPalButtonOnInitialization === undefined ||\n paypalcommerce.shouldRenderPayPalButtonOnInitialization\n ) {\n this.renderButton(methodId, paypalcommerce);\n }\n }\n\n async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n const { payment, ...order } = payload;\n const { onError } = this.paypalcommerce || {};\n\n if (!payment) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n const { methodId, paymentData } = payment;\n\n if (this.isPayPalVaultedInstrumentPaymentData(paymentData) && !this.orderId) {\n this.orderId = await this.createOrder();\n }\n\n if (!this.orderId) {\n throw new PaymentMethodInvalidError();\n }\n\n const paymentPayload = this.isPayPalVaultedInstrumentPaymentData(paymentData)\n ? this.prepareVaultedInstrumentPaymentPayload(methodId, this.orderId, paymentData)\n : this.preparePaymentPayload(methodId, this.orderId, paymentData);\n\n try {\n await this.paymentIntegrationService.submitOrder(order, options);\n await this.paymentIntegrationService.submitPayment(paymentPayload);\n } catch (error: unknown) {\n if (isRedirectActionError(error)) {\n const redirectUrl = error.body.additional_action_required?.data?.redirect_url;\n\n return new Promise(() => window.location.replace(redirectUrl));\n }\n\n if (this.isProviderError(error)) {\n await this.paypalIntegrationService.loadPayPalSdk(payment.methodId);\n\n await new Promise((_resolve, reject) => {\n if (this.paypalcommerce) {\n this.paypalButton?.close();\n this.renderButton(payment.methodId, this.paypalcommerce);\n this.handleError(new Error('INSTRUMENT_DECLINED'), onError);\n }\n\n reject();\n });\n }\n\n this.handleError(error, onError);\n\n return Promise.reject();\n }\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n deinitialize(): Promise<void> {\n this.orderId = undefined;\n\n this.paypalButton?.close();\n\n return Promise.resolve();\n }\n\n private prepareVaultedInstrumentPaymentPayload(\n methodId: string,\n paypalOrderId: string,\n paymentData: VaultedInstrument & HostedInstrument,\n ): Payment {\n const { instrumentId, shouldSetAsDefaultInstrument } = paymentData;\n\n const shouldConfirmInstrument = !this.isTrustedVaultingFlow(paymentData);\n\n if (shouldConfirmInstrument) {\n return {\n methodId,\n paymentData: {\n shouldSaveInstrument: shouldConfirmInstrument,\n shouldSetAsDefaultInstrument,\n formattedPayload: {\n paypal_account: {\n order_id: paypalOrderId,\n },\n },\n },\n };\n }\n\n return {\n methodId,\n paymentData: {\n instrumentId,\n shouldSetAsDefaultInstrument,\n formattedPayload: {\n paypal_account: {\n order_id: paypalOrderId,\n },\n bigpay_token: {\n token: instrumentId,\n },\n },\n },\n };\n }\n\n private preparePaymentPayload(\n methodId: string,\n paypalOrderId: string,\n paymentData: OrderPaymentRequestBody['paymentData'],\n ): Payment {\n const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n return {\n methodId,\n paymentData: {\n shouldSaveInstrument,\n shouldSetAsDefaultInstrument,\n formattedPayload: {\n paypal_account: {\n order_id: paypalOrderId,\n },\n },\n },\n };\n }\n\n /**\n *\n * Button methods/callbacks\n *\n * */\n private renderButton(\n methodId: string,\n paypalcommerce: PayPalCommercePaymentInitializeOptions,\n ): void {\n const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const { paymentButtonStyles } = paymentMethod.initializationData || {};\n const { checkoutPaymentButtonStyles } = paymentButtonStyles || {};\n const { container, onError, onRenderButton, onValidate, submitForm } = paypalcommerce;\n\n if (!container) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"container\" argument is not provided.',\n );\n }\n\n const containerId = this.getSmartButtonContainerId(container);\n const smartButtonContainer = document.getElementById(containerId);\n\n if (!smartButtonContainer) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because element with id ${containerId} does not exist.`,\n );\n }\n\n const buttonOptions: PayPalButtonsOptions = {\n fundingSource: paypalSdk.FUNDING.PAYPAL,\n style: this.paypalIntegrationService.getValidButtonStyle(checkoutPaymentButtonStyles),\n createOrder: () => this.createOrder(),\n onClick: (_, actions) => this.handleClick(actions, onValidate),\n onApprove: (data) => this.handleApprove(data, submitForm),\n onError: (error) => this.handleError(error, onError),\n onCancel: () => this.toggleLoadingIndicator(false),\n };\n\n this.paypalButton = paypalSdk.Buttons(buttonOptions);\n\n if (!this.paypalButton.isEligible()) {\n return;\n }\n\n if (onRenderButton && typeof onRenderButton === 'function') {\n onRenderButton();\n }\n\n this.paypalButton.render(container);\n }\n\n private async handleClick(\n actions: ClickCallbackActions,\n onValidate: PayPalCommercePaymentInitializeOptions['onValidate'],\n ): Promise<void> {\n const { resolve, reject } = actions;\n\n const onValidationPassed = () => {\n this.toggleLoadingIndicator(true);\n\n return resolve();\n };\n\n return onValidate?.(onValidationPassed, reject);\n }\n\n private handleApprove(\n { orderID }: ApproveCallbackPayload,\n submitForm: PayPalCommercePaymentInitializeOptions['submitForm'],\n ): void {\n this.orderId = orderID;\n\n submitForm?.();\n }\n\n private handleError(\n error: unknown,\n onError: PayPalCommercePaymentInitializeOptions['onError'],\n ): void {\n this.toggleLoadingIndicator(false);\n\n if (onError && typeof onError === 'function') {\n onError(error);\n }\n }\n\n private async createOrder(): Promise<string> {\n const fieldsValues = this.getFieldsValues();\n\n return this.paypalIntegrationService.createOrder('paypalcommercecheckout', {\n shouldSaveInstrument: fieldsValues?.shouldSaveInstrument || false,\n });\n }\n\n /**\n *\n * Vaulting flow methods\n *\n * */\n private getFieldsValues(): HostedInstrument | undefined {\n const { getFieldsValues } = this.paypalcommerce || {};\n\n return typeof getFieldsValues === 'function' ? getFieldsValues() : undefined;\n }\n\n private isTrustedVaultingFlow(paymentData?: PaymentInstrumentPayload): boolean {\n if (paymentData && isVaultedInstrument(paymentData)) {\n const state = this.paymentIntegrationService.getState();\n\n const instruments = state.getInstruments();\n const findInstrument = instruments?.find(\n (instrument) =>\n isBaseInstrument(instrument) &&\n instrument.bigpayToken === paymentData.instrumentId,\n );\n const trustedShippingAddress = isBaseInstrument(findInstrument)\n ? findInstrument.trustedShippingAddress\n : {};\n\n return !!trustedShippingAddress;\n }\n\n return false;\n }\n\n /**\n *\n * Loading Indicator methods\n *\n * */\n private toggleLoadingIndicator(isLoading: boolean): void {\n if (isLoading && this.loadingIndicatorContainer) {\n this.loadingIndicator.show(this.loadingIndicatorContainer);\n } else {\n this.loadingIndicator.hide();\n }\n }\n\n /**\n *\n * Guards\n *\n */\n private isPayPalVaultedInstrumentPaymentData(\n paymentData?: PaymentInstrumentPayload,\n ): paymentData is VaultedInstrument & HostedInstrument {\n return (\n !!paymentData && isVaultedInstrument(paymentData) && isHostedInstrumentLike(paymentData)\n );\n }\n\n /**\n *\n * Render Pay Later Messages\n *\n * */\n private renderMessages(\n paypalMessages: PayPalMessagesSdk,\n bannerContainerId: string,\n bannerConfiguration: PayPalBNPLConfigurationItem,\n ): void {\n const checkout = this.paymentIntegrationService.getState().getCheckoutOrThrow();\n\n const paypalMessagesOptions: MessagingOptions = {\n amount: checkout.outstandingBalance,\n placement: 'payment',\n style: getPaypalMessagesStylesFromBNPLConfig(bannerConfiguration),\n };\n\n paypalMessages.Messages(paypalMessagesOptions).render(`#${bannerContainerId}`);\n }\n\n /**\n *\n * Error handling\n *\n */\n private isProviderError(error: unknown): boolean {\n if (isPaypalProviderError(error)) {\n const paypalProviderError = error?.errors?.filter((e) => e.provider_error) || [];\n\n return paypalProviderError[0]?.provider_error?.code === 'INSTRUMENT_DECLINED';\n }\n\n return false;\n }\n\n private getSmartButtonContainerId(container: string) {\n return container.split('#')[1] ?? container;\n }\n}\n","import { isRequestError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ProviderError } from './is-paypal-provider-error';\n\nexport interface RedirectActionError extends ProviderError {\n body: {\n additional_action_required: {\n type: 'offsite_redirect';\n data: {\n redirect_url: string;\n };\n };\n };\n}\n\nexport default function isRedirectActionError(error: unknown): error is RedirectActionError {\n return (\n isRequestError(error) && error.body.additional_action_required?.type === 'offsite_redirect'\n );\n}\n","export interface ProviderError extends Error {\n errors?: ErrorElement[];\n status?: string;\n three_ds_result?: {\n acs_url: unknown;\n payer_auth_request: unknown;\n merchant_data: unknown;\n callback_url: unknown;\n };\n}\n\nexport interface ErrorElement {\n code: string;\n message: string;\n provider_error?: {\n code: string;\n };\n}\n\nexport default function isPaypalProviderError(error: unknown): error is ProviderError {\n return typeof error === 'object' && error !== null && 'errors' in error;\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalIntegrationService,\n LOADING_INDICATOR_STYLES,\n PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommercePaymentStrategy from './paypal-commerce-payment-strategy';\n\nconst createPayPalCommercePaymentStrategy: PaymentStrategyFactory<PayPalCommercePaymentStrategy> = (\n paymentIntegrationService,\n) =>\n new PayPalCommercePaymentStrategy(\n paymentIntegrationService,\n createPayPalIntegrationService(paymentIntegrationService),\n new PayPalSdkScriptLoader(getScriptLoader()),\n new LoadingIndicator({\n containerStyles: LOADING_INDICATOR_STYLES,\n }),\n );\n\nexport default toResolvableModule(createPayPalCommercePaymentStrategy, [{ id: 'paypalcommerce' }]);\n","import StandardError from './standard-error';\n\n/**\n * Throw this error if we try to call a method that is only a stub and has not\n * been fully implemented.\n */\nexport default class NotImplementedError extends StandardError {\n constructor(message?: string) {\n super(message || 'Not implemented.');\n\n this.name = 'NotImplementedError';\n this.type = 'not_implemented';\n }\n}\n","import {\n InvalidArgumentError,\n NotImplementedError,\n OrderFinalizationNotRequiredError,\n OrderRequestBody,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethodInvalidError,\n PaymentRequestOptions,\n PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n ApproveCallbackPayload,\n ClickCallbackActions,\n getPaypalMessagesStylesFromBNPLConfig,\n MessagingOptions,\n PayPalBNPLConfigurationItem,\n PayPalButtons,\n PayPalButtonsOptions,\n PayPalInitializationData,\n PayPalIntegrationService,\n PayPalMessagesSdk,\n PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommerceCreditPaymentInitializeOptions, {\n WithPayPalCommerceCreditPaymentInitializeOptions,\n} from './paypal-commerce-credit-payment-initialize-options';\n\nexport default class PayPalCommerceCreditPaymentStrategy implements PaymentStrategy {\n private loadingIndicatorContainer?: string;\n private orderId?: string;\n private paypalButton?: PayPalButtons;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalIntegrationService: PayPalIntegrationService,\n private loadingIndicator: LoadingIndicator,\n private payPalSdkScriptLoader: PayPalSdkScriptLoader,\n ) {}\n\n async initialize(\n options?: PaymentInitializeOptions & WithPayPalCommerceCreditPaymentInitializeOptions,\n ): Promise<void> {\n const { methodId, paypalcommerce, paypalcommercecredit } = options || {};\n\n const paypalOptions = paypalcommercecredit || paypalcommerce;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!paypalOptions) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.`,\n );\n }\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n const { paypalBNPLConfiguration = [], orderId } = paymentMethod.initializationData || {};\n const { bannerContainerId, container } = paypalOptions;\n\n if (bannerContainerId !== undefined) {\n if (!document.getElementById(bannerContainerId)) {\n // eslint-disable-next-line no-console\n console.error('Unable to create banner without valid banner container ID.');\n\n return;\n }\n\n const bannerConfiguration =\n paypalBNPLConfiguration &&\n paypalBNPLConfiguration.find(({ id }) => id === 'checkout');\n\n if (!bannerConfiguration?.status) {\n return;\n }\n\n const paypalMessages = await this.payPalSdkScriptLoader.getPayPalMessages(\n paymentMethod,\n state.getCartOrThrow().currency.code,\n state.getLocale(),\n );\n\n return this.renderMessages(paypalMessages, bannerContainerId, bannerConfiguration);\n }\n\n // Info:\n // The PayPal button and fields should not be rendered when shopper was redirected to Checkout page\n // after using smart payment button on PDP or Cart page. In this case backend returns order id if\n // it is available in checkout session. Therefore, it is not necessary to render PayPal button.\n if (orderId) {\n this.orderId = orderId;\n\n return;\n }\n\n await this.paypalIntegrationService.loadPayPalSdk(methodId);\n\n this.loadingIndicatorContainer = container?.split('#')[1];\n\n this.renderButton(methodId, paypalOptions);\n }\n\n async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n const { payment, ...order } = payload;\n\n if (!payment) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n if (!this.orderId) {\n throw new PaymentMethodInvalidError();\n }\n\n await this.paymentIntegrationService.submitOrder(order, options);\n await this.paypalIntegrationService.submitPayment(payment.methodId, this.orderId);\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n deinitialize(): Promise<void> {\n this.orderId = undefined;\n\n this.paypalButton?.close();\n\n return Promise.resolve();\n }\n\n /**\n *\n * Button methods/callbacks\n *\n * */\n private renderButton(\n methodId: string,\n paypalOptions: PayPalCommerceCreditPaymentInitializeOptions,\n ): void {\n if (!paypalOptions?.container) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"container\" argument is not provided.',\n );\n }\n\n const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const { paymentButtonStyles } = paymentMethod.initializationData || {};\n const { checkoutPaymentButtonStyles } = paymentButtonStyles || {};\n\n const { container, onError, onRenderButton, onValidate, submitForm } = paypalOptions;\n\n const fundingSources = [paypalSdk.FUNDING.PAYLATER, paypalSdk.FUNDING.CREDIT];\n let hasRenderedSmartButton = false;\n\n fundingSources.forEach((fundingSource) => {\n if (hasRenderedSmartButton) {\n return;\n }\n\n const buttonOptions: PayPalButtonsOptions = {\n fundingSource,\n style: this.paypalIntegrationService.getValidButtonStyle(\n checkoutPaymentButtonStyles,\n ),\n createOrder: () =>\n this.paypalIntegrationService.createOrder('paypalcommercecreditcheckout'),\n onClick: (_, actions) => this.handleClick(actions, onValidate),\n onApprove: (data) => this.handleApprove(data, submitForm),\n onCancel: () => this.toggleLoadingIndicator(false),\n onError: (error) => this.handleError(error, onError),\n };\n\n this.paypalButton = paypalSdk.Buttons(buttonOptions);\n\n if (!this.paypalButton.isEligible() && fundingSource === paypalSdk.FUNDING.PAYLATER) {\n return;\n }\n\n if (!this.paypalButton.isEligible() && fundingSource === paypalSdk.FUNDING.CREDIT) {\n throw new NotImplementedError(\n `PayPal ${fundingSource} is not available for your region. Please use PayPal Checkout instead.`,\n );\n }\n\n if (onRenderButton && typeof onRenderButton === 'function') {\n onRenderButton();\n }\n\n this.paypalButton.render(container);\n hasRenderedSmartButton = true;\n });\n }\n\n private async handleClick(\n actions: ClickCallbackActions,\n onValidate: PayPalCommerceCreditPaymentInitializeOptions['onValidate'],\n ): Promise<void> {\n const { resolve, reject } = actions;\n\n const onValidationPassed = () => {\n this.toggleLoadingIndicator(true);\n\n return resolve();\n };\n\n if (onValidate && typeof onValidate === 'function') {\n return onValidate(onValidationPassed, reject);\n }\n }\n\n private handleApprove(\n { orderID }: ApproveCallbackPayload,\n submitForm: PayPalCommerceCreditPaymentInitializeOptions['submitForm'],\n ): void {\n this.orderId = orderID;\n\n if (submitForm && typeof submitForm === 'function') {\n submitForm();\n }\n }\n\n private handleError(\n error: Error,\n onError: PayPalCommerceCreditPaymentInitializeOptions['onError'],\n ): void {\n this.toggleLoadingIndicator(false);\n\n if (onError && typeof onError === 'function') {\n onError(error);\n }\n }\n\n /**\n *\n * Loading Indicator methods\n *\n * */\n private toggleLoadingIndicator(isLoading: boolean): void {\n if (isLoading && this.loadingIndicatorContainer) {\n this.loadingIndicator.show(this.loadingIndicatorContainer);\n } else {\n this.loadingIndicator.hide();\n }\n }\n\n /**\n *\n * Render Pay Later Messages\n *\n * */\n private renderMessages(\n paypalMessages: PayPalMessagesSdk,\n bannerContainerId: string,\n bannerConfiguration: PayPalBNPLConfigurationItem,\n ): void {\n const checkout = this.paymentIntegrationService.getState().getCheckoutOrThrow();\n\n const paypalMessagesOptions: MessagingOptions = {\n amount: checkout.outstandingBalance,\n placement: 'payment',\n style: getPaypalMessagesStylesFromBNPLConfig(bannerConfiguration),\n };\n\n paypalMessages.Messages(paypalMessagesOptions).render(`#${bannerContainerId}`);\n }\n}\n","import {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalIntegrationService,\n createPayPalSdkScriptLoader,\n LOADING_INDICATOR_STYLES,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommerceCreditPaymentStrategy from './paypal-commerce-credit-payment-strategy';\n\nconst createPayPalCommerceCreditPaymentStrategy: PaymentStrategyFactory<\n PayPalCommerceCreditPaymentStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceCreditPaymentStrategy(\n paymentIntegrationService,\n createPayPalIntegrationService(paymentIntegrationService),\n new LoadingIndicator({\n containerStyles: LOADING_INDICATOR_STYLES,\n }),\n createPayPalSdkScriptLoader(),\n );\n\nexport default toResolvableModule(createPayPalCommerceCreditPaymentStrategy, [\n { id: 'paypalcommercecredit' },\n]);\n","import {\n InvalidArgumentError,\n NotImplementedError,\n OrderFinalizationNotRequiredError,\n OrderRequestBody,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethodInvalidError,\n PaymentRequestOptions,\n PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n ApproveCallbackPayload,\n ClickCallbackActions,\n PayPalButtons,\n PayPalButtonsOptions,\n PayPalInitializationData,\n PayPalIntegrationService,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommerceVenmoPaymentInitializeOptions, {\n WithPayPalCommerceVenmoPaymentInitializeOptions,\n} from './paypal-commerce-venmo-payment-initialize-options';\n\nexport default class PayPalCommerceVenmoPaymentStrategy implements PaymentStrategy {\n private loadingIndicatorContainer?: string;\n private orderId?: string;\n private paypalButton?: PayPalButtons;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalIntegrationService: PayPalIntegrationService,\n private loadingIndicator: LoadingIndicator,\n ) {}\n\n async initialize(\n options?: PaymentInitializeOptions & WithPayPalCommerceVenmoPaymentInitializeOptions,\n ): Promise<void> {\n const { methodId, paypalcommerce, paypalcommercevenmo } = options || {};\n\n const paypalOptions = paypalcommercevenmo || paypalcommerce;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!paypalOptions) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.`,\n );\n }\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n // Info:\n // The PayPal button and fields should not be rendered when shopper was redirected to Checkout page\n // after using smart payment button on PDP or Cart page. In this case backend returns order id if\n // it is available in checkout session. Therefore, it is not necessary to render PayPal button.\n if (paymentMethod.initializationData?.orderId) {\n this.orderId = paymentMethod.initializationData?.orderId;\n\n return;\n }\n\n await this.paypalIntegrationService.loadPayPalSdk(methodId);\n\n this.loadingIndicatorContainer = paypalOptions.container.split('#')[1];\n\n this.renderButton(methodId, paypalOptions);\n }\n\n async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n const { payment, ...order } = payload;\n\n if (!payment) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n if (!this.orderId) {\n throw new PaymentMethodInvalidError();\n }\n\n await this.paymentIntegrationService.submitOrder(order, options);\n await this.paypalIntegrationService.submitPayment(payment.methodId, this.orderId);\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n deinitialize(): Promise<void> {\n this.orderId = undefined;\n\n this.paypalButton?.close();\n\n return Promise.resolve();\n }\n\n /**\n *\n * Button methods/callbacks\n *\n * */\n private renderButton(\n methodId: string,\n paypalcommercevenmo: PayPalCommerceVenmoPaymentInitializeOptions,\n ): void {\n const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const { paymentButtonStyles } = paymentMethod.initializationData || {};\n const { checkoutPaymentButtonStyles } = paymentButtonStyles || {};\n\n const { container, onError, onRenderButton, onValidate, submitForm } = paypalcommercevenmo;\n\n const buttonOptions: PayPalButtonsOptions = {\n fundingSource: paypalSdk.FUNDING.VENMO,\n style: this.paypalIntegrationService.getValidButtonStyle(checkoutPaymentButtonStyles),\n createOrder: () =>\n this.paypalIntegrationService.createOrder('paypalcommercevenmocheckout'),\n onClick: (_, actions) => this.handleClick(actions, onValidate),\n onApprove: (data) => this.handleApprove(data, submitForm),\n onCancel: () => this.toggleLoadingIndicator(false),\n onError: (error) => this.handleError(error, onError),\n };\n\n this.paypalButton = paypalSdk.Buttons(buttonOptions);\n\n if (!this.paypalButton.isEligible()) {\n throw new NotImplementedError(\n `PayPal Venmo is not available for your region. Please use PayPal Checkout instead.`,\n );\n }\n\n if (onRenderButton && typeof onRenderButton === 'function') {\n onRenderButton();\n }\n\n this.paypalButton.render(container);\n }\n\n private async handleClick(\n actions: ClickCallbackActions,\n onValidate: PayPalCommerceVenmoPaymentInitializeOptions['onValidate'],\n ): Promise<void> {\n const { resolve, reject } = actions;\n\n const onValidationPassed = () => {\n this.toggleLoadingIndicator(true);\n\n return resolve();\n };\n\n return onValidate(onValidationPassed, reject);\n }\n\n private handleApprove(\n { orderID }: ApproveCallbackPayload,\n submitForm: PayPalCommerceVenmoPaymentInitializeOptions['submitForm'],\n ): void {\n this.orderId = orderID;\n\n submitForm();\n this.toggleLoadingIndicator(false);\n }\n\n private handleError(\n error: Error,\n onError: PayPalCommerceVenmoPaymentInitializeOptions['onError'],\n ): void {\n this.toggleLoadingIndicator(false);\n\n if (onError && typeof onError === 'function') {\n onError(error);\n }\n }\n\n /**\n *\n * Loading Indicator methods\n *\n * */\n private toggleLoadingIndicator(isLoading: boolean): void {\n if (isLoading && this.loadingIndicatorContainer) {\n this.loadingIndicator.show(this.loadingIndicatorContainer);\n } else {\n this.loadingIndicator.hide();\n }\n }\n}\n","import {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalIntegrationService,\n LOADING_INDICATOR_STYLES,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommerceVenmoPaymentStrategy from './paypal-commerce-venmo-payment-strategy';\n\nconst createPayPalCommerceVenmoPaymentStrategy: PaymentStrategyFactory<\n PayPalCommerceVenmoPaymentStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceVenmoPaymentStrategy(\n paymentIntegrationService,\n createPayPalIntegrationService(paymentIntegrationService),\n new LoadingIndicator({\n containerStyles: LOADING_INDICATOR_STYLES,\n styles: { backgroundColor: 'black' },\n }),\n );\n\nexport default toResolvableModule(createPayPalCommerceVenmoPaymentStrategy, [\n { id: 'paypalcommercevenmo' },\n]);\n","export const LOADING_INDICATOR_STYLES = {\n 'background-color': 'rgba(0, 0, 0, 0.4)',\n 'z-index': '1000',\n};\n","import { Response } from '@bigcommerce/request-sender';\n\nimport RequestError from './request-error';\n\n/**\n * Throw this error if a request fails to complete within its required timeframe\n * because of a network issue.\n */\nexport default class TimeoutError<T = any> extends RequestError<T> {\n constructor(response?: Response<T>) {\n super(response, {\n message: 'The request has timed out or aborted.',\n });\n\n this.name = 'TimeoutError';\n this.type = 'timeout';\n }\n}\n","import {\n BuyNowCartRequestBody,\n HostedInstrument,\n ShippingOption,\n VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n *\n * PayPal Commerce Funding sources\n *\n */\nexport type FundingType = string[];\nexport type EnableFundingType = FundingType | string;\n\nexport interface PayPalCommerceSDKFunding {\n CARD: string;\n PAYPAL: string;\n CREDIT: string;\n PAYLATER: string;\n OXXO: string;\n SEPA: string;\n VENMO: string;\n}\n\n/**\n *\n * PayPal Commerce SDK\n *\n */\n\nexport interface PayPalCommerceCardFieldsConfig {\n inputEvents: {\n onChange(data: PayPalCommerceCardFieldsState): void;\n onFocus(data: PayPalCommerceCardFieldsState): void;\n onBlur(data: PayPalCommerceCardFieldsState): void;\n onInputSubmitRequest(data: PayPalCommerceCardFieldsState): void;\n };\n createVaultSetupToken?: (data: PayPalCommerceCardFieldsState) => void;\n createOrder?: () => Promise<string>;\n style: PayPalCommerceHostedFieldsRenderOptions['styles'];\n onApprove(data: PayPalCommerceCardFieldsOnApproveData): void;\n onError(): void;\n}\n\nexport interface PayPalCommerceCardFieldsOnApproveData {\n vaultSetupToken?: string;\n orderID: string;\n liabilityShift?: LiabilityShiftEnum;\n}\n\nexport enum LiabilityShiftEnum {\n Possible = 'POSSIBLE',\n No = 'NO',\n Unknown = 'UNKNOWN',\n Yes = 'YES',\n}\n\ninterface PayPalCommerceCardFieldsFieldData {\n isFocused: boolean;\n isEmpty: boolean;\n isValid: boolean;\n isPotentiallyValid: boolean;\n}\n\ntype PayPalCommerceCardFieldsCard = PayPalCommerceHostedFieldsCard;\n\nexport interface PayPalCommerceCardFieldsState {\n cards: PayPalCommerceCardFieldsCard[];\n emittedBy: string;\n isFormValid: boolean;\n errors: string[];\n fields: {\n cardCvvField: PayPalCommerceCardFieldsFieldData;\n cardNumberField: PayPalCommerceCardFieldsFieldData;\n cardNameField?: PayPalCommerceCardFieldsFieldData;\n cardExpiryField: PayPalCommerceCardFieldsFieldData;\n };\n}\n\nexport interface PayPalCommerceFields {\n render(container: HTMLElement | string): Promise<void>;\n clear(): void;\n removeClass(className: string): Promise<void>;\n close(): Promise<void>;\n}\n\ninterface PayPalCommerceFieldsInitializationData {\n placeholder?: string;\n}\n\nexport interface PayPalCommerceCardFields {\n isEligible(): boolean;\n CVVField(config?: PayPalCommerceFieldsInitializationData): PayPalCommerceFields;\n ExpiryField(config?: PayPalCommerceFieldsInitializationData): PayPalCommerceFields;\n NameField(config?: PayPalCommerceFieldsInitializationData): PayPalCommerceFields;\n NumberField(config?: PayPalCommerceFieldsInitializationData): PayPalCommerceFields;\n submit(config?: PayPalCommerceCardFieldsSubmitConfig): Promise<void>;\n getState(): Promise<PayPalCommerceCardFieldsState>;\n}\n\nexport interface PayPalCommerceCardFieldsSubmitConfig {\n billingAddress: {\n company?: string;\n addressLine1: string;\n addressLine2?: string;\n adminArea1: string; // State\n adminArea2: string; // City\n postalCode: string;\n countryCode?: string;\n };\n}\n\nexport interface PayPalSDK {\n CardFields: (data: PayPalCommerceCardFieldsConfig) => Promise<PayPalCommerceCardFields>;\n Googlepay: () => {\n config: () => Promise<GooglePayConfig>;\n confirmOrder: (arg0: {\n orderId: string;\n paymentMethodData: ConfirmOrderData;\n }) => Promise<{ status: string }>;\n initiatePayerAction: () => void;\n };\n FUNDING: PayPalCommerceSDKFunding;\n HostedFields: {\n isEligible(): boolean;\n render(data: PayPalCommerceHostedFieldsRenderOptions): Promise<PayPalCommerceHostedFields>;\n };\n Legal: PayPalLegal & LegalFunding;\n Buttons(options: PayPalCommerceButtonsOptions): PayPalCommerceButtons;\n PaymentFields(options: PayPalCommercePaymentFieldsOptions): PayPalCommercePaymentFields;\n Messages(options: PayPalCommerceMessagesOptions): PayPalCommerceMessages;\n}\n\nexport interface ConfirmOrderData {\n tokenizationData: {\n type: string;\n token: string;\n };\n info: {\n cardNetwork: string;\n cardDetails: string;\n };\n type: string;\n}\n\nexport interface GooglePayConfig {\n allowedPaymentMethods: AllowedPaymentMethods[];\n apiVersion: number;\n apiVersionMinor: number;\n countryCode: string;\n isEligible: boolean;\n merchantInfo: {\n merchantId: string;\n merchantOrigin: string;\n };\n}\n\nexport interface AllowedPaymentMethods {\n type: string;\n parameters: {\n allowedAuthMethods: string[];\n allowedCardNetworks: string[];\n billingAddressRequired: boolean;\n assuranceDetailsRequired: boolean;\n billingAddressParameters: {\n format: string;\n };\n };\n tokenizationSpecification: {\n type: string;\n parameters: {\n gateway: string;\n gatewayMerchantId: string;\n };\n };\n}\n\nexport type PayPalLegal = (params: { fundingSource: string }) => {\n render(container: string): void;\n};\n\nexport interface LegalFunding {\n FUNDING: {\n PAY_UPON_INVOICE: string;\n };\n}\n\nexport interface BirthDate {\n getFullYear(): number;\n getDate(): number;\n getMonth(): number;\n}\n\nexport interface PayPalCommerceScriptParams {\n options: {\n 'client-id'?: string;\n 'merchant-id'?: string;\n 'buyer-country'?: string;\n 'disable-funding'?: FundingType;\n 'enable-funding'?: EnableFundingType;\n currency?: string;\n commit?: boolean;\n intent?: PayPalCommerceIntent;\n components?: ComponentsScriptType;\n locale?: string;\n };\n attributes: {\n 'data-client-token'?: string;\n 'data-client-metadata-id'?: string;\n 'data-partner-attribution-id'?: string;\n 'data-user-id-token'?: string;\n };\n}\n\nexport enum PayPalCommerceIntent {\n AUTHORIZE = 'authorize',\n CAPTURE = 'capture',\n}\n\nexport type ComponentsScriptType = Array<\n | 'buttons'\n | 'funding-eligibility'\n | 'hosted-fields'\n | 'messages'\n | 'payment-fields'\n | 'legal'\n | 'googlepay'\n | 'connect'\n | 'card-fields'\n>;\n\nexport interface PayPalCommerceHostWindow extends Window {\n paypal?: PayPalSDK;\n}\n\n/**\n *\n * PayPal Commerce Initialization Data\n *\n */\nexport interface PayPalCommerceInitializationData {\n attributionId?: string;\n availableAlternativePaymentMethods: FundingType;\n buttonStyle?: PayPalButtonStyleOptions;\n buyerCountry?: string;\n clientId: string;\n clientToken?: string;\n enabledAlternativePaymentMethods: FundingType;\n isDeveloperModeApplicable?: boolean;\n intent?: PayPalCommerceIntent;\n isAcceleratedCheckoutEnabled?: boolean;\n isHostedCheckoutEnabled?: boolean;\n isPayPalCreditAvailable?: boolean;\n isVenmoEnabled?: boolean;\n isGooglePayEnabled?: boolean;\n merchantId?: string;\n orderId?: string;\n shouldRenderFields?: boolean;\n shouldRunAcceleratedCheckout?: boolean;\n paymentButtonStyles?: Record<string, PayPalButtonStyleOptions>;\n paypalBNPLConfiguration?: PayPalBNPLConfigurationItem[];\n isServerSideShippingCallbacksEnabled?: boolean;\n}\n\nexport interface PayPalBNPLConfigurationItem {\n id: string;\n name: string;\n status: boolean;\n styles: Record<string, string>;\n}\n\n/**\n *\n * PayPal Commerce BuyNow\n *\n */\nexport interface PayPalBuyNowInitializeOptions {\n getBuyNowCartRequestBody(): BuyNowCartRequestBody;\n}\n\n/**\n *\n * PayPal Commerce Hosted Fields\n *\n */\nexport interface PayPalCommerceHostedFieldsRenderOptions {\n fields?: {\n number?: PayPalCommerceHostedFieldOption;\n cvv?: PayPalCommerceHostedFieldOption;\n expirationDate?: PayPalCommerceHostedFieldOption;\n };\n paymentsSDK?: boolean;\n styles?: {\n input?: { [key: string]: string };\n '.invalid'?: { [key: string]: string };\n '.valid'?: { [key: string]: string };\n ':focus'?: { [key: string]: string };\n };\n createOrder(): Promise<string>;\n}\n\nexport interface PayPalCommerceHostedFieldOption {\n selector: string;\n placeholder?: string;\n}\n\nexport interface PayPalCommerceHostedFields {\n submit(\n options?: PayPalCommerceHostedFieldsSubmitOptions,\n ): Promise<PayPalCommerceHostedFieldsApprove>;\n getState(): PayPalCommerceHostedFieldsState;\n on(eventName: string, callback: (event: PayPalCommerceHostedFieldsState) => void): void;\n}\n\nexport interface PayPalCommerceHostedFieldsSubmitOptions {\n contingencies?: Array<'3D_SECURE'>;\n cardholderName?: string;\n}\n\nexport interface PayPalCommerceHostedFieldsApprove {\n orderId: string;\n liabilityShift?: 'POSSIBLE' | 'NO' | 'UNKNOWN';\n}\n\nexport interface PayPalCommerceHostedFieldsState {\n cards: PayPalCommerceHostedFieldsCard[];\n emittedBy: string;\n fields: {\n number?: PayPalCommerceHostedFieldsFieldData;\n expirationDate?: PayPalCommerceHostedFieldsFieldData;\n expirationMonth?: PayPalCommerceHostedFieldsFieldData;\n expirationYear?: PayPalCommerceHostedFieldsFieldData;\n cvv?: PayPalCommerceHostedFieldsFieldData;\n postalCode?: PayPalCommerceHostedFieldsFieldData;\n };\n}\n\nexport interface PayPalCommerceHostedFieldsCard {\n type: string;\n niceType: string;\n code: {\n name: string;\n size: number;\n };\n}\n\nexport interface PayPalCommerceHostedFieldsFieldData {\n container: HTMLElement;\n isFocused: boolean;\n isEmpty: boolean;\n isPotentiallyValid: boolean;\n isValid: boolean;\n}\n\n/**\n *\n * PayPal Commerce Buttons\n *\n */\nexport interface PayPalCommerceButtons {\n render(id: string): void;\n close(): void;\n isEligible(): boolean;\n hasReturned?(): boolean;\n resume?(): void;\n}\n\nexport interface PayPalCommerceButtonsOptions {\n experience?: string;\n style?: PayPalButtonStyleOptions;\n fundingSource: string;\n createOrder(): Promise<string>;\n onApprove(\n data: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n ): Promise<boolean | void> | void;\n onInit?(data: InitCallbackPayload, actions: InitCallbackActions): Promise<void>;\n onComplete?(data: CompleteCallbackDataPayload): Promise<void>;\n onClick?(data: ClickCallbackPayload, actions: ClickCallbackActions): Promise<void> | void;\n onError?(error: Error): void;\n onCancel?(): void;\n onShippingAddressChange?(data: ShippingAddressChangeCallbackPayload): Promise<void>;\n onShippingOptionsChange?(data: ShippingOptionChangeCallbackPayload): Promise<void>;\n}\n\nexport interface ShippingOptionChangeCallbackPayload {\n orderId: string;\n selectedShippingOption: PayPalSelectedShippingOption;\n}\n\nexport interface ShippingAddressChangeCallbackPayload {\n orderId: string;\n shippingAddress: PayPalAddress;\n}\n\nexport interface ClickCallbackPayload {\n fundingSource: string;\n}\n\nexport interface ClickCallbackActions {\n reject(): void;\n resolve(): void;\n}\n\nexport interface InitCallbackPayload {\n correlationID: string;\n}\n\nexport interface InitCallbackActions {\n disable(): void;\n enable(): void;\n}\n\nexport interface PayPalAddress {\n city: string;\n countryCode: string;\n postalCode: string;\n state: string;\n}\n\nexport interface PaypalAddressCallbackData {\n city: string;\n country_code: string;\n postal_code: string;\n state: string;\n}\n\nexport interface PayPalSelectedShippingOption {\n amount: {\n currency_code: string;\n value: string;\n };\n id: string;\n label: string;\n selected: boolean;\n type: string;\n}\n\nexport interface ApproveCallbackPayload {\n orderID?: string;\n}\n\nexport interface ApproveCallbackActions {\n order: {\n get: () => Promise<PayPalOrderDetails>;\n };\n}\n\nexport interface PayPalOrderDetails {\n payer: {\n name: {\n given_name: string;\n surname: string;\n };\n email_address: string;\n address: PayPalOrderAddress;\n phone?: {\n phone_number: {\n national_number: string;\n };\n };\n };\n purchase_units: Array<{\n shipping: {\n address: PayPalOrderAddress;\n name: {\n full_name: string;\n };\n };\n }>;\n}\n\nexport interface PayPalOrderAddress {\n address_line_1: string;\n address_line_2: string;\n admin_area_2: string;\n admin_area_1?: string;\n postal_code: string;\n country_code: string;\n}\n\nexport interface CompleteCallbackDataPayload {\n intent: string;\n orderID: string;\n}\n\nexport enum StyleButtonLabel {\n paypal = 'paypal',\n checkout = 'checkout',\n buynow = 'buynow',\n pay = 'pay',\n installment = 'installment',\n}\n\nexport enum StyleButtonColor {\n gold = 'gold',\n blue = 'blue',\n silver = 'silver',\n black = 'black',\n white = 'white',\n}\n\nexport enum StyleButtonShape {\n pill = 'pill',\n rect = 'rect',\n}\n\nexport interface PayPalButtonStyleOptions {\n color?: StyleButtonColor;\n shape?: StyleButtonShape;\n height?: number;\n label?: StyleButtonLabel;\n}\n\n/**\n *\n * PayPal Commerce Payment fields\n *\n */\nexport interface PayPalCommercePaymentFields {\n render(id: string): void;\n}\n\nexport interface PayPalCommercePaymentFieldsOptions {\n style?: PayPalCommerceFieldsStyleOptions;\n fundingSource: string;\n fields: {\n name?: {\n value?: string;\n };\n email?: {\n value?: string;\n };\n };\n}\n\nexport interface PayPalCommerceFieldsStyleOptions {\n variables?: {\n fontFamily?: string;\n fontSizeBase?: string;\n fontSizeSm?: string;\n fontSizeM?: string;\n fontSizeLg?: string;\n textColor?: string;\n colorTextPlaceholder?: string;\n colorBackground?: string;\n colorInfo?: string;\n colorDanger?: string;\n borderRadius?: string;\n borderColor?: string;\n borderWidth?: string;\n borderFocusColor?: string;\n spacingUnit?: string;\n };\n rules?: {\n [key: string]: any;\n };\n}\n\n/**\n *\n * PayPalCommerce Messages\n */\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalCommerceMessages {\n render(id: string): void;\n}\n\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalCommerceMessagesOptions {\n amount: number;\n placement: string;\n style?: PayPalCommerceMessagesStyleOptions;\n fundingSource?: string;\n}\n\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalCommerceMessagesStyleOptions {\n layout?: string;\n}\n\n/**\n *\n * Other\n *\n */\nexport enum NonInstantAlternativePaymentMethods {\n OXXO = 'oxxo',\n IDEAL = 'ideal',\n}\n\nexport interface PayPalOrderData {\n orderId: string;\n setupToken?: string;\n approveUrl: string;\n fastlaneToken?: string;\n}\n\nexport interface PayPalUpdateOrderRequestBody {\n availableShippingOptions?: ShippingOption[];\n cartId: string;\n selectedShippingOption?: ShippingOption | null;\n}\n\nexport interface PayPalUpdateOrderResponse {\n statusCode: number;\n}\n\nexport interface PayPalCreateOrderRequestBody extends HostedInstrument, VaultedInstrument {\n cartId: string;\n metadataId?: string;\n setupToken?: boolean;\n fastlaneToken?: string;\n}\n\nexport enum PayPalOrderStatus {\n Approved = 'APPROVED',\n Created = 'CREATED',\n PayerActionRequired = 'PAYER_ACTION_REQUIRED',\n PollingStop = 'POLLING_STOP',\n PollingError = 'POLLING_ERROR',\n}\n\nexport interface PayPalOrderStatusData {\n status: PayPalOrderStatus;\n}\n\nexport interface PayPalCreateOrderCardFieldsResponse {\n orderId: string;\n setupToken?: string;\n}\n","import { noop } from 'lodash';\n\nimport {\n InvalidArgumentError,\n OrderFinalizationNotRequiredError,\n OrderRequestBody,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethodClientUnavailableError,\n PaymentMethodInvalidError,\n PaymentRequestOptions,\n PaymentStrategy,\n TimeoutError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n PayPalApmSdk,\n PayPalInitializationData,\n PayPalIntegrationService,\n PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport {\n ApproveCallbackPayload,\n NonInstantAlternativePaymentMethods,\n PayPalCommerceButtons,\n PayPalCommerceButtonsOptions,\n PayPalCommerceInitializationData,\n PayPalOrderStatus,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceAlternativeMethodsPaymentOptions, {\n WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions,\n} from './paypal-commerce-alternative-methods-payment-initialize-options';\n\nconst POLLING_INTERVAL = 3000;\nconst MAX_POLLING_TIME = 300000;\n\nexport default class PayPalCommerceAlternativeMethodsPaymentStrategy implements PaymentStrategy {\n private loadingIndicatorContainer?: string;\n private orderId?: string;\n private paypalButton?: PayPalCommerceButtons;\n private paypalApms?: PayPalApmSdk;\n private pollingTimer = 0;\n private stopPolling = noop;\n private isOrderApprovedProcessing = false;\n private paypalcommercealternativemethods?: PayPalCommerceAlternativeMethodsPaymentOptions;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceIntegrationService: PayPalIntegrationService,\n private paypalSdkScriptLoader: PayPalSdkScriptLoader,\n private loadingIndicator: LoadingIndicator,\n private pollingInterval: number = POLLING_INTERVAL,\n private maxPollingIntervalTime: number = MAX_POLLING_TIME,\n ) {}\n\n async initialize(\n options: PaymentInitializeOptions &\n WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions,\n ): Promise<void> {\n const {\n gatewayId,\n methodId,\n paypalcommerce, // FIXME: this option is deprecated\n paypalcommercealternativemethods,\n } = options;\n const paypalOptions = paypalcommercealternativemethods || paypalcommerce;\n\n this.paypalcommercealternativemethods = paypalcommercealternativemethods;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!gatewayId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.gatewayId\" argument is not provided.',\n );\n }\n\n if (!paypalOptions) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercealternativemethods\" argument is not provided.`,\n );\n }\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(\n methodId,\n gatewayId,\n );\n const { orderId, shouldRenderFields } = paymentMethod.initializationData || {};\n const features = state.getStoreConfigOrThrow().checkoutSettings.features;\n\n this.isOrderApprovedProcessing = isExperimentEnabled(\n features,\n 'PAYPAL-5431.order_approved_processing',\n false,\n );\n\n // Info:\n // The PayPal button and fields should not be rendered when shopper was redirected to Checkout page\n // after using smart payment button on PDP or Cart page. In this case backend returns order id if\n // it is available in checkout session. Therefore, it is not necessary to render PayPal button.\n if (orderId) {\n this.orderId = orderId;\n\n return;\n }\n\n this.paypalApms = await this.paypalSdkScriptLoader.getPayPalApmsSdk(\n paymentMethod,\n state.getCartOrThrow().currency.code,\n state.getLocale(),\n );\n\n this.loadingIndicatorContainer = paypalOptions.container.split('#')[1];\n\n this.renderButton(methodId, gatewayId, paypalOptions);\n\n if (shouldRenderFields) {\n this.renderFields(methodId, paypalOptions);\n }\n }\n\n async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n const { payment, ...order } = payload;\n\n if (!payment) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n const { methodId, gatewayId } = payment;\n\n if (!this.orderId) {\n throw new PaymentMethodInvalidError();\n }\n\n if (!this.isOrderApprovedProcessing && methodId === 'ideal') {\n await new Promise((resolve, reject) => {\n void this.initializePollingMechanism(methodId, resolve, reject, gatewayId);\n });\n }\n\n if (\n !this.isNonInstantPaymentMethod(methodId) ||\n (methodId === NonInstantAlternativePaymentMethods.IDEAL &&\n !this.isOrderApprovedProcessing)\n ) {\n await this.paymentIntegrationService.submitOrder(order, options);\n }\n\n await this.paypalCommerceIntegrationService.submitPayment(\n methodId,\n this.orderId,\n gatewayId,\n );\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n deinitialize(): Promise<void> {\n this.orderId = undefined;\n\n if (!this.isOrderApprovedProcessing) {\n this.resetPollingMechanism();\n }\n\n this.paypalButton?.close();\n\n return Promise.resolve();\n }\n\n /**\n *\n * Polling mechanism\n *\n *\n * */\n private async initializePollingMechanism(\n methodId: string,\n resolvePromise: (value?: unknown) => void,\n rejectPromise: (value?: unknown) => void,\n gatewayId?: string,\n ): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(resolve, this.pollingInterval);\n\n this.stopPolling = () => {\n clearTimeout(timeout);\n this.toggleLoadingIndicator(false);\n\n return reject();\n };\n });\n\n try {\n this.pollingTimer += this.pollingInterval;\n\n const orderStatus = await this.paypalCommerceIntegrationService.getOrderStatus(\n gatewayId ?? 'paypalcommerce',\n );\n\n const isOrderApproved = orderStatus === PayPalOrderStatus.Approved;\n const isPollingError = orderStatus === PayPalOrderStatus.PollingError;\n\n if (isOrderApproved) {\n this.deinitializePollingMechanism();\n\n return resolvePromise();\n }\n\n if (isPollingError) {\n return rejectPromise();\n }\n\n if (!isOrderApproved && this.pollingTimer < this.maxPollingIntervalTime) {\n return await this.initializePollingMechanism(\n methodId,\n resolvePromise,\n rejectPromise,\n gatewayId,\n );\n }\n\n await this.reinitializeStrategy({\n methodId,\n gatewayId,\n paypalcommercealternativemethods: this.paypalcommercealternativemethods,\n });\n\n this.handleError(new TimeoutError());\n } catch (error) {\n rejectPromise();\n }\n }\n\n private deinitializePollingMechanism(): void {\n this.stopPolling();\n this.pollingTimer = 0;\n }\n\n private resetPollingMechanism(): void {\n this.deinitializePollingMechanism();\n }\n\n private async reinitializeStrategy(\n options: PaymentInitializeOptions &\n WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions,\n ) {\n await this.deinitialize();\n await this.initialize(options);\n }\n\n private handleError(error: unknown) {\n const { onError } = this.paypalcommercealternativemethods || {};\n\n if (!this.isOrderApprovedProcessing) {\n this.resetPollingMechanism();\n }\n\n this.toggleLoadingIndicator(false);\n\n if (onError && typeof onError === 'function') {\n onError(error);\n }\n }\n\n /**\n *\n * Button methods/callbacks\n *\n * */\n private renderButton(\n methodId: string,\n gatewayId: string,\n paypalOptions: PayPalCommerceAlternativeMethodsPaymentOptions,\n ): void {\n const paypalAmpsSdk = this.getPaypalAmpsSdkOrThrow();\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalCommerceInitializationData>(\n methodId,\n gatewayId,\n );\n const { buttonStyle } = paymentMethod.initializationData || {};\n\n const { container, onError, onRenderButton, submitForm } = paypalOptions;\n\n const buttonOptions: PayPalCommerceButtonsOptions = {\n fundingSource: methodId,\n style: this.paypalCommerceIntegrationService.getValidButtonStyle(buttonStyle),\n onInit: (_, actions) => paypalOptions.onInitButton(actions),\n createOrder: () => this.onCreateOrder(methodId, gatewayId, paypalOptions),\n onApprove: (data) => this.handleApprove(data, submitForm),\n onCancel: () => {\n this.toggleLoadingIndicator(false);\n this.deinitializePollingMechanism();\n },\n onError: (error) => {\n this.deinitializePollingMechanism();\n this.handleFailure(error, onError);\n },\n onClick: async (_, actions) =>\n paypalOptions.onValidate(actions.resolve, actions.reject),\n };\n\n this.paypalButton = paypalAmpsSdk.Buttons(buttonOptions);\n\n if (!this.paypalButton.isEligible()) {\n return;\n }\n\n if (onRenderButton && typeof onRenderButton === 'function') {\n onRenderButton();\n }\n\n this.paypalButton.render(container);\n }\n\n private async onCreateOrder(\n methodId: string,\n gatewayId: string,\n paypalOptions: PayPalCommerceAlternativeMethodsPaymentOptions,\n ): Promise<string> {\n const { onValidate } = paypalOptions;\n\n const onValidationPassed = () => {\n this.toggleLoadingIndicator(true);\n\n return () => Promise.resolve();\n };\n\n await onValidate(onValidationPassed, noop);\n\n const orderId = await this.paypalCommerceIntegrationService.createOrder(\n 'paypalcommercealternativemethodscheckout',\n );\n\n if (\n this.isNonInstantPaymentMethod(methodId) &&\n ((methodId === NonInstantAlternativePaymentMethods.IDEAL &&\n this.isOrderApprovedProcessing) ||\n methodId === NonInstantAlternativePaymentMethods.OXXO)\n ) {\n const order = { useStoreCredit: false };\n const options = {\n params: {\n methodId,\n gatewayId,\n },\n };\n\n await this.paymentIntegrationService.submitOrder(order, options);\n\n if (methodId === NonInstantAlternativePaymentMethods.IDEAL) {\n const state = this.paymentIntegrationService.getState();\n const bcOrderId = state.getOrder()?.orderId;\n\n await this.paypalCommerceIntegrationService.updateOrder(\n 'paypalcommercealternativemethods',\n methodId,\n bcOrderId,\n );\n }\n\n await this.paypalCommerceIntegrationService.submitPayment(methodId, orderId, gatewayId);\n }\n\n return orderId;\n }\n\n private handleApprove(\n { orderID }: ApproveCallbackPayload,\n submitForm: PayPalCommerceAlternativeMethodsPaymentOptions['submitForm'],\n ): void {\n this.orderId = orderID;\n\n submitForm();\n }\n\n private handleFailure(\n error: Error,\n onError: PayPalCommerceAlternativeMethodsPaymentOptions['onError'],\n ): void {\n this.toggleLoadingIndicator(false);\n\n if (onError && typeof onError === 'function') {\n onError(error);\n }\n }\n\n /**\n *\n * Fields methods\n *\n * */\n private renderFields(\n methodId: string,\n paypalOptions: PayPalCommerceAlternativeMethodsPaymentOptions,\n ): void {\n const paypalAmpsSdk = this.getPaypalAmpsSdkOrThrow();\n const state = this.paymentIntegrationService.getState();\n const { firstName, lastName, email } = state.getBillingAddressOrThrow();\n\n const { apmFieldsContainer, apmFieldsStyles } = paypalOptions;\n\n if (!apmFieldsContainer) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercealternativemethods\" argument should contain \"apmFieldsContainer\".',\n );\n }\n\n const fieldContainerElement = document.querySelector(apmFieldsContainer);\n\n if (fieldContainerElement) {\n fieldContainerElement.innerHTML = '';\n }\n\n const fieldsOptions = {\n fundingSource: methodId,\n style: apmFieldsStyles || {},\n fields: {\n name: {\n value: `${firstName} ${lastName}`,\n },\n email: {\n value: email,\n },\n },\n };\n\n const paypalPaymentFields = paypalAmpsSdk.PaymentFields(fieldsOptions);\n\n paypalPaymentFields.render(apmFieldsContainer);\n }\n\n /**\n *\n * Loading Indicator methods\n *\n * */\n private toggleLoadingIndicator(isLoading: boolean): void {\n if (isLoading && this.loadingIndicatorContainer) {\n this.loadingIndicator.show(this.loadingIndicatorContainer);\n } else {\n this.loadingIndicator.hide();\n }\n }\n\n /**\n *\n * Utils\n *\n * */\n private isNonInstantPaymentMethod(methodId: string): boolean {\n return methodId.toUpperCase() in NonInstantAlternativePaymentMethods;\n }\n\n private getPaypalAmpsSdkOrThrow() {\n if (!this.paypalApms) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.paypalApms;\n }\n}\n","export interface Features {\n [featureName: string]: boolean | undefined;\n}\n\nexport default function isExperimentEnabled(\n features: Features,\n experimentName: string,\n fallbackValue = true,\n): boolean {\n return features[experimentName] ?? fallbackValue;\n}\n","import {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalIntegrationService,\n createPayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { LOADING_INDICATOR_STYLES } from '../paypal-commerce-constants';\n\nimport PayPalCommerceAlternativeMethodsPaymentStrategy from './paypal-commerce-alternative-methods-payment-strategy';\n\nconst createPayPalCommerceAlternativeMethodsPaymentStrategy: PaymentStrategyFactory<\n PayPalCommerceAlternativeMethodsPaymentStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceAlternativeMethodsPaymentStrategy(\n paymentIntegrationService,\n createPayPalIntegrationService(paymentIntegrationService),\n createPayPalSdkScriptLoader(),\n new LoadingIndicator({\n containerStyles: LOADING_INDICATOR_STYLES,\n }),\n );\n\nexport default toResolvableModule(createPayPalCommerceAlternativeMethodsPaymentStrategy, [\n { gateway: 'paypalcommercealternativemethods' },\n]);\n","import { HostedInstrument, NonceInstrument } from './payment';\n\ntype PaymentInstrument = CardInstrument | AccountInstrument | HostedInstrument | NonceInstrument;\n\nexport default PaymentInstrument;\n\nexport interface BaseInstrument {\n bigpayToken: string;\n defaultInstrument: boolean;\n provider: string;\n trustedShippingAddress: boolean;\n method: string;\n type: string;\n}\n\nexport enum UntrustedShippingCardVerificationType {\n CVV = 'cvv',\n PAN = 'pan',\n}\n\nexport interface CardInstrument extends BaseInstrument {\n brand: string;\n expiryMonth: string;\n expiryYear: string;\n iin: string;\n last4: string;\n type: 'card';\n untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType;\n}\n\ninterface BaseAccountInstrument extends BaseInstrument {\n method: string;\n type: 'account' | 'bank';\n}\n\nexport interface PayPalInstrument extends BaseAccountInstrument {\n externalId: string;\n method: 'paypal';\n}\n\nexport interface AchInstrument extends BaseAccountInstrument {\n issuer: string;\n accountNumber: string;\n type: 'bank';\n method: 'ach' | 'ecp';\n}\n\nexport interface BankInstrument extends BaseAccountInstrument {\n accountNumber: string;\n issuer: string;\n iban: string;\n method: string;\n type: 'bank';\n}\n\nexport type AccountInstrument = PayPalInstrument | BankInstrument | AchInstrument;\n\nexport interface VaultAccessToken {\n vaultAccessToken: string;\n vaultAccessExpiry: number;\n}\n\nexport interface SessionContext {\n customerId: number;\n storeId: string;\n currencyCode?: string;\n}\n\nexport interface InstrumentRequestContext extends SessionContext {\n authToken: string;\n}\n","interface CookieOptions {\n expires?: Date;\n path?: string;\n domain?: string;\n secure?: boolean;\n}\n\nexport default class CookieStorage {\n static get(name: string): string | null {\n const cookieKey = `${encodeURIComponent(`${name}`)}=`;\n const cookie = document.cookie;\n\n let value = null;\n\n const firstIndex = cookie.indexOf(cookieKey);\n\n if (firstIndex > -1) {\n let lastIndex = cookie.indexOf(';', firstIndex);\n\n if (lastIndex === -1) {\n lastIndex = cookie.length;\n }\n\n value = decodeURIComponent(cookie.substring(firstIndex + cookieKey.length, lastIndex));\n }\n\n return value;\n }\n\n static set(name: string, value: string, options: CookieOptions = { secure: true }) {\n let cookieText = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n\n const { expires, path, domain, secure } = options;\n\n if (expires) {\n cookieText += `; expires=${expires.toUTCString()}`;\n } else {\n const now = new Date();\n // info: default cookie expiration time after setup\n const minutes = 60;\n\n now.setTime(now.getTime() + minutes * 60 * 1000);\n\n cookieText += `; expires=${now.toUTCString()}`;\n }\n\n if (path) {\n cookieText += `; path=${path}`;\n }\n\n if (domain) {\n cookieText += `; domain=${domain}`;\n }\n\n if (secure) {\n cookieText += '; secure';\n }\n\n document.cookie = cookieText;\n }\n\n static remove(name: string, options?: CookieOptions) {\n CookieStorage.set(name, '', { expires: new Date(0), ...options });\n }\n}\n","// copied from packages/core/src/hosted-form/hosted-field-type.ts\n\nenum HostedFieldType {\n CardCode = 'cardCode',\n CardCodeVerification = 'cardCodeVerification',\n CardExpiry = 'cardExpiry',\n CardName = 'cardName',\n CardNumber = 'cardNumber',\n CardNumberVerification = 'cardNumberVerification',\n CardExpiryVerification = 'cardExpiryVerification',\n}\n\nexport default HostedFieldType;\n","import { isEqual, omit } from 'lodash';\n\nimport {\n Address,\n CardInstrument,\n CustomerAddress,\n PaymentMethodClientUnavailableError,\n UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { CookieStorage } from '@bigcommerce/checkout-sdk/storage';\n\nimport {\n PayPalFastlane,\n PayPalFastlaneAddress,\n PayPalFastlaneAuthenticationResult,\n PayPalFastlaneAuthenticationState,\n PayPalFastlaneLookupCustomerByEmailResult,\n PayPalFastlaneProfileCard,\n PayPalFastlaneProfileName,\n PayPalFastlaneProfilePhone,\n PayPalFastlaneProfileToBcCustomerDataMappingResult,\n PayPalFastlaneSdk,\n PayPalFastlaneStylesOption,\n PayPalHostWindow,\n} from './paypal-types';\n\nexport default class PaypalFastlaneUtils {\n private window: PayPalHostWindow;\n\n constructor() {\n this.window = window;\n }\n\n async initializePayPalFastlane(\n paypalFastlaneSdk: PayPalFastlaneSdk,\n isTestModeEnabled: boolean,\n styles?: PayPalFastlaneStylesOption,\n ): Promise<PayPalFastlane> {\n if (isTestModeEnabled) {\n window.localStorage.setItem('fastlaneEnv', 'sandbox');\n window.localStorage.setItem('axoEnv', 'sandbox'); // TODO: remove if this key does not use on PayPal side\n }\n\n if (!this.window.paypalFastlane) {\n const defaultStyles = {\n root: {\n backgroundColorPrimary: 'transparent',\n },\n };\n\n this.window.paypalFastlane = await paypalFastlaneSdk.Fastlane({\n styles: styles || defaultStyles,\n });\n }\n\n return this.window.paypalFastlane;\n }\n\n getPayPalFastlaneOrThrow(): PayPalFastlane {\n if (!this.window.paypalFastlane) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.window.paypalFastlane;\n }\n\n /**\n *\n * Detects the customer to PayPal Fastlane relation and\n * returns customerContextId to use it for authentication\n *\n */\n async lookupCustomerOrThrow(email: string): Promise<PayPalFastlaneLookupCustomerByEmailResult> {\n const paypalFastlane = this.getPayPalFastlaneOrThrow();\n\n return paypalFastlane.identity.lookupCustomerByEmail(email);\n }\n\n /**\n *\n * Triggers authentication flow (shows OTP popup) if the customer recognised as PayPal Fastlane user\n * and returns PayPal Fastlane Profile data to use it in BC checkout\n *\n */\n async triggerAuthenticationFlowOrThrow(\n customerContextId?: string,\n ): Promise<PayPalFastlaneAuthenticationResult> {\n if (!customerContextId) {\n return {};\n }\n\n const paypalFastlane = this.getPayPalFastlaneOrThrow();\n\n return paypalFastlane.identity.triggerAuthenticationFlow(customerContextId);\n }\n\n /**\n *\n * 'updateStorageSessionId' method is used to:\n * - set session id after user was authenticated (or unrecognised) to trigger authentication after page refresh\n *\n * Flow info:\n * If user unrecognised then the lookup method will be working but the OTP will not be shown\n * If user recognised and not canceled then the lookup method will be working and the OTP will be shown only if needed\n * If user cancels the OPT then OTP will not be triggered after page refresh\n *\n */\n updateStorageSessionId(sessionId: string): void {\n const expires = new Date();\n\n expires.setDate(expires.getDate() + 14); // 2 weeks expiry\n\n const cookiesOption = {\n expires,\n secure: true,\n };\n\n CookieStorage.set('bc-fastlane-sessionId', sessionId, cookiesOption);\n }\n\n removeStorageSessionId(): void {\n CookieStorage.remove('bc-fastlane-sessionId');\n }\n\n getStorageSessionId(): string {\n return CookieStorage.get('bc-fastlane-sessionId') || '';\n }\n\n /**\n *\n * 'mapPayPalFastlaneProfileToBcCustomerData' method is responsible for:\n * - mapping PayPal Fastlane Profile data to BC data shape\n * - returning mapped data to use for updating PaymentProviderCustomer state and\n * update shipping and billing addresses\n *\n */\n mapPayPalFastlaneProfileToBcCustomerData(\n methodId: string,\n authenticationResult: PayPalFastlaneAuthenticationResult,\n ): PayPalFastlaneProfileToBcCustomerDataMappingResult {\n const { authenticationState, profileData } = authenticationResult;\n\n const paypalBillingAddress = profileData?.card?.paymentSource?.card?.billingAddress;\n const paypalShippingAddress = profileData?.shippingAddress;\n const paypalProfileName = profileData?.name;\n const paypalInstrument = profileData?.card;\n\n const shippingAddress = paypalShippingAddress\n ? this.mapPayPalToBcAddress(\n paypalShippingAddress.address,\n paypalShippingAddress.name,\n paypalShippingAddress.phoneNumber,\n )\n : undefined;\n const billingAddress =\n paypalBillingAddress && paypalProfileName\n ? this.mapPayPalToBcAddress(\n paypalBillingAddress,\n paypalProfileName,\n paypalShippingAddress?.phoneNumber,\n )\n : undefined;\n const instruments = paypalInstrument\n ? this.mapPayPalToBcInstrument(methodId, paypalInstrument)\n : [];\n\n const addresses = this.filterAddresses([shippingAddress, billingAddress]);\n\n return {\n authenticationState:\n authenticationState || PayPalFastlaneAuthenticationState.UNRECOGNIZED,\n addresses,\n billingAddress,\n shippingAddress,\n instruments,\n };\n }\n\n mapPayPalToBcInstrument(\n methodId: string,\n instrument: PayPalFastlaneProfileCard,\n ): CardInstrument[] {\n const { id, paymentSource } = instrument;\n const { brand, expiry, lastDigits } = paymentSource.card;\n\n const [expiryYear, expiryMonth] = expiry.split('-');\n\n return [\n {\n bigpayToken: id,\n brand,\n defaultInstrument: false,\n expiryMonth,\n expiryYear,\n iin: '',\n last4: lastDigits,\n method: methodId,\n provider: methodId,\n trustedShippingAddress: false,\n untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n type: 'card',\n },\n ];\n }\n\n mapBcToPayPalAddress(address?: Address): PayPalFastlaneAddress {\n return {\n company: address?.company || '',\n addressLine1: address?.address1 || '',\n addressLine2: address?.address2 || '',\n adminArea1: address?.stateOrProvinceCode || address?.stateOrProvince || '',\n adminArea2: address?.city || '',\n postalCode: address?.postalCode || '',\n countryCode: address?.countryCode || '',\n };\n }\n\n mapPayPalToBcAddress(\n address: PayPalFastlaneAddress,\n profileName: PayPalFastlaneProfileName,\n phone?: PayPalFastlaneProfilePhone,\n customFields?: CustomerAddress['customFields'],\n ): CustomerAddress {\n const [firstName, lastName] = profileName.fullName.split(' ');\n\n const phoneData = {\n nationalNumber: phone?.nationalNumber || '',\n countryCode: phone?.countryCode || '',\n };\n\n return {\n id: Date.now(),\n type: 'paypal-address',\n firstName: profileName.firstName || firstName || '',\n lastName: profileName.lastName || lastName || '',\n company: address.company || '',\n address1: address.addressLine1,\n address2: address.addressLine2 || '',\n city: address.adminArea2,\n stateOrProvince: address.adminArea1,\n stateOrProvinceCode: address.adminArea1,\n country: address.countryCode || '', // TODO: update country with valid naming\n countryCode: address.countryCode || '',\n postalCode: address.postalCode,\n phone: phoneData.countryCode + phoneData.nationalNumber,\n customFields: customFields || [],\n };\n }\n\n /**\n *\n * This method is responsible for filtering PayPal Fastlane addresses if they are the same\n * and returns an array of addresses to use them for shipping and/or billing address selections\n * so the customer will be able to use addresses from PayPal Fastlane in checkout flow\n *\n */\n filterAddresses(addresses: Array<CustomerAddress | undefined>): CustomerAddress[] {\n return addresses.reduce(\n (customerAddresses: CustomerAddress[], currentAddress: CustomerAddress | undefined) => {\n if (!currentAddress) {\n return customerAddresses;\n }\n\n const sameAddressInTheArray = customerAddresses.some((customerAddress) =>\n this.isEqualAddresses(customerAddress, currentAddress),\n );\n\n return sameAddressInTheArray\n ? customerAddresses\n : [...customerAddresses, currentAddress];\n },\n [],\n );\n }\n\n private isEqualAddresses(\n firstAddress: CustomerAddress,\n secondAddress: CustomerAddress,\n ): boolean {\n return isEqual(this.normalizeAddress(firstAddress), this.normalizeAddress(secondAddress));\n }\n\n private normalizeAddress(address: CustomerAddress) {\n return omit(address, ['id', 'phone']);\n }\n}\n","import PaypalFastlaneUtils from './paypal-fastlane-utils';\n\nexport default function createPaypalFastlaneUtils(): PaypalFastlaneUtils {\n return new PaypalFastlaneUtils();\n}\n","import HostedFieldType from './hosted-field-type';\nimport { HostedCardFieldOptionsMap, HostedStoredCardFieldOptionsMap } from './hosted-form-options';\n\nexport default function isCreditCardFormFields(\n fields: HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap,\n): fields is HostedCardFieldOptionsMap {\n return (\n HostedFieldType.CardNumber in fields &&\n HostedFieldType.CardName in fields &&\n HostedFieldType.CardExpiry in fields\n );\n}\n","import HostedFieldType from './hosted-field-type';\nimport { HostedCardFieldOptionsMap, HostedStoredCardFieldOptionsMap } from './hosted-form-options';\n\nexport default function isCreditCardVaultedFormFields(\n fields: HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap,\n): fields is HostedStoredCardFieldOptionsMap {\n return (\n HostedFieldType.CardNumberVerification in fields &&\n HostedFieldType.CardCodeVerification in fields &&\n HostedFieldType.CardExpiryVerification in fields\n );\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when a payment method experiences some kind of\n * failure (i.e.: its client library returns a rejected promise). And there is\n * no other error type that is more specific than this one.\n */\nexport default class PaymentMethodFailedError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Unable to proceed because the client library of a payment method has thrown an unexpected error.',\n );\n\n this.name = 'PaymentMethodFailedError';\n this.type = 'payment_method_client_invalid';\n }\n}\n","import StandardError from './standard-error';\n\nexport enum NotInitializedErrorType {\n CheckoutButtonNotInitialized,\n CustomerNotInitialized,\n PaymentNotInitialized,\n ShippingNotInitialized,\n SpamProtectionNotInitialized,\n}\n\n/**\n * Throw this error if a method requires a certain initialization call to be\n * made first. Some objects can be constructed but they cannot be used until a\n * separate initialization call is made.\n */\nexport default class NotInitializedError extends StandardError {\n constructor(public subtype: NotInitializedErrorType) {\n super(getErrorMessage(subtype));\n\n this.name = 'NotInitializedError';\n this.type = 'not_initialized';\n }\n}\n\nfunction getErrorMessage(type: NotInitializedErrorType): string {\n switch (type) {\n case NotInitializedErrorType.CustomerNotInitialized:\n return 'Unable to proceed because the customer step of checkout has not been initialized.';\n\n case NotInitializedErrorType.PaymentNotInitialized:\n return 'Unable to proceed because the payment step of checkout has not been initialized.';\n\n case NotInitializedErrorType.ShippingNotInitialized:\n return 'Unable to proceed because the shipping step of checkout has not been initialized.';\n\n case NotInitializedErrorType.SpamProtectionNotInitialized:\n return 'Unable to proceed because the checkout spam protection has not been initialized.';\n\n default:\n return 'Unable to proceed because the required component has not been initialized.';\n }\n}\n","import StandardError from './standard-error';\n\nexport interface PaymentInvalidFormErrorDetails {\n [key: string]: Array<{ message: string; type: string }>;\n}\n\nexport default class PaymentInvalidFormError extends StandardError {\n constructor(public details: PaymentInvalidFormErrorDetails, message?: string) {\n super(message || 'Unable to proceed because the payment form contains invalid data.');\n\n this.name = 'PaymentInvalidFormError';\n this.type = 'payment_invalid_form';\n }\n}\n","import { isNil, omitBy } from 'lodash';\n\nimport {\n HostedCardFieldOptions,\n HostedCardFieldOptionsMap,\n HostedFieldBlurEventData,\n HostedFieldEnterEventData,\n HostedFieldFocusEventData,\n HostedFieldStylesMap,\n HostedFieldType,\n HostedFieldValidateEventData,\n HostedFormOptions,\n HostedInputValidateErrorData,\n HostedInputValidateErrorDataMap,\n HostedInstrument,\n HostedStoredCardFieldOptionsMap,\n InvalidArgumentError,\n isCreditCardFormFields,\n isCreditCardVaultedFormFields,\n isHostedInstrumentLike,\n isVaultedInstrument,\n NotInitializedError,\n NotInitializedErrorType,\n OrderFinalizationNotRequiredError,\n OrderPaymentRequestBody,\n OrderRequestBody,\n Payment,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentInvalidFormError,\n PaymentInvalidFormErrorDetails,\n PaymentMethodFailedError,\n PaymentRequestOptions,\n PaymentStrategy,\n VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { isPayPalCommerceAcceleratedCheckoutCustomer } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\nimport {\n PayPalFastlaneUtils,\n PayPalInitializationData,\n PayPalIntegrationService,\n PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport {\n LiabilityShiftEnum,\n PayPalCommerceCardFields,\n PayPalCommerceCardFieldsConfig,\n PayPalCommerceCardFieldsOnApproveData,\n PayPalCommerceCardFieldsState,\n PayPalCommerceFields,\n PayPalCommerceHostedFieldsRenderOptions,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceCreditCardsPaymentInitializeOptions, {\n WithPayPalCommerceCreditCardsPaymentInitializeOptions,\n} from './paypal-commerce-credit-cards-payment-initialize-options';\n\nexport default class PayPalCommerceCreditCardsPaymentStrategy implements PaymentStrategy {\n private executionPaymentData?: OrderPaymentRequestBody['paymentData'];\n private isCreditCardForm?: boolean;\n private isCreditCardVaultedForm?: boolean;\n\n private cardFields?: PayPalCommerceCardFields;\n private cvvField?: PayPalCommerceFields;\n private expiryField?: PayPalCommerceFields;\n private numberField?: PayPalCommerceFields;\n private nameField?: PayPalCommerceFields;\n\n private hostedFormOptions?: HostedFormOptions;\n private returnedOrderId?: string;\n private returnedVaultedToken?: string;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalIntegrationService: PayPalIntegrationService,\n private paypalSdkScriptLoader: PayPalSdkScriptLoader,\n private paypalFastlaneUtils: PayPalFastlaneUtils,\n ) {}\n\n async initialize(\n options: PaymentInitializeOptions & WithPayPalCommerceCreditCardsPaymentInitializeOptions,\n ): Promise<void> {\n const { methodId, paypalcommercecreditcards, paypalcommerce } = options;\n const paypalCommerceInitializationOptions = paypalcommercecreditcards || paypalcommerce;\n\n const { form, onCreditCardFieldsRenderingError, onLoadComplete } =\n paypalCommerceInitializationOptions || {};\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!form) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"options.paypalcommercecreditcards.form\" argument is not provided.',\n );\n }\n\n this.hostedFormOptions = form;\n\n this.isCreditCardForm = isCreditCardFormFields(form.fields);\n this.isCreditCardVaultedForm =\n isCreditCardVaultedFormFields(form.fields) && !this.hasUndefinedValues();\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n await this.paypalIntegrationService.loadPayPalSdk(methodId, undefined, true, true);\n\n if (this.isCreditCardForm || this.isCreditCardVaultedForm) {\n await this.initializeFields(form, onCreditCardFieldsRenderingError);\n }\n\n onLoadComplete?.();\n\n if (this.shouldInitializePayPalFastlane(methodId)) {\n await this.initializePayPalFastlaneOrThrow(methodId);\n }\n }\n\n async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n const { payment, ...order } = payload;\n const { methodId, paymentData } = payment || {};\n\n if (!payment || !methodId) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n this.executionPaymentData = paymentData;\n\n if (this.isCreditCardForm || this.isCreditCardVaultedForm) {\n await this.validateHostedFormOrThrow();\n await this.submitHostedForm();\n } else {\n // This condition is triggered when we pay with vaulted instrument and shipping address is truste\n const { orderId } = await this.paypalIntegrationService.createOrderCardFields(\n 'paypalcommercecreditcardscheckout',\n this.getInstrumentParams(),\n );\n\n this.returnedOrderId = orderId;\n }\n\n const submitPaymentPayload = this.preparePaymentPayload(\n methodId,\n paymentData,\n this.returnedOrderId,\n this.returnedVaultedToken,\n );\n\n await this.paymentIntegrationService.submitOrder(order, options);\n await this.paymentIntegrationService.submitPayment(submitPaymentPayload);\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n async deinitialize(): Promise<void> {\n await this.cvvField?.close();\n await this.expiryField?.close();\n await this.numberField?.close();\n await this.nameField?.close();\n\n return Promise.resolve();\n }\n\n /**\n *\n * Submit Payment Payload preparing method\n *\n * `vaultedToken` is used when we pay with vaulted instrument (with trusted shipping address and untrusted)\n * `setupToken` is used when we pay with vaulted instrument (untrusted shipping address)\n * `orderId` is used in every case (basic card payment, trusted shipping address and untrusted)\n */\n private preparePaymentPayload(\n methodId: string,\n paymentData: OrderPaymentRequestBody['paymentData'],\n orderId?: string,\n nonce?: string,\n ): Payment {\n const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n const instrumentId =\n paymentData && isVaultedInstrument(paymentData) ? paymentData.instrumentId : undefined;\n\n const bigpay_token = omitBy(\n {\n verification_nonce: nonce,\n token: instrumentId,\n },\n isNil,\n );\n\n return {\n methodId,\n paymentData: {\n shouldSaveInstrument,\n shouldSetAsDefaultInstrument,\n instrumentId,\n formattedPayload: {\n ...(nonce || instrumentId ? { bigpay_token } : {}),\n ...(orderId ? { card_with_order: { order_id: orderId } } : {}),\n },\n },\n };\n }\n\n /**\n *\n * Card fields initialize\n *\n */\n private async initializeFields(\n formOptions: HostedFormOptions,\n onCreditCardFieldsRenderingError?: PayPalCommerceCreditCardsPaymentInitializeOptions['onCreditCardFieldsRenderingError'],\n ): Promise<void> {\n const { fields, styles } = formOptions;\n\n const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n const executeCallback = this.getExecuteCallback(fields);\n\n const cardFieldsConfig: PayPalCommerceCardFieldsConfig = {\n style: this.getInputStyles(styles),\n onApprove: ({\n orderID,\n vaultSetupToken,\n liabilityShift,\n }: PayPalCommerceCardFieldsOnApproveData) => {\n if (\n liabilityShift === LiabilityShiftEnum.No ||\n liabilityShift === LiabilityShiftEnum.Unknown\n ) {\n throw new Error();\n }\n\n return this.handleApprove({ orderID, vaultSetupToken });\n },\n onError: () => {\n throw new PaymentMethodFailedError();\n },\n inputEvents: {\n onChange: (event) => this.onChangeHandler(formOptions, event),\n onFocus: (event) => this.onFocusHandler(formOptions, event),\n onBlur: (event) => this.onBlurHandler(formOptions, event),\n onInputSubmitRequest: (event) => this.onInputSubmitRequest(formOptions, event),\n },\n ...executeCallback,\n };\n\n this.cardFields = await paypalSdk.CardFields(cardFieldsConfig);\n\n if (!this.cardFields.isEligible()) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n try {\n this.stylizeInputContainers(fields);\n\n if (isCreditCardFormFields(fields)) {\n await this.renderFields(fields);\n }\n\n if (isCreditCardVaultedFormFields(fields)) {\n await this.renderVaultedFields(fields);\n }\n } catch (error: unknown) {\n if (typeof onCreditCardFieldsRenderingError === 'function') {\n onCreditCardFieldsRenderingError(error);\n }\n }\n }\n\n /**\n *\n * Get execute callback method\n * Depends on shipping address is trusted or not we should pass to PP\n * `createVaultSetupToken` callback if address is untrusted or\n * `createOrder` if address is trusted\n *\n */\n private getExecuteCallback(\n fields: HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap,\n ) {\n const isVaultedForm = isCreditCardVaultedFormFields(fields);\n\n return isVaultedForm ? this.createVaultSetupTokenCallback() : this.createOrderCallback();\n }\n\n private createVaultSetupTokenCallback() {\n return {\n createVaultSetupToken: async () => {\n const { setupToken } =\n (await this.paypalIntegrationService.createOrderCardFields(\n 'paypalcommercecreditcardscheckout',\n {\n ...this.getInstrumentParams(),\n setupToken: true,\n },\n )) || {};\n\n return setupToken;\n },\n };\n }\n\n private createOrderCallback() {\n return {\n createOrder: async () => {\n const { orderId } =\n (await this.paypalIntegrationService.createOrderCardFields(\n 'paypalcommercecreditcardscheckout',\n this.getInstrumentParams(),\n )) || {};\n\n return orderId;\n },\n };\n }\n\n /**\n *\n * onApprove method\n * When submitting a form with a `submitHostedForm` method if there is no error\n * then onApprove callback is triggered and depends on the flow\n * we will receive an `orderID` if it's basic paying and `vaultSetupToken` if we are paying\n * with vaulted instrument and shipping address is untrusted\n *\n */\n private handleApprove({ orderID, vaultSetupToken }: PayPalCommerceCardFieldsOnApproveData) {\n if (orderID) {\n this.returnedOrderId = orderID;\n }\n\n if (vaultSetupToken) {\n this.returnedVaultedToken = vaultSetupToken;\n }\n }\n\n /**\n *\n * Rendering Card Fields methods\n *\n */\n private async renderFields(fieldsOptions: HostedCardFieldOptionsMap) {\n const cardFields = this.getCardFieldsOrThrow();\n\n if (fieldsOptions.cardCode?.containerId) {\n this.cvvField = cardFields.CVVField({\n placeholder: '',\n });\n await this.cvvField.render(`#${fieldsOptions.cardCode.containerId}`);\n }\n\n if (fieldsOptions.cardExpiry?.containerId) {\n this.expiryField = cardFields.ExpiryField();\n await this.expiryField.render(`#${fieldsOptions.cardExpiry.containerId}`);\n }\n\n if (fieldsOptions.cardName?.containerId) {\n this.nameField = cardFields.NameField({\n placeholder: '',\n });\n await this.nameField.render(`#${fieldsOptions.cardName.containerId}`);\n }\n\n if (fieldsOptions.cardNumber?.containerId) {\n this.numberField = cardFields.NumberField({\n placeholder: '',\n });\n await this.numberField.render(`#${fieldsOptions.cardNumber.containerId}`);\n }\n }\n\n private async renderVaultedFields(fieldsOptions: HostedStoredCardFieldOptionsMap) {\n const cardFields = this.getCardFieldsOrThrow();\n\n if (fieldsOptions.cardCodeVerification?.containerId) {\n this.cvvField = cardFields.CVVField({\n placeholder: '',\n });\n await this.cvvField.render(`#${fieldsOptions.cardCodeVerification.containerId}`);\n }\n\n if (fieldsOptions.cardExpiryVerification?.containerId) {\n this.expiryField = cardFields.ExpiryField();\n await this.expiryField.render(`#${fieldsOptions.cardExpiryVerification.containerId}`);\n }\n\n if (fieldsOptions.cardNumberVerification?.containerId) {\n this.numberField = cardFields.NumberField({\n placeholder: '',\n });\n await this.numberField.render(`#${fieldsOptions.cardNumberVerification.containerId}`);\n }\n }\n\n /**\n *\n * Instrument params method\n *\n */\n private getInstrumentParams(): HostedInstrument | VaultedInstrument {\n if (!this.executionPaymentData) {\n return {};\n }\n\n if (isHostedInstrumentLike(this.executionPaymentData)) {\n const { shouldSaveInstrument, shouldSetAsDefaultInstrument } =\n this.executionPaymentData;\n\n return {\n shouldSaveInstrument,\n shouldSetAsDefaultInstrument,\n };\n }\n\n if (isVaultedInstrument(this.executionPaymentData)) {\n const { instrumentId } = this.executionPaymentData;\n\n return {\n instrumentId,\n };\n }\n\n return {};\n }\n\n private getFieldTypeByEmittedField({\n emittedBy,\n }: PayPalCommerceCardFieldsState):\n | HostedFieldBlurEventData\n | HostedFieldEnterEventData\n | HostedFieldFocusEventData {\n return {\n fieldType: this.mapFieldType(emittedBy),\n };\n }\n\n /**\n *\n * Form submit method\n * Triggers a form submit\n * */\n private async submitHostedForm() {\n const cardFields = this.getCardFieldsOrThrow();\n const state = this.paymentIntegrationService.getState();\n const billingAddress = state.getBillingAddressOrThrow();\n\n const submitConfig = {\n billingAddress: {\n company: billingAddress.company,\n addressLine1: billingAddress.address1,\n addressLine2: billingAddress.address2,\n adminArea1: billingAddress.stateOrProvinceCode,\n adminArea2: billingAddress.city,\n postalCode: billingAddress.postalCode,\n countryCode: billingAddress.countryCode,\n },\n };\n\n try {\n if (this.isCreditCardVaultedForm) {\n await cardFields.submit();\n } else {\n await cardFields.submit(submitConfig);\n }\n } catch (_) {\n throw new PaymentMethodFailedError(\n 'Failed authentication. Please try to authorize again.',\n );\n }\n }\n\n /**\n *\n * Validation and errors\n *\n */\n private async validateHostedFormOrThrow() {\n const cardFields = this.getCardFieldsOrThrow();\n const cardFieldsState = await cardFields.getState().then((data) => data);\n const validationData = this.getValidityData(cardFieldsState);\n\n if (validationData.isValid) {\n return;\n }\n\n this.hostedFormOptions?.onValidate?.(validationData);\n\n throw new PaymentInvalidFormError(this.mapValidationErrors(validationData.errors));\n }\n\n private getValidityData({\n fields,\n }: PayPalCommerceCardFieldsState): HostedFieldValidateEventData {\n const updatedFields = { ...fields };\n\n delete updatedFields.cardNameField;\n\n const fieldsKeys = Object.keys(updatedFields) as Array<\n keyof PayPalCommerceCardFieldsState['fields']\n >;\n\n const isValid = fieldsKeys.every((key) => updatedFields[key]?.isValid);\n\n const errors = fieldsKeys.reduce((fieldsErrors, key) => {\n const fieldType = this.mapFieldType(key);\n\n return {\n ...fieldsErrors,\n [fieldType]: updatedFields[key]?.isValid\n ? undefined\n : [this.getInvalidErrorByFieldType(fieldType)],\n };\n }, {});\n\n return { isValid, errors };\n }\n\n private getInvalidErrorByFieldType(fieldType: string): HostedInputValidateErrorData {\n switch (fieldType) {\n case HostedFieldType.CardCode:\n case HostedFieldType.CardCodeVerification:\n return {\n fieldType,\n message: 'Invalid card code',\n type: 'invalid_card_code',\n };\n\n case HostedFieldType.CardNumber:\n case HostedFieldType.CardNumberVerification:\n return {\n fieldType,\n message: 'Invalid card number',\n type: 'invalid_card_number',\n };\n\n case HostedFieldType.CardExpiry:\n case HostedFieldType.CardExpiryVerification:\n return {\n fieldType,\n message: 'Invalid card expiry',\n type: 'invalid_card_expiry',\n };\n\n default:\n return {\n fieldType,\n message: 'Invalid field',\n type: 'invalid',\n };\n }\n }\n\n private mapValidationErrors(\n validationErrors: HostedInputValidateErrorDataMap = {},\n ): PaymentInvalidFormErrorDetails {\n const errors: PaymentInvalidFormErrorDetails = {};\n const validationErrorsKeys = Object.keys(validationErrors) as Array<\n keyof HostedInputValidateErrorDataMap\n >;\n\n validationErrorsKeys.forEach((key) => {\n errors[key] = [\n {\n message: validationErrors[key]?.[0]?.message || '',\n type: key,\n },\n ];\n });\n\n return errors;\n }\n\n /**\n *\n * Fields mappers\n *\n */\n private mapFieldType(type: string): HostedFieldType {\n switch (type) {\n case 'name':\n return HostedFieldType.CardName;\n\n case 'cardNumberField':\n case 'number':\n return this.isCreditCardForm\n ? HostedFieldType.CardNumber\n : HostedFieldType.CardNumberVerification;\n\n case 'cardExpiryField':\n case 'expiry':\n return this.isCreditCardForm\n ? HostedFieldType.CardExpiry\n : HostedFieldType.CardExpiryVerification;\n\n case 'cardCvvField':\n case 'cvv':\n return this.isCreditCardForm\n ? HostedFieldType.CardCode\n : HostedFieldType.CardCodeVerification;\n\n default:\n throw new Error('Unexpected field type');\n }\n }\n\n /**\n *\n * Utils\n *\n */\n private getCardFieldsOrThrow(): PayPalCommerceCardFields {\n if (!this.cardFields) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n return this.cardFields;\n }\n\n private getInputStyles(\n styles?: HostedFieldStylesMap,\n ): PayPalCommerceHostedFieldsRenderOptions['styles'] {\n const commonStyles = {\n 'font-size': styles?.default?.fontSize || '1rem',\n 'font-family':\n styles?.default?.fontFamily || 'Montserrat, Arial, Helvetica, sans-serif',\n 'font-weight': styles?.default?.fontWeight || '400',\n outline: 'none',\n padding: '9px 13px',\n };\n\n const defaultStyles = { ...commonStyles, color: '#333333' };\n const errorStyles = { ...commonStyles, color: 'red' };\n\n return {\n input: defaultStyles,\n '.invalid': errorStyles,\n '.valid': defaultStyles,\n ':focus': defaultStyles,\n };\n }\n\n private stylizeInputContainers(\n fields: HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap,\n ): void {\n Object.values(fields || {}).forEach((id: HostedCardFieldOptions) => {\n const element = document.getElementById(`${id?.containerId || ''}`);\n\n if (element) {\n element.style.padding = '0px';\n element.style.boxShadow = 'none';\n element.style.border = 'none';\n element.style.background = 'transparent';\n element.style.marginBottom = '10px';\n element.style.marginLeft = '-5px';\n }\n });\n }\n\n private hasUndefinedValues() {\n if (this.hostedFormOptions) {\n return Object.values(this.hostedFormOptions.fields).some(\n (value) => value === undefined,\n );\n }\n\n return true;\n }\n\n /**\n *\n * Input events methods\n *\n */\n private onChangeHandler(\n formOptions: HostedFormOptions,\n event: PayPalCommerceCardFieldsState,\n ): void {\n formOptions?.onValidate?.(this.getValidityData(event));\n }\n\n private onFocusHandler(\n formOptions: HostedFormOptions,\n event: PayPalCommerceCardFieldsState,\n ): void {\n formOptions?.onFocus?.(this.getFieldTypeByEmittedField(event));\n }\n\n private onBlurHandler(\n formOptions: HostedFormOptions,\n event: PayPalCommerceCardFieldsState,\n ): void {\n formOptions?.onBlur?.(this.getFieldTypeByEmittedField(event));\n }\n\n private onInputSubmitRequest(\n formOptions: HostedFormOptions,\n event: PayPalCommerceCardFieldsState,\n ): void {\n formOptions?.onEnter?.(this.getFieldTypeByEmittedField(event));\n }\n\n /**\n *\n * PayPal Commerce Accelerated checkout related methods\n *\n */\n // TODO: remove this part when PPCP AXO A/B testing will be finished\n private shouldInitializePayPalFastlane(methodId: string) {\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const paymentProviderCustomer = state.getPaymentProviderCustomer();\n const paypalCommercePaymentProviderCustomer = isPayPalCommerceAcceleratedCheckoutCustomer(\n paymentProviderCustomer,\n )\n ? paymentProviderCustomer\n : {};\n\n return (\n paymentMethod?.initializationData?.isAcceleratedCheckoutEnabled &&\n paymentMethod?.initializationData?.isPayPalCommerceAnalyticsV2Enabled &&\n !paypalCommercePaymentProviderCustomer?.authenticationState\n );\n }\n\n // TODO: remove this part when PPCP AXO A/B testing will be finished\n private async initializePayPalFastlaneOrThrow(methodId: string): Promise<void> {\n try {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const { initializationData } = paymentMethod;\n\n if (!initializationData?.connectClientToken) {\n return;\n }\n\n const payPalFastlaneSdk = await this.paypalSdkScriptLoader.getPayPalFastlaneSdk(\n paymentMethod,\n cart.currency.code,\n cart.id,\n state.getLocale(),\n );\n\n await this.paypalFastlaneUtils.initializePayPalFastlane(\n payPalFastlaneSdk,\n !!initializationData?.isDeveloperModeApplicable,\n );\n } catch (_: unknown) {\n // We should avoid throwing any error from this flow to do no brake default flow\n // This flow is optional\n }\n }\n}\n","import {\n PaymentProviderCustomer,\n PayPalConnectCustomer,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function isPayPalCommerceAcceleratedCheckoutCustomer(\n customer?: PaymentProviderCustomer,\n): customer is PayPalConnectCustomer {\n if (!customer) {\n return false;\n }\n\n return (\n 'authenticationState' in customer || 'addresses' in customer || 'instruments' in customer\n );\n}\n","import {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalFastlaneUtils,\n createPayPalIntegrationService,\n createPayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCreditCardsPaymentStrategy from './paypal-commerce-credit-cards-payment-strategy';\n\nconst createPaypalCommerceCreditCardsPaymentStrategy: PaymentStrategyFactory<\n PayPalCommerceCreditCardsPaymentStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceCreditCardsPaymentStrategy(\n paymentIntegrationService,\n createPayPalIntegrationService(paymentIntegrationService),\n createPayPalSdkScriptLoader(),\n createPayPalFastlaneUtils(),\n );\n\nexport default toResolvableModule(createPaypalCommerceCreditCardsPaymentStrategy, [\n { id: 'paypalcommercecreditcards' },\n]);\n","import { noop } from 'lodash';\n\nimport {\n InvalidArgumentError,\n OrderFinalizationNotRequiredError,\n OrderRequestBody,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentRequestOptions,\n PaymentStrategy,\n TimeoutError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n BirthDate,\n PayPalInitializationData,\n PayPalIntegrationService,\n PayPalOrderStatus,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport {\n PaypalCommerceRatePay,\n WithPayPalCommerceRatePayPaymentInitializeOptions,\n} from './paypal-commerce-ratepay-initialize-options';\n\nconst POLLING_INTERVAL = 3000;\nconst MAX_POLLING_TIME = 300000;\n\nexport default class PaypalCommerceRatepayPaymentStrategy implements PaymentStrategy {\n private guid?: string;\n private paypalcommerceratepay?: PaypalCommerceRatePay;\n private loadingIndicatorContainer?: string;\n private pollingTimer = 0;\n private stopPolling = noop;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceService: PayPalIntegrationService,\n private loadingIndicator: LoadingIndicator,\n private pollingInterval: number = POLLING_INTERVAL,\n private maxPollingIntervalTime: number = MAX_POLLING_TIME,\n ) {}\n\n async initialize(\n options: PaymentInitializeOptions & WithPayPalCommerceRatePayPaymentInitializeOptions,\n ): Promise<void> {\n const { gatewayId, methodId, paypalcommerceratepay } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!gatewayId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.gatewayId\" argument is not provided.',\n );\n }\n\n if (!paypalcommerceratepay) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerceratepay\" argument is not provided.`,\n );\n }\n\n const { legalTextContainer, container, loadingContainerId } = paypalcommerceratepay;\n\n if (!container) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.container\" argument is not provided.`,\n );\n }\n\n if (!legalTextContainer) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.legalTextContainer\" argument is not provided.`,\n );\n }\n\n if (!loadingContainerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.loadingContainerId\" argument is not provided.`,\n );\n }\n\n this.loadingIndicatorContainer = loadingContainerId;\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(\n methodId,\n gatewayId,\n );\n const { merchantId } = paymentMethod.initializationData || {};\n\n if (!merchantId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because merchantId argument is not provided.`,\n );\n }\n\n this.paypalcommerceratepay = paypalcommerceratepay;\n\n await this.paypalCommerceService.loadPayPalSdk(methodId);\n\n this.createFraudNetScript(merchantId, methodId, gatewayId);\n\n this.loadFraudnetConfig();\n\n this.renderLegalText(legalTextContainer, container);\n }\n\n async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n const { payment, ...order } = payload;\n\n const { getFieldsValues } = this.paypalcommerceratepay || {};\n\n if (!payment) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n if (!getFieldsValues || typeof getFieldsValues !== 'function') {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.getFieldsValues\" argument is not provided.`,\n );\n }\n\n this.toggleLoadingIndicator(true);\n\n try {\n const orderId = await this.paypalCommerceService.createOrder(\n 'paypalcommercealternativemethodscheckout',\n { metadataId: this.guid },\n );\n\n const { ratepayBirthDate, ratepayPhoneNumber, ratepayPhoneCountryCode } =\n getFieldsValues();\n\n const paymentData = {\n formattedPayload: {\n vault_payment_instrument: null,\n set_as_default_stored_instrument: null,\n device_info: null,\n method_id: payment.methodId,\n rate_pay: {\n birth_date: this.normalizeDate(ratepayBirthDate),\n phone: {\n national_number: ratepayPhoneNumber,\n country_code: ratepayPhoneCountryCode.split('+')[1],\n },\n },\n paypal_account: {\n order_id: orderId,\n },\n },\n };\n\n await this.paymentIntegrationService.submitOrder(order, options);\n await this.paymentIntegrationService.submitPayment({\n methodId: payment.methodId,\n paymentData,\n });\n\n return await new Promise((resolve, reject) => {\n this.initializePollingMechanism(\n payment.methodId,\n resolve,\n reject,\n payment.gatewayId,\n );\n });\n } catch (error: unknown) {\n this.handleError(error);\n\n return new Promise((_resolve, reject) => reject());\n }\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n deinitialize(): Promise<void> {\n const { legalTextContainer } = this.paypalcommerceratepay || {};\n const fraudNetScript = document.querySelectorAll('[data-id=\"fraudnetScript\"]')[0];\n const fraudNetConfig = document.querySelectorAll('[data-id=\"fraudnetConfig\"]')[0];\n\n this.deinitializePollingMechanism();\n\n fraudNetScript.remove();\n fraudNetConfig.remove();\n\n if (legalTextContainer) {\n const legalTextContainerElement = document.getElementById(legalTextContainer);\n\n legalTextContainerElement?.remove();\n }\n\n return Promise.resolve();\n }\n\n private normalizeDate(date: BirthDate) {\n const formattedDate = this.formatDate(date.getDate());\n const formattedMonth = this.formatDate(date.getMonth() + 1);\n\n return `${date.getFullYear()}-${formattedMonth}-${formattedDate}`;\n }\n\n private formatDate(date: number): string {\n return `${date < 10 ? 0 : ''}${date}`;\n }\n\n private renderLegalText(legalTextContainerElementId: string, container: string) {\n const legalTextContainerId = legalTextContainerElementId;\n const buttonContainerId = container.split('#')[1];\n const buttonContainer = document.getElementById(buttonContainerId);\n const buttonContainerParent = buttonContainer?.parentNode;\n const legalTextContainer = document.createElement('div');\n\n legalTextContainer.style.marginBottom = '20px';\n legalTextContainer.setAttribute('id', legalTextContainerId);\n buttonContainerParent?.prepend(legalTextContainer);\n\n const paypalSdk = this.paypalCommerceService.getPayPalSdkOrThrow();\n const ratePayButton = paypalSdk.Legal({\n fundingSource: paypalSdk.Legal.FUNDING.PAY_UPON_INVOICE,\n });\n const legalTextContainerElement = document.getElementById(legalTextContainerId);\n\n if (legalTextContainerElement) {\n ratePayButton.render(`#${legalTextContainerId}`);\n } else {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"legalTextContainerElement\" argument is not found.`,\n );\n }\n }\n\n private handleError(error: unknown): void {\n const { onError } = this.paypalcommerceratepay || {};\n\n this.resetPollingMechanism();\n this.toggleLoadingIndicator(false);\n\n if (onError && typeof onError === 'function') {\n onError(error);\n }\n }\n\n private createFraudNetScript(merchantId: string, methodId: string, gatewayId: string) {\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow(methodId, gatewayId);\n const { testMode } = paymentMethod.config;\n const scriptElement = document.createElement('script');\n\n scriptElement.setAttribute('type', 'application/json');\n scriptElement.setAttribute('fncls', 'fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99');\n scriptElement.setAttribute('data-id', 'fraudnetScript');\n this.guid = this.generateGUID();\n\n const fraudNetConfig = {\n f: this.guid,\n s: `${merchantId}_checkout-page`,\n sandbox: testMode,\n };\n\n scriptElement.innerHTML = JSON.stringify(fraudNetConfig);\n document.body.appendChild(scriptElement);\n }\n\n private generateGUID() {\n let guid = '';\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\n for (let i = 0; i < 32; i += 1) {\n const randomIndex = Math.floor(Math.random() * characters.length);\n\n guid += characters[randomIndex];\n }\n\n return guid;\n }\n\n private loadFraudnetConfig() {\n const script = document.createElement('script');\n\n script.setAttribute('data-id', 'fraudnetConfig');\n script.src = 'https://c.paypal.com/da/r/fb.js';\n document.body.appendChild(script);\n }\n\n private async reinitializeStrategy(\n options: PaymentInitializeOptions & WithPayPalCommerceRatePayPaymentInitializeOptions,\n ): Promise<void> {\n await this.deinitialize();\n await this.initialize(options);\n }\n\n /**\n *\n * Polling mechanism\n *\n *\n * */\n private async initializePollingMechanism(\n methodId: string,\n resolvePromise: () => void,\n rejectPromise: () => void,\n gatewayId?: string,\n ): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(resolve, this.pollingInterval);\n\n this.stopPolling = () => {\n clearTimeout(timeout);\n this.toggleLoadingIndicator(false);\n\n return reject();\n };\n });\n\n try {\n this.pollingTimer += this.pollingInterval;\n\n const orderStatus = await this.paypalCommerceService.getOrderStatus(\n 'paypalcommercealternativemethods',\n {\n params: {\n useMetadata: true,\n },\n },\n );\n\n const isOrderApproved = orderStatus === PayPalOrderStatus.PollingStop;\n const isPollingError = orderStatus === PayPalOrderStatus.PollingError;\n\n if (isOrderApproved) {\n this.deinitializePollingMechanism();\n\n return resolvePromise();\n }\n\n if (isPollingError) {\n return rejectPromise();\n }\n\n if (!isOrderApproved && this.pollingTimer < this.maxPollingIntervalTime) {\n return await this.initializePollingMechanism(\n methodId,\n resolvePromise,\n rejectPromise,\n gatewayId,\n );\n }\n\n await this.reinitializeStrategy({\n methodId,\n gatewayId,\n paypalcommerceratepay: this.paypalcommerceratepay,\n });\n\n this.handleError(new TimeoutError());\n } catch (error) {\n this.handleError(error);\n rejectPromise();\n }\n }\n\n private deinitializePollingMechanism(): void {\n this.stopPolling();\n this.pollingTimer = 0;\n }\n\n private resetPollingMechanism(): void {\n this.deinitializePollingMechanism();\n }\n\n /**\n *\n * Loading Indicator methods\n *\n * */\n private toggleLoadingIndicator(isLoading: boolean): void {\n if (isLoading && this.loadingIndicatorContainer) {\n this.loadingIndicator.show(this.loadingIndicatorContainer);\n } else {\n this.loadingIndicator.hide();\n }\n }\n}\n","import {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalIntegrationService,\n LOADING_INDICATOR_STYLES,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PaypalCommerceRatepayPaymentStrategy from './paypal-commerce-ratepay-payment-strategy';\n\nconst createPaypalCommerceRatepayPaymentStrategy: PaymentStrategyFactory<\n PaypalCommerceRatepayPaymentStrategy\n> = (paymentIntegrationService) =>\n new PaypalCommerceRatepayPaymentStrategy(\n paymentIntegrationService,\n createPayPalIntegrationService(paymentIntegrationService),\n new LoadingIndicator({\n containerStyles: { ...LOADING_INDICATOR_STYLES, position: 'fixed' },\n }),\n );\n\nexport default toResolvableModule(createPaypalCommerceRatepayPaymentStrategy, [\n { gateway: 'paypalcommercealternativemethods', id: 'ratepay' },\n]);\n","import { RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n ContentType,\n INTERNAL_USE_ONLY,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n PayPalCreateOrderRequestBody,\n PayPalOrderData,\n PayPalOrderStatusData,\n PayPalUpdateOrderRequestBody,\n PayPalUpdateOrderResponse,\n} from './paypal-commerce-types';\n\nexport default class PayPalCommerceRequestSender {\n constructor(private requestSender: RequestSender) {}\n\n async createOrder(\n providerId: string,\n requestBody: Partial<PayPalCreateOrderRequestBody>,\n ): Promise<PayPalOrderData> {\n const url = `/api/storefront/payment/${providerId}`;\n const body = requestBody;\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.post<PayPalOrderData>(url, { headers, body });\n\n return res.body;\n }\n\n async updateOrder(\n requestBody: PayPalUpdateOrderRequestBody,\n ): Promise<PayPalUpdateOrderResponse> {\n const url = `/api/storefront/initialization/paypalcommerce`;\n const body = requestBody;\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.put<PayPalUpdateOrderResponse>(url, { headers, body });\n\n return res.body;\n }\n\n async getOrderStatus(\n methodId = 'paypalcommerce',\n options?: RequestOptions,\n ): Promise<PayPalOrderStatusData> {\n const url = `/api/storefront/initialization/${methodId}`;\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.get<PayPalOrderStatusData>(url, {\n headers,\n ...options,\n });\n\n return res.body;\n }\n}\n","import { omitBy } from 'lodash';\n\nimport { FastlaneStylesSettings, PayPalFastlaneStylesOption } from '../index';\n\nfunction isInvalidStyleOption(styleOption: unknown) {\n return typeof styleOption !== 'string';\n}\n\nexport default function getFastlaneStyles(\n styleSettings?: FastlaneStylesSettings,\n uiStyles?: PayPalFastlaneStylesOption,\n) {\n if (!uiStyles && !styleSettings) {\n return undefined;\n }\n\n return cleanUpFastlaneStyles(mergeFastlaneStyles(styleSettings, uiStyles));\n}\n\nfunction mergeFastlaneStyles(\n styleSettings?: FastlaneStylesSettings,\n uiStyles?: PayPalFastlaneStylesOption,\n): PayPalFastlaneStylesOption {\n return {\n root: {\n backgroundColorPrimary:\n styleSettings?.fastlaneRootSettingsBackgroundColor ||\n uiStyles?.root?.backgroundColorPrimary,\n errorColor: styleSettings?.fastlaneRootSettingsErrorColor || uiStyles?.root?.errorColor,\n fontFamily: styleSettings?.fastlaneRootSettingsFontFamily || uiStyles?.root?.fontFamily,\n fontSizeBase:\n styleSettings?.fastlaneRootSettingsFontSize || uiStyles?.root?.fontSizeBase,\n padding: styleSettings?.fastlaneRootSettingsPadding || uiStyles?.root?.padding,\n primaryColor:\n styleSettings?.fastlaneRootSettingsPrimaryColor || uiStyles?.root?.primaryColor,\n },\n input: {\n borderRadius:\n styleSettings?.fastlaneInputSettingsBorderRadius || uiStyles?.input?.borderRadius,\n borderColor:\n styleSettings?.fastlaneInputSettingsBorderColor || uiStyles?.input?.borderColor,\n focusBorderColor:\n styleSettings?.fastlaneInputSettingsFocusBorderBase ||\n uiStyles?.input?.focusBorderColor,\n backgroundColor:\n styleSettings?.fastlaneInputSettingsBackgroundColor ||\n uiStyles?.input?.backgroundColor,\n borderWidth:\n styleSettings?.fastlaneInputSettingsBorderWidth || uiStyles?.input?.borderWidth,\n textColorBase:\n styleSettings?.fastlaneInputSettingsTextColorBase || uiStyles?.input?.textColorBase,\n },\n toggle: {\n colorPrimary:\n styleSettings?.fastlaneToggleSettingsColorPrimary || uiStyles?.toggle?.colorPrimary,\n colorSecondary:\n styleSettings?.fastlaneToggleSettingsColorSecondary ||\n uiStyles?.toggle?.colorSecondary,\n },\n text: {\n body: {\n color: styleSettings?.fastlaneTextBodySettingsColor || uiStyles?.text?.body?.color,\n fontSize:\n styleSettings?.fastlaneTextBodySettingsFontSize ||\n uiStyles?.text?.body?.fontSize,\n },\n caption: {\n color:\n styleSettings?.fastlaneTextCaptionSettingsColor ||\n uiStyles?.text?.caption?.color,\n fontSize:\n styleSettings?.fastlaneTextCaptionSettingsFontSize ||\n uiStyles?.text?.caption?.fontSize,\n },\n },\n branding: styleSettings?.fastlaneBrandingSettings || uiStyles?.branding,\n };\n}\n\nfunction cleanUpFastlaneStyles(styles: PayPalFastlaneStylesOption) {\n const fastlaneStyles: PayPalFastlaneStylesOption = {};\n\n const root = omitBy(styles.root, isInvalidStyleOption);\n const input = omitBy(styles.input, isInvalidStyleOption);\n const toggle = omitBy(styles.toggle, isInvalidStyleOption);\n const textBody = omitBy(styles.text?.body, isInvalidStyleOption);\n const textCaption = omitBy(styles.text?.caption, isInvalidStyleOption);\n const branding = styles.branding;\n\n if (Object.keys(root).length) {\n fastlaneStyles.root = root;\n }\n\n if (Object.keys(input).length) {\n fastlaneStyles.input = input;\n }\n\n if (Object.keys(toggle).length) {\n fastlaneStyles.toggle = toggle;\n }\n\n if (Object.keys(textBody).length) {\n fastlaneStyles.text = {};\n fastlaneStyles.text.body = textBody;\n }\n\n if (Object.keys(textCaption).length) {\n fastlaneStyles.text = {\n ...fastlaneStyles.text,\n };\n fastlaneStyles.text.caption = textCaption;\n }\n\n if (branding) {\n fastlaneStyles.branding = branding;\n }\n\n return fastlaneStyles;\n}\n","import {\n PaymentProviderCustomer,\n PayPalConnectCustomer,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n// TODO: update PayPalConnectCustomer with PayPalFastlaneCustomer\nexport default function isPayPalFastlaneCustomer(\n customer?: PaymentProviderCustomer,\n): customer is PayPalConnectCustomer {\n if (!customer) {\n return false;\n }\n\n return (\n 'authenticationState' in customer || 'addresses' in customer || 'instruments' in customer\n );\n}\n","import {\n CardInstrument,\n InvalidArgumentError,\n isHostedInstrumentLike,\n isVaultedInstrument,\n OrderFinalizationNotRequiredError,\n OrderPaymentRequestBody,\n OrderRequestBody,\n Payment,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethodClientUnavailableError,\n PaymentMethodInvalidError,\n PaymentRequestOptions,\n PaymentStrategy,\n VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n getFastlaneStyles,\n isPayPalFastlaneCustomer,\n isPaypalFastlaneRequestError,\n PayPalFastlaneAuthenticationState,\n PayPalFastlaneCardComponentMethods,\n PayPalFastlaneCardComponentOptions,\n PayPalFastlanePaymentFormattedPayload,\n PayPalFastlaneSdk,\n PayPalFastlaneUtils,\n PayPalInitializationData,\n PayPalSdkScriptLoader,\n TDSecureAuthenticationState,\n TDSecureVerificationMethod,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceRequestSender from '../paypal-commerce-request-sender';\nimport { LiabilityShiftEnum } from '../paypal-commerce-types';\n\nimport PayPalCommerceFastlanePaymentInitializeOptions, {\n WithPayPalCommerceFastlanePaymentInitializeOptions,\n} from './paypal-commerce-fastlane-payment-initialize-options';\n\nexport default class PaypalCommerceFastlanePaymentStrategy implements PaymentStrategy {\n private paypalComponentMethods?: PayPalFastlaneCardComponentMethods;\n private paypalFastlaneSdk?: PayPalFastlaneSdk;\n private threeDSVerificationMethod?: string;\n private paypalcommercefastlane?: PayPalCommerceFastlanePaymentInitializeOptions;\n private orderId?: string;\n private methodId?: string;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceRequestSender: PayPalCommerceRequestSender,\n private paypalSdkScriptLoader: PayPalSdkScriptLoader,\n private paypalFastlaneUtils: PayPalFastlaneUtils,\n ) {}\n\n /**\n *\n * Default methods\n *\n * */\n async initialize(\n options: PaymentInitializeOptions & WithPayPalCommerceFastlanePaymentInitializeOptions,\n ): Promise<void> {\n const { methodId, paypalcommercefastlane } = options;\n\n this.methodId = methodId;\n\n this.paypalcommercefastlane = paypalcommercefastlane;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!paypalcommercefastlane) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercefastlane\" argument is not provided.',\n );\n }\n\n if (!paypalcommercefastlane.onInit || typeof paypalcommercefastlane.onInit !== 'function') {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercefastlane.onInit\" argument is not provided or it is not a function.',\n );\n }\n\n if (\n !paypalcommercefastlane.onChange ||\n typeof paypalcommercefastlane.onChange !== 'function'\n ) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercefastlane.onChange\" argument is not provided or it is not a function.',\n );\n }\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const { isDeveloperModeApplicable, isFastlaneStylingEnabled } =\n paymentMethod.initializationData || {};\n\n this.threeDSVerificationMethod =\n paymentMethod.initializationData?.threeDSVerificationMethod;\n\n this.paypalFastlaneSdk = await this.paypalSdkScriptLoader.getPayPalFastlaneSdk(\n paymentMethod,\n cart.currency.code,\n cart.id,\n state.getLocale(),\n );\n\n const paypalFastlaneStyling = isFastlaneStylingEnabled\n ? paymentMethod?.initializationData?.fastlaneStyles\n : {};\n\n const fastlaneStyles = getFastlaneStyles(\n paypalFastlaneStyling,\n paypalcommercefastlane?.styles,\n );\n\n await this.paypalFastlaneUtils.initializePayPalFastlane(\n this.paypalFastlaneSdk,\n !!isDeveloperModeApplicable,\n fastlaneStyles,\n );\n\n if (this.shouldRunAuthenticationFlow()) {\n await this.runPayPalAuthenticationFlowOrThrow(methodId);\n }\n\n await this.initializePayPalPaymentComponent();\n\n paypalcommercefastlane.onInit((container: string) =>\n this.renderPayPalPaymentComponent(container),\n );\n paypalcommercefastlane.onChange(() => this.handlePayPalStoredInstrumentChange(methodId));\n }\n\n async execute(orderRequest: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n const { payment, ...order } = orderRequest;\n\n if (!payment) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n const { paymentData, methodId } = payment;\n\n const isVaultedFlow = paymentData && isVaultedInstrument(paymentData);\n\n try {\n await this.paymentIntegrationService.submitOrder(order, options);\n\n const paymentPayload = isVaultedFlow\n ? await this.prepareVaultedInstrumentPaymentPayload(methodId, paymentData)\n : await this.preparePaymentPayload(methodId, paymentData);\n\n await this.paymentIntegrationService.submitPayment<PayPalFastlanePaymentFormattedPayload>(\n paymentPayload,\n );\n\n this.paypalFastlaneUtils.removeStorageSessionId();\n } catch (error) {\n if (\n isPaypalFastlaneRequestError(error) &&\n error.response.body.name === 'INVALID_REQUEST'\n ) {\n const invalidRequestError = {\n translationKey: 'payment.errors.invalid_request_error',\n };\n\n this.handleError(invalidRequestError);\n\n return Promise.reject();\n }\n\n if (error instanceof Error && error.name !== 'FastlaneError') {\n throw error;\n }\n\n return Promise.reject();\n }\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n async deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n *\n * Authentication flow methods\n *\n */\n private shouldRunAuthenticationFlow(): boolean {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const customer = state.getCustomerOrThrow();\n const paymentProviderCustomer = state.getPaymentProviderCustomer();\n const paypalFastlaneCustomer = isPayPalFastlaneCustomer(paymentProviderCustomer)\n ? paymentProviderCustomer\n : {};\n\n const paypalFastlaneSessionId = this.paypalFastlaneUtils.getStorageSessionId();\n\n if (\n !customer.isGuest ||\n paypalFastlaneCustomer?.authenticationState ===\n PayPalFastlaneAuthenticationState.CANCELED\n ) {\n return false;\n }\n\n return !paypalFastlaneCustomer?.authenticationState && paypalFastlaneSessionId === cart.id;\n }\n\n private async runPayPalAuthenticationFlowOrThrow(methodId: string): Promise<void> {\n try {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const customer = state.getCustomer();\n const billingAddress = state.getBillingAddress();\n const customerEmail = customer?.email || billingAddress?.email || '';\n\n const { customerContextId } = await this.paypalFastlaneUtils.lookupCustomerOrThrow(\n customerEmail,\n );\n\n const authenticationResult =\n await this.paypalFastlaneUtils.triggerAuthenticationFlowOrThrow(customerContextId);\n\n const { authenticationState, addresses, instruments } =\n this.paypalFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(\n methodId,\n authenticationResult,\n );\n\n await this.paymentIntegrationService.updatePaymentProviderCustomer({\n authenticationState,\n addresses,\n instruments,\n });\n\n const isAuthenticationFlowCanceled =\n authenticationResult.authenticationState ===\n PayPalFastlaneAuthenticationState.CANCELED;\n\n if (isAuthenticationFlowCanceled) {\n this.paypalFastlaneUtils.removeStorageSessionId();\n } else {\n this.paypalFastlaneUtils.updateStorageSessionId(cart.id);\n }\n } catch (error) {\n // Info: Do not throw anything here to avoid blocking customer from passing checkout flow\n }\n }\n\n /**\n *\n * PayPal Fastlane Card Component rendering method\n *\n */\n private async initializePayPalPaymentComponent(): Promise<void> {\n const state = this.paymentIntegrationService.getState();\n const billingAddress = state.getBillingAddressOrThrow();\n const phone = billingAddress.phone;\n const fullName = `${billingAddress.firstName} ${billingAddress.lastName}`.trim();\n\n const paypalFastlane = this.paypalFastlaneUtils.getPayPalFastlaneOrThrow();\n\n const cardComponentOptions: PayPalFastlaneCardComponentOptions = {\n fields: {\n cardholderName: {\n prefill: fullName,\n enabled: true,\n },\n ...(phone && {\n phoneNumber: {\n prefill: phone,\n },\n }),\n },\n };\n\n this.paypalComponentMethods = await paypalFastlane.FastlaneCardComponent(\n cardComponentOptions,\n );\n }\n\n private renderPayPalPaymentComponent(container?: string): void {\n const paypalComponentMethods = this.getPayPalComponentMethodsOrThrow();\n\n if (!container) {\n throw new InvalidArgumentError(\n 'Unable to render card component because \"container\" argument is not provided.',\n );\n }\n\n paypalComponentMethods.render(container);\n }\n\n private getPayPalComponentMethodsOrThrow(): PayPalFastlaneCardComponentMethods {\n if (!this.paypalComponentMethods) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.paypalComponentMethods;\n }\n\n /**\n *\n * Payment Payload preparation methods\n *\n */\n private async prepareVaultedInstrumentPaymentPayload(\n methodId: string,\n paymentData: VaultedInstrument,\n ): Promise<Payment<PayPalFastlanePaymentFormattedPayload>> {\n const { instrumentId } = paymentData;\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const is3DSEnabled = paymentMethod.config.is3dsEnabled;\n\n const nonce = is3DSEnabled ? await this.get3DSNonce(instrumentId) : instrumentId;\n\n await this.createOrder(nonce);\n\n return {\n methodId,\n paymentData: {\n formattedPayload: {\n paypal_fastlane_token: {\n order_id: this.orderId,\n token: nonce,\n },\n },\n },\n };\n }\n\n private async preparePaymentPayload(\n methodId: string,\n paymentData: OrderPaymentRequestBody['paymentData'],\n ): Promise<Payment<PayPalFastlanePaymentFormattedPayload>> {\n const state = this.paymentIntegrationService.getState();\n const billingAddress = state.getBillingAddressOrThrow();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n const fullName = `${billingAddress.firstName} ${billingAddress.lastName}`.trim();\n\n const { getPaymentToken } = this.getPayPalComponentMethodsOrThrow();\n\n const { id } = await getPaymentToken({\n name: { fullName },\n billingAddress: this.paypalFastlaneUtils.mapBcToPayPalAddress(billingAddress),\n });\n\n const is3DSEnabled = paymentMethod.config.is3dsEnabled;\n\n const nonce = is3DSEnabled ? await this.get3DSNonce(id) : id;\n\n await this.createOrder(nonce);\n\n const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n return {\n methodId,\n paymentData: {\n ...paymentData,\n shouldSaveInstrument,\n shouldSetAsDefaultInstrument,\n formattedPayload: {\n paypal_fastlane_token: {\n order_id: this.orderId,\n token: nonce,\n },\n },\n },\n };\n }\n\n private async createOrder(id: string): Promise<void> {\n const state = this.paymentIntegrationService.getState();\n const cartId = state.getCartOrThrow().id;\n\n if (this.methodId) {\n const { orderId } = await this.paypalCommerceRequestSender.createOrder(this.methodId, {\n cartId,\n fastlaneToken: id,\n });\n\n this.orderId = orderId;\n }\n }\n\n /**\n *\n * 3DSecure methods\n *\n * */\n private async get3DSNonce(nonce: string): Promise<string> {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const order = state.getOrderOrThrow();\n const checkoutUrl = state.getStoreConfigOrThrow().links.checkoutLink;\n\n const threeDomainSecureComponent = this.paypalFastlaneSdk?.ThreeDomainSecureClient;\n\n if (!threeDomainSecureComponent) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n const threeDomainSecureParameters = {\n amount: order.orderAmount.toFixed(2),\n currency: cart.currency.code,\n nonce,\n threeDSRequested: this.threeDSVerificationMethod === TDSecureVerificationMethod.Always,\n transactionContext: {\n experience_context: {\n locale: 'en-US',\n return_url: checkoutUrl,\n cancel_url: checkoutUrl,\n },\n },\n };\n\n const isThreeDomainSecureEligible = await threeDomainSecureComponent.isEligible(\n threeDomainSecureParameters,\n );\n\n if (\n this.threeDSVerificationMethod === TDSecureVerificationMethod.Always &&\n !isThreeDomainSecureEligible\n ) {\n throw new PaymentMethodInvalidError();\n }\n\n if (isThreeDomainSecureEligible) {\n const {\n liabilityShift,\n authenticationState,\n nonce: threeDSNonce,\n } = await threeDomainSecureComponent.show();\n\n if (\n liabilityShift === LiabilityShiftEnum.No ||\n liabilityShift === LiabilityShiftEnum.Unknown ||\n authenticationState === TDSecureAuthenticationState.Errored ||\n authenticationState === TDSecureAuthenticationState.Cancelled\n ) {\n throw new PaymentMethodInvalidError();\n }\n\n if (\n authenticationState === TDSecureAuthenticationState.Succeeded &&\n [LiabilityShiftEnum.Yes, LiabilityShiftEnum.Possible].includes(liabilityShift)\n ) {\n return threeDSNonce;\n }\n\n throw new PaymentMethodInvalidError();\n }\n\n return nonce;\n }\n\n /**\n *\n * PayPal Fastlane instrument change\n *\n */\n private async handlePayPalStoredInstrumentChange(\n methodId: string,\n ): Promise<CardInstrument | undefined> {\n const paypalAxoSdk = this.paypalFastlaneUtils.getPayPalFastlaneOrThrow();\n\n const { selectionChanged, selectedCard } = await paypalAxoSdk.profile.showCardSelector();\n\n if (selectionChanged) {\n const state = this.paymentIntegrationService.getState();\n const paymentProviderCustomer = state.getPaymentProviderCustomer();\n const paypalFastlaneCustomer = isPayPalFastlaneCustomer(paymentProviderCustomer)\n ? paymentProviderCustomer\n : {};\n\n const selectedInstrument = this.paypalFastlaneUtils.mapPayPalToBcInstrument(\n methodId,\n selectedCard,\n )[0];\n\n await this.paymentIntegrationService.updatePaymentProviderCustomer({\n ...paypalFastlaneCustomer,\n instruments: [selectedInstrument],\n });\n\n return selectedInstrument;\n }\n\n return undefined;\n }\n\n private handleError(error: unknown): void {\n if (\n this.paypalcommercefastlane?.onError &&\n typeof this.paypalcommercefastlane.onError === 'function'\n ) {\n this.paypalcommercefastlane.onError(error);\n }\n }\n}\n","export interface PaypalFastlaneRequestError {\n name: string;\n message: string;\n response: {\n body: {\n name: string;\n };\n };\n}\n\nexport default function isPaypalFastlaneRequestError(\n error: unknown,\n): error is PaypalFastlaneRequestError {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'message' in error &&\n 'response' in error &&\n 'body' in (error as PaypalFastlaneRequestError).response &&\n 'name' in (error as PaypalFastlaneRequestError).response.body\n );\n}\n","import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalFastlaneUtils,\n createPayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceRequestSender from '../paypal-commerce-request-sender';\n\nimport PayPalCommerceFastlanePaymentStrategy from './paypal-commerce-fastlane-payment-strategy';\n\nconst createPayPalCommerceFastlanePaymentStrategy: PaymentStrategyFactory<\n PayPalCommerceFastlanePaymentStrategy\n> = (paymentIntegrationService) => {\n const { getHost } = paymentIntegrationService.getState();\n\n return new PayPalCommerceFastlanePaymentStrategy(\n paymentIntegrationService,\n new PayPalCommerceRequestSender(createRequestSender({ host: getHost() })),\n createPayPalSdkScriptLoader(),\n createPayPalFastlaneUtils(),\n );\n};\n\nexport default toResolvableModule(createPayPalCommerceFastlanePaymentStrategy, [\n { id: 'paypalcommerceacceleratedcheckout' }, // PayPal Fastlane relates to 'paypalcommerceacceleratedcheckout' method id\n]);\n","import {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalIntegrationService from './paypal-integration-service';\nimport {\n ApproveCallbackActions,\n ApproveCallbackPayload,\n PayPalButtonOptions,\n PayPalButtons,\n PayPalBuyNowInitializeOptions,\n ShippingAddressChangeCallbackPayload,\n ShippingOptionChangeCallbackPayload,\n} from './paypal-types';\n\nclass PaypalButtonCreationService {\n private onError?: PayPalButtonOptions['onError'];\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalIntegrationService: PayPalIntegrationService,\n ) {}\n\n createPayPalButton(\n providerId: string,\n methodId: string,\n buttonOptions: PayPalButtonOptions,\n buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n ): PayPalButtons {\n const {\n style,\n fundingSource,\n isHostedCheckoutEnabled,\n isServerSideShippingCallbacksEnabled,\n onClick,\n onCancel,\n onPaymentComplete,\n onError,\n } = buttonOptions;\n\n this.onError = onError;\n\n const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n const isAvailableFundingSource = Object.values(paypalSdk.FUNDING).includes(fundingSource);\n\n if (!isAvailableFundingSource) {\n throw new InvalidArgumentError(\n `Unable to initialize PayPal button because \"fundingSource\" argument is not valid funding source.`,\n );\n }\n\n const hostedCheckoutCallbacks = {\n ...(!isServerSideShippingCallbacksEnabled && {\n onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n this.onShippingAddressChange(data, providerId),\n onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n this.onShippingOptionsChange(data, providerId),\n }),\n onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n this.onHostedCheckoutApprove(\n data,\n actions,\n methodId,\n providerId,\n onPaymentComplete,\n isServerSideShippingCallbacksEnabled,\n ),\n };\n\n return paypalSdk.Buttons({\n fundingSource,\n style: this.paypalIntegrationService.getValidButtonStyle(style),\n createOrder: async () => {\n if (buyNowInitializeOptions) {\n const buyNowCart = await this.paypalIntegrationService.createBuyNowCartOrThrow(\n buyNowInitializeOptions,\n );\n\n await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n }\n\n return this.paypalIntegrationService.createOrder(providerId);\n },\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalIntegrationService.tokenizePayment(methodId, orderID),\n ...(onClick ? { onClick } : {}),\n ...(onCancel ? { onCancel } : {}),\n ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n });\n }\n\n private async onHostedCheckoutApprove(\n data: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n methodId: string,\n providerId: string,\n onComplete?: () => void,\n isServerSideShippingCallbacksEnabled?: boolean,\n ): Promise<void> {\n if (!data.orderID) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n\n try {\n const hasPhysicalItems = cart.lineItems.physicalItems.length > 0;\n\n if (!isServerSideShippingCallbacksEnabled) {\n const orderDetails = await actions.order.get();\n\n const billingAddress =\n this.paypalIntegrationService.getBillingAddressFromOrderDetails(orderDetails);\n\n await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n if (hasPhysicalItems) {\n const shippingAddress =\n this.paypalIntegrationService.getShippingAddressFromOrderDetails(\n orderDetails,\n );\n\n await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n }\n }\n\n if (hasPhysicalItems) {\n await this.paypalIntegrationService.updateOrder(\n providerId,\n undefined,\n undefined,\n isServerSideShippingCallbacksEnabled,\n );\n }\n\n if (isServerSideShippingCallbacksEnabled) {\n await this.paymentIntegrationService.loadCheckout();\n }\n\n await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n\n await this.paypalIntegrationService.submitPayment(methodId, data.orderID);\n\n if (onComplete && typeof onComplete === 'function') {\n onComplete();\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private async onShippingAddressChange(\n data: ShippingAddressChangeCallbackPayload,\n providerId: string,\n ): Promise<void> {\n const address = this.paypalIntegrationService.getAddress({\n city: data.shippingAddress.city,\n countryCode: data.shippingAddress.countryCode,\n postalCode: data.shippingAddress.postalCode,\n stateOrProvinceCode: data.shippingAddress.state,\n });\n\n try {\n // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n // on this stage we don't have access to valid customer's address accept shipping data\n await this.paymentIntegrationService.updateBillingAddress(address);\n await this.paymentIntegrationService.updateShippingAddress(address);\n\n const shippingOption = this.paypalIntegrationService.getShippingOptionOrThrow();\n\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalIntegrationService.updateOrder(providerId);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private async onShippingOptionsChange(\n data: ShippingOptionChangeCallbackPayload,\n providerId: string,\n ): Promise<void> {\n const shippingOption = this.paypalIntegrationService.getShippingOptionOrThrow(\n data.selectedShippingOption.id,\n );\n\n try {\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalIntegrationService.updateOrder(providerId);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private handleError(error: unknown) {\n if (typeof this.onError === 'function') {\n this.onError(error);\n } else {\n throw error;\n }\n }\n}\n\nexport default PaypalButtonCreationService;\n","import {\n CustomerCredentials,\n CustomerInitializeOptions,\n CustomerStrategy,\n DefaultCheckoutButtonHeight,\n ExecutePaymentMethodCheckoutOptions,\n InvalidArgumentError,\n PaymentIntegrationService,\n RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n PaypalButtonCreationService,\n PayPalButtonOptions,\n PayPalInitializationData,\n PayPalIntegrationService,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCustomerInitializeOptions, {\n WithPayPalCommerceCustomerInitializeOptions,\n} from './paypal-commerce-customer-initialize-options';\n\nexport default class PayPalCommerceCustomerStrategy implements CustomerStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalIntegrationService: PayPalIntegrationService,\n private paypalButtonCreationService: PaypalButtonCreationService,\n ) {}\n\n async initialize(\n options: CustomerInitializeOptions & WithPayPalCommerceCustomerInitializeOptions,\n ): Promise<void> {\n const { paypalcommerce, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!paypalcommerce) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.',\n );\n }\n\n if (!paypalcommerce.container) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommerce.container\" argument is not provided.',\n );\n }\n\n if (paypalcommerce.onClick && typeof paypalcommerce.onClick !== 'function') {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommerce.onClick\" argument is not a function.',\n );\n }\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethod(methodId);\n\n if (!paymentMethod) {\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n }\n\n const paypalSdk = await this.paypalIntegrationService.loadPayPalSdk(methodId);\n\n if (!paypalSdk || !paypalSdk.Buttons || typeof paypalSdk.Buttons !== 'function') {\n // eslint-disable-next-line no-console\n console.error(\n '[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK',\n );\n\n return;\n }\n\n this.renderButton(methodId, paypalcommerce);\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n await this.paymentIntegrationService.signInCustomer(credentials, options);\n\n return Promise.resolve();\n }\n\n async signOut(options?: RequestOptions): Promise<void> {\n await this.paymentIntegrationService.signOutCustomer(options);\n\n return Promise.resolve();\n }\n\n executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void> {\n options?.continueWithCheckoutCallback?.();\n\n return Promise.resolve();\n }\n\n private renderButton(\n methodId: string,\n paypalcommerce: PayPalCommerceCustomerInitializeOptions,\n ): void {\n const { container, onClick, onComplete, onError } = paypalcommerce;\n\n const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const {\n isHostedCheckoutEnabled,\n paymentButtonStyles,\n isServerSideShippingCallbacksEnabled,\n } = paymentMethod.initializationData || {};\n const { checkoutTopButtonStyles } = paymentButtonStyles || {};\n\n const buttonOptions: PayPalButtonOptions = {\n fundingSource: paypalSdk.FUNDING.PAYPAL,\n isServerSideShippingCallbacksEnabled,\n isHostedCheckoutEnabled,\n style: {\n ...checkoutTopButtonStyles,\n height: DefaultCheckoutButtonHeight,\n },\n ...(onClick && { onClick: () => onClick() }),\n ...(isHostedCheckoutEnabled && onComplete && { onPaymentComplete: () => onComplete() }),\n onError,\n };\n\n const paypalButton = this.paypalButtonCreationService.createPayPalButton(\n 'paypalcommerce',\n methodId,\n buttonOptions,\n );\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${container}`);\n } else {\n this.paypalIntegrationService.removeElement(container);\n }\n }\n}\n","const DefaultCheckoutButtonHeight = 40;\n\nexport default DefaultCheckoutButtonHeight;\n","import {\n CustomerStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalIntegrationService,\n PaypalButtonCreationService,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCustomerStrategy from './paypal-commerce-customer-strategy';\n\nconst createPayPalCommerceCustomerStrategy: CustomerStrategyFactory<\n PayPalCommerceCustomerStrategy\n> = (paymentIntegrationService) => {\n const paypalIntegrationService = createPayPalIntegrationService(paymentIntegrationService);\n const paypalButtonCreationService = new PaypalButtonCreationService(\n paymentIntegrationService,\n paypalIntegrationService,\n );\n\n return new PayPalCommerceCustomerStrategy(\n paymentIntegrationService,\n paypalIntegrationService,\n paypalButtonCreationService,\n );\n};\n\nexport default toResolvableModule(createPayPalCommerceCustomerStrategy, [{ id: 'paypalcommerce' }]);\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { isNil, omitBy } from 'lodash';\n\nimport {\n BillingAddressRequestBody,\n BuyNowCartCreationError,\n Cart,\n CartSource,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethodClientUnavailableError,\n RequestError,\n RequestOptions,\n ShippingOption,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceRequestSender from './paypal-commerce-request-sender';\nimport PayPalCommerceScriptLoader from './paypal-commerce-script-loader';\nimport {\n PayPalButtonStyleOptions,\n PayPalBuyNowInitializeOptions,\n PayPalCommerceInitializationData,\n PayPalCreateOrderCardFieldsResponse,\n PayPalCreateOrderRequestBody,\n PayPalOrderDetails,\n PayPalOrderStatus,\n PayPalSDK,\n StyleButtonColor,\n StyleButtonLabel,\n StyleButtonShape,\n} from './paypal-commerce-types';\n\nexport default class PayPalCommerceIntegrationService {\n private paypalSdk?: PayPalSDK;\n\n constructor(\n private formPoster: FormPoster,\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceRequestSender: PayPalCommerceRequestSender,\n private paypalCommerceScriptLoader: PayPalCommerceScriptLoader,\n ) {}\n\n /**\n *\n * PayPalSDK methods\n *\n */\n async loadPayPalSdk(\n methodId: string,\n providedCurrencyCode?: string,\n initializesOnCheckoutPage?: boolean,\n forceLoad?: boolean,\n ): Promise<PayPalSDK | undefined> {\n const state = this.paymentIntegrationService.getState();\n const currencyCode = providedCurrencyCode || state.getCartOrThrow().currency.code;\n const paymentMethod =\n state.getPaymentMethodOrThrow<PayPalCommerceInitializationData>(methodId);\n\n this.paypalSdk = await this.paypalCommerceScriptLoader.getPayPalSDK(\n paymentMethod,\n currencyCode,\n state.getLocale(),\n initializesOnCheckoutPage,\n forceLoad,\n );\n\n return this.paypalSdk;\n }\n\n getPayPalSdkOrThrow(): PayPalSDK {\n if (!this.paypalSdk) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.paypalSdk;\n }\n\n /**\n *\n * Buy Now cart creation methods\n *\n */\n async createBuyNowCartOrThrow(\n buyNowInitializeOptions: PayPalBuyNowInitializeOptions,\n ): Promise<Cart> {\n const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n return await this.paymentIntegrationService.createBuyNowCart(cartRequestBody);\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n\n /**\n *\n * Order methods\n *\n */\n async createOrder(\n providerId: string,\n requestBody?: Partial<PayPalCreateOrderRequestBody>,\n ): Promise<string> {\n const cartId = this.paymentIntegrationService.getState().getCartOrThrow().id;\n\n const { orderId } = await this.paypalCommerceRequestSender.createOrder(providerId, {\n cartId,\n ...requestBody,\n });\n\n return orderId;\n }\n\n async createOrderCardFields(\n providerId: string,\n requestBody?: Partial<PayPalCreateOrderRequestBody>,\n ): Promise<PayPalCreateOrderCardFieldsResponse> {\n const cartId = this.paymentIntegrationService.getState().getCartOrThrow().id;\n\n const { orderId, setupToken } = await this.paypalCommerceRequestSender.createOrder(\n providerId,\n {\n cartId,\n ...requestBody,\n },\n );\n\n return { orderId, ...(setupToken ? { setupToken } : {}) };\n }\n\n async updateOrder(isServerSideShippingCallbacksEnabled?: boolean): Promise<void> {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const consignment = state.getConsignmentsOrThrow()[0];\n\n try {\n await this.paypalCommerceRequestSender.updateOrder({\n availableShippingOptions: isServerSideShippingCallbacksEnabled\n ? []\n : consignment.availableShippingOptions,\n cartId: cart.id,\n selectedShippingOption: isServerSideShippingCallbacksEnabled\n ? null\n : consignment.selectedShippingOption,\n });\n } catch (_error) {\n throw new RequestError();\n }\n }\n\n async getOrderStatus(methodId?: string, options?: RequestOptions): Promise<PayPalOrderStatus> {\n try {\n const { status } = await this.paypalCommerceRequestSender.getOrderStatus(\n methodId,\n options,\n );\n\n return status;\n } catch (_error) {\n throw new RequestError();\n }\n }\n\n /**\n *\n * Payment submitting and tokenizing methods\n *\n */\n tokenizePayment(methodId: string, orderId?: string): void {\n const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n\n if (!orderId) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n return this.formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n action: 'set_external_checkout',\n provider: methodId,\n order_id: orderId,\n ...(cart.source === CartSource.BuyNow && { cart_id: cart.id }),\n });\n }\n\n async submitPayment(methodId: string, orderId: string, gatewayId?: string): Promise<void> {\n const paymentData = {\n formattedPayload: {\n vault_payment_instrument: null,\n set_as_default_stored_instrument: null,\n device_info: null,\n method_id: methodId,\n paypal_account: {\n order_id: orderId,\n },\n },\n };\n\n await this.paymentIntegrationService.submitPayment({\n methodId,\n paymentData,\n ...(gatewayId ? { gatewayId } : {}),\n });\n }\n\n /**\n *\n * Shipping options methods\n *\n */\n getShippingOptionOrThrow(selectedShippingOptionId?: string): ShippingOption {\n const state = this.paymentIntegrationService.getState();\n const consignment = state.getConsignmentsOrThrow()[0];\n\n const availableShippingOptions = consignment.availableShippingOptions || [];\n\n const recommendedShippingOption = availableShippingOptions.find(\n (option) => option.isRecommended,\n );\n\n const selectedShippingOption = selectedShippingOptionId\n ? availableShippingOptions.find((option) => option.id === selectedShippingOptionId)\n : availableShippingOptions.find(\n (option) => option.id === consignment.selectedShippingOption?.id,\n );\n\n const shippingOptionToSelect =\n selectedShippingOption || recommendedShippingOption || availableShippingOptions[0];\n\n if (!shippingOptionToSelect) {\n throw new Error(\"Your order can't be shipped to this address\");\n }\n\n return shippingOptionToSelect;\n }\n\n /**\n *\n * Address transforming methods\n *\n */\n getAddress(address?: Partial<BillingAddressRequestBody>): BillingAddressRequestBody {\n return {\n firstName: address?.firstName || '',\n lastName: address?.lastName || '',\n email: address?.email || '',\n phone: address?.phone || '',\n company: '',\n address1: address?.address1 || '',\n address2: address?.address2 || '',\n city: address?.city || '',\n countryCode: address?.countryCode || '',\n postalCode: address?.postalCode || '',\n stateOrProvince: '',\n stateOrProvinceCode: address?.stateOrProvinceCode || '',\n customFields: [],\n };\n }\n\n getBillingAddressFromOrderDetails({ payer }: PayPalOrderDetails): BillingAddressRequestBody {\n return this.getAddress({\n firstName: payer.name.given_name,\n lastName: payer.name.surname,\n email: payer.email_address,\n address1: payer.address.address_line_1,\n address2: payer.address.address_line_2,\n city: payer.address.admin_area_2,\n countryCode: payer.address.country_code,\n postalCode: payer.address.postal_code,\n stateOrProvinceCode: payer.address.admin_area_1,\n phone: payer.phone?.phone_number?.national_number,\n });\n }\n\n getShippingAddressFromOrderDetails(\n orderDetails: PayPalOrderDetails,\n ): BillingAddressRequestBody {\n const { payer, purchase_units } = orderDetails;\n const {\n address,\n name: { full_name },\n } = purchase_units[0].shipping;\n\n const [firstName, ...lastName] = full_name.split(' ');\n\n return this.getAddress({\n firstName,\n lastName: lastName.join(' '),\n email: payer.email_address,\n address1: address.address_line_1,\n address2: address.address_line_2,\n city: address.admin_area_2,\n countryCode: address.country_code,\n postalCode: address.postal_code,\n stateOrProvinceCode: address.admin_area_1,\n });\n }\n\n /**\n *\n * Buttons style methods\n *\n */\n getValidButtonStyle(style?: PayPalButtonStyleOptions): PayPalButtonStyleOptions {\n const { color, height, label, shape } = style || {};\n\n const validStyles = {\n color: color && StyleButtonColor[color] ? color : undefined,\n height: this.getValidHeight(height),\n label: label && StyleButtonLabel[label] ? label : undefined,\n shape: shape && StyleButtonShape[shape] ? shape : undefined,\n };\n\n return omitBy(validStyles, isNil);\n }\n\n getValidHeight(height?: number): number {\n const defaultHeight = 40;\n const minHeight = 25;\n const maxHeight = 55;\n\n if (!height || typeof height !== 'number') {\n return defaultHeight;\n }\n\n if (height > maxHeight) {\n return maxHeight;\n }\n\n if (height < minHeight) {\n return minHeight;\n }\n\n return height;\n }\n\n /**\n *\n * Utils methods\n *\n */\n removeElement(elementId?: string): void {\n const element = elementId && document.getElementById(elementId);\n\n if (element) {\n // For now this is a temporary solution, further removeElement method will be removed\n element.style.display = 'none';\n }\n }\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n MissingDataError,\n MissingDataErrorType,\n PaymentMethod,\n PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { transformLocaleToPayPalFormat } from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport {\n ComponentsScriptType,\n FundingType,\n PayPalCommerceHostWindow,\n PayPalCommerceInitializationData,\n PayPalCommerceScriptParams,\n PayPalSDK,\n} from './paypal-commerce-types';\n\nexport default class PayPalCommerceScriptLoader {\n private window: PayPalCommerceHostWindow;\n\n constructor(private scriptLoader: ScriptLoader) {\n this.window = window;\n }\n\n async getPayPalSDK(\n paymentMethod: PaymentMethod<PayPalCommerceInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n initializesOnCheckoutPage?: boolean,\n forceLoad?: boolean,\n ): Promise<PayPalSDK> {\n const paypalSdkScriptConfig = this.getPayPalSdkScriptConfigOrThrow(\n paymentMethod,\n currencyCode,\n storeLanguage,\n initializesOnCheckoutPage,\n );\n\n return this.loadPayPalSDK(paypalSdkScriptConfig, forceLoad);\n }\n\n private async loadPayPalSDK(\n paypalSdkScriptConfig: PayPalCommerceScriptParams,\n forceLoad = false,\n ): Promise<PayPalSDK> {\n if (!this.window.paypal || forceLoad) {\n const options = this.transformConfig<PayPalCommerceScriptParams['options']>(\n paypalSdkScriptConfig.options,\n );\n const attributes = this.transformConfig<PayPalCommerceScriptParams['attributes']>(\n paypalSdkScriptConfig.attributes,\n );\n\n const paypalSdkUrl = 'https://www.paypal.com/sdk/js';\n const scriptQuery = new URLSearchParams(options).toString();\n const scriptSrc = `${paypalSdkUrl}?${scriptQuery}`;\n\n await this.scriptLoader.loadScript(scriptSrc, { async: true, attributes });\n }\n\n if (!this.window.paypal) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.window.paypal;\n }\n\n private getPayPalSdkScriptConfigOrThrow(\n paymentMethod: PaymentMethod<PayPalCommerceInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n initializesOnCheckoutPage = true,\n ): PayPalCommerceScriptParams {\n const { id, clientToken, initializationData } = paymentMethod;\n\n if (!initializationData?.clientId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const {\n intent,\n clientId,\n merchantId,\n buyerCountry,\n attributionId,\n isVenmoEnabled,\n isHostedCheckoutEnabled,\n isPayPalCreditAvailable,\n isDeveloperModeApplicable,\n availableAlternativePaymentMethods = [],\n enabledAlternativePaymentMethods = [],\n isGooglePayEnabled,\n } = initializationData;\n\n const commit = isHostedCheckoutEnabled || initializesOnCheckoutPage;\n\n const shouldEnableCard = id === 'paypalcommercecreditcards';\n const enableCardFunding = shouldEnableCard ? ['card'] : [];\n const disableCardFunding = !shouldEnableCard ? ['card'] : [];\n\n const enableCreditFunding = isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n const disableCreditFunding = !isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n\n const enableVenmoFunding = isVenmoEnabled ? ['venmo'] : [];\n const disableVenmoFunding = !isVenmoEnabled ? ['venmo'] : [];\n const disableAPMsFunding = availableAlternativePaymentMethods.filter(\n (apm: string) => !enabledAlternativePaymentMethods.includes(apm),\n );\n const googlePayComponent: ComponentsScriptType = isGooglePayEnabled ? ['googlepay'] : [];\n const cardFieldsComponent: ComponentsScriptType = initializesOnCheckoutPage\n ? ['card-fields']\n : [];\n const disableFunding: FundingType = [\n ...disableCardFunding,\n ...disableCreditFunding,\n ...disableVenmoFunding,\n ...disableAPMsFunding,\n ];\n const enableFunding: FundingType = [\n ...enableCardFunding,\n ...enableCreditFunding,\n ...enableVenmoFunding,\n ...enabledAlternativePaymentMethods,\n ];\n\n const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n return {\n options: {\n 'client-id': clientId,\n 'merchant-id': merchantId,\n 'enable-funding': enableFunding.length > 0 ? enableFunding : undefined,\n 'disable-funding': disableFunding.length > 0 ? disableFunding : undefined,\n commit,\n components: [\n 'buttons',\n 'hosted-fields',\n 'payment-fields',\n 'legal',\n ...googlePayComponent,\n ...cardFieldsComponent,\n ],\n currency: currencyCode,\n intent,\n ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n ...(locale && { locale }),\n },\n attributes: {\n 'data-partner-attribution-id': attributionId,\n 'data-client-token': clientToken,\n },\n };\n }\n\n private transformConfig<T extends Record<string, unknown>>(config: T): Record<string, string> {\n let transformedConfig = {};\n\n const keys = Object.keys(config) as Array<keyof T>;\n\n keys.forEach((key) => {\n const value = config[key];\n\n if (\n value === undefined ||\n value === null ||\n value === '' ||\n (Array.isArray(value) && value.length === 0)\n ) {\n return;\n }\n\n transformedConfig = {\n ...transformedConfig,\n [key]: Array.isArray(value) ? value.join(',') : value,\n };\n });\n\n return transformedConfig;\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n PayPalCommerceIntegrationService,\n PayPalCommerceRequestSender,\n PayPalCommerceScriptLoader,\n} from './index';\n\nconst createPayPalCommerceIntegrationService = (\n paymentIntegrationService: PaymentIntegrationService,\n) => {\n const { getHost } = paymentIntegrationService.getState();\n\n return new PayPalCommerceIntegrationService(\n createFormPoster(),\n paymentIntegrationService,\n new PayPalCommerceRequestSender(createRequestSender({ host: getHost() })),\n new PayPalCommerceScriptLoader(getScriptLoader()),\n );\n};\n\nexport default createPayPalCommerceIntegrationService;\n","import { noop } from 'lodash';\n\nimport {\n CustomerCredentials,\n CustomerInitializeOptions,\n CustomerStrategy,\n DefaultCheckoutButtonHeight,\n ExecutePaymentMethodCheckoutOptions,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n ApproveCallbackActions,\n ApproveCallbackPayload,\n PayPalCommerceButtonsOptions,\n PayPalCommerceInitializationData,\n ShippingAddressChangeCallbackPayload,\n ShippingOptionChangeCallbackPayload,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceCreditCustomerInitializeOptions, {\n WithPayPalCommerceCreditCustomerInitializeOptions,\n} from './paypal-commerce-credit-customer-initialize-options';\n\nexport default class PayPalCommerceCreditCustomerStrategy implements CustomerStrategy {\n private onError = noop;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n ) {}\n\n async initialize(\n options: CustomerInitializeOptions & WithPayPalCommerceCreditCustomerInitializeOptions,\n ): Promise<void> {\n const { paypalcommercecredit, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!paypalcommercecredit) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.',\n );\n }\n\n if (!paypalcommercecredit.container) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercecredit.container\" argument is not provided.',\n );\n }\n\n if (paypalcommercecredit.onClick && typeof paypalcommercecredit.onClick !== 'function') {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercecredit.onClick\" argument is not a function.',\n );\n }\n\n this.onError = paypalcommercecredit.onError || noop;\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethod(methodId);\n\n if (!paymentMethod) {\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n }\n\n const paypalSdk = await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId);\n\n if (!paypalSdk || !paypalSdk.Buttons || typeof paypalSdk.Buttons !== 'function') {\n // eslint-disable-next-line no-console\n console.error(\n '[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK',\n );\n\n return;\n }\n\n this.renderButton(methodId, paypalcommercecredit);\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n await this.paymentIntegrationService.signInCustomer(credentials, options);\n }\n\n async signOut(options?: RequestOptions): Promise<void> {\n await this.paymentIntegrationService.signOutCustomer(options);\n }\n\n executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void> {\n options?.continueWithCheckoutCallback?.();\n\n return Promise.resolve();\n }\n\n private renderButton(\n methodId: string,\n paypalCommerceCredit: PayPalCommerceCreditCustomerInitializeOptions,\n ): void {\n const { container, onComplete, onClick } = paypalCommerceCredit;\n\n const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n const state = this.paymentIntegrationService.getState();\n const paymentMethod =\n state.getPaymentMethodOrThrow<PayPalCommerceInitializationData>(methodId);\n const {\n isHostedCheckoutEnabled,\n paymentButtonStyles,\n isServerSideShippingCallbacksEnabled,\n } = paymentMethod.initializationData || {};\n const { checkoutTopButtonStyles } = paymentButtonStyles || {};\n\n const defaultCallbacks = {\n createOrder: () =>\n this.paypalCommerceIntegrationService.createOrder('paypalcommercecredit'),\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n ...(onClick && { onClick: () => onClick() }),\n };\n\n const hostedCheckoutCallbacks = {\n ...(!isServerSideShippingCallbacksEnabled && {\n onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n this.onShippingAddressChange(data),\n onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n this.onShippingOptionsChange(data),\n }),\n onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n this.onHostedCheckoutApprove(\n data,\n actions,\n methodId,\n onComplete,\n isServerSideShippingCallbacksEnabled,\n ),\n };\n\n const fundingSources = [paypalSdk.FUNDING.PAYLATER, paypalSdk.FUNDING.CREDIT];\n let hasRenderedSmartButton = false;\n\n fundingSources.forEach((fundingSource) => {\n if (!hasRenderedSmartButton) {\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource,\n style: this.paypalCommerceIntegrationService.getValidButtonStyle({\n ...checkoutTopButtonStyles,\n height: DefaultCheckoutButtonHeight,\n }),\n ...defaultCallbacks,\n ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n };\n\n const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${container}`);\n hasRenderedSmartButton = true;\n }\n }\n });\n\n if (!hasRenderedSmartButton) {\n this.paypalCommerceIntegrationService.removeElement(container);\n }\n }\n\n private async onHostedCheckoutApprove(\n data: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n methodId: string,\n onComplete?: () => void,\n isServerSideShippingCallbacksEnabled?: boolean,\n ): Promise<void> {\n if (!data.orderID) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n\n try {\n const hasPhysicalItems = cart.lineItems.physicalItems.length > 0;\n\n if (!isServerSideShippingCallbacksEnabled) {\n const orderDetails = await actions.order.get();\n\n const billingAddress =\n this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(\n orderDetails,\n );\n\n await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n if (hasPhysicalItems) {\n const shippingAddress =\n this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(\n orderDetails,\n );\n\n await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n }\n }\n\n if (hasPhysicalItems) {\n await this.paypalCommerceIntegrationService.updateOrder(\n isServerSideShippingCallbacksEnabled,\n );\n }\n\n if (isServerSideShippingCallbacksEnabled) {\n await this.paymentIntegrationService.loadCheckout();\n }\n\n await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n await this.paypalCommerceIntegrationService.submitPayment(methodId, data.orderID);\n\n if (onComplete && typeof onComplete === 'function') {\n onComplete();\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private async onShippingAddressChange(\n data: ShippingAddressChangeCallbackPayload,\n ): Promise<void> {\n const address = this.paypalCommerceIntegrationService.getAddress({\n city: data.shippingAddress.city,\n countryCode: data.shippingAddress.countryCode,\n postalCode: data.shippingAddress.postalCode,\n stateOrProvinceCode: data.shippingAddress.state,\n });\n\n try {\n // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n // on this stage we don't have access to valid customer's address except shipping data\n await this.paymentIntegrationService.updateBillingAddress(address);\n await this.paymentIntegrationService.updateShippingAddress(address);\n\n const shippingOption = this.paypalCommerceIntegrationService.getShippingOptionOrThrow();\n\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalCommerceIntegrationService.updateOrder();\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private async onShippingOptionsChange(\n data: ShippingOptionChangeCallbackPayload,\n ): Promise<void> {\n const shippingOption = this.paypalCommerceIntegrationService.getShippingOptionOrThrow(\n data.selectedShippingOption.id,\n );\n\n try {\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalCommerceIntegrationService.updateOrder();\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private handleError(error: unknown) {\n if (typeof this.onError === 'function') {\n this.onError(error);\n } else {\n throw error;\n }\n }\n}\n","import {\n CustomerStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceCreditCustomerStrategy from './paypal-commerce-credit-customer-strategy';\n\nconst createPayPalCommerceCreditCustomerStrategy: CustomerStrategyFactory<\n PayPalCommerceCreditCustomerStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceCreditCustomerStrategy(\n paymentIntegrationService,\n createPayPalCommerceIntegrationService(paymentIntegrationService),\n );\n\nexport default toResolvableModule(createPayPalCommerceCreditCustomerStrategy, [\n { id: 'paypalcommercecredit' },\n]);\n","import {\n CustomerCredentials,\n CustomerInitializeOptions,\n CustomerStrategy,\n DefaultCheckoutButtonHeight,\n ExecutePaymentMethodCheckoutOptions,\n InvalidArgumentError,\n PaymentIntegrationService,\n RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n ApproveCallbackPayload,\n PayPalCommerceButtonsOptions,\n PayPalCommerceInitializationData,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceVenmoCustomerInitializeOptions, {\n WithPayPalCommerceVenmoCustomerInitializeOptions,\n} from './paypal-commerce-venmo-customer-initialize-options';\n\nexport default class PayPalCommerceVenmoCustomerStrategy implements CustomerStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n ) {}\n\n async initialize(\n options: CustomerInitializeOptions & WithPayPalCommerceVenmoCustomerInitializeOptions,\n ): Promise<void> {\n const { paypalcommercevenmo, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!paypalcommercevenmo) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.',\n );\n }\n\n if (!paypalcommercevenmo.container) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercevenmo.container\" argument is not provided.',\n );\n }\n\n if (paypalcommercevenmo.onClick && typeof paypalcommercevenmo.onClick !== 'function') {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercevenmo.onClick\" argument is not a function.',\n );\n }\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethod(methodId);\n\n if (!paymentMethod) {\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n }\n\n const paypalSdk = await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId);\n\n if (!paypalSdk || !paypalSdk.Buttons || typeof paypalSdk.Buttons !== 'function') {\n // eslint-disable-next-line no-console\n console.error(\n '[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK',\n );\n\n return;\n }\n\n this.renderButton(methodId, paypalcommercevenmo);\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n await this.paymentIntegrationService.signInCustomer(credentials, options);\n }\n\n async signOut(options?: RequestOptions): Promise<void> {\n await this.paymentIntegrationService.signOutCustomer(options);\n }\n\n executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void> {\n options?.continueWithCheckoutCallback?.();\n\n return Promise.resolve();\n }\n\n private renderButton(\n methodId: string,\n paypalcommercevenmo: PayPalCommerceVenmoCustomerInitializeOptions,\n ): void {\n const { container, onClick } = paypalcommercevenmo;\n\n const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n const state = this.paymentIntegrationService.getState();\n const paymentMethod =\n state.getPaymentMethodOrThrow<PayPalCommerceInitializationData>(methodId);\n const { paymentButtonStyles } = paymentMethod.initializationData || {};\n const { checkoutTopButtonStyles } = paymentButtonStyles || {};\n\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource: paypalSdk.FUNDING.VENMO,\n style: this.paypalCommerceIntegrationService.getValidButtonStyle({\n ...checkoutTopButtonStyles,\n height: DefaultCheckoutButtonHeight,\n }),\n createOrder: () =>\n this.paypalCommerceIntegrationService.createOrder('paypalcommercevenmo'),\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n ...(onClick && { onClick: () => onClick() }),\n };\n\n const paypalButtonRender = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${container}`);\n } else {\n this.paypalCommerceIntegrationService.removeElement(container);\n }\n }\n}\n","import {\n CustomerStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceVenmoCustomerStrategy from './paypal-commerce-venmo-customer-strategy';\n\nconst createPayPalCommerceVenmoCustomerStrategy: CustomerStrategyFactory<\n PayPalCommerceVenmoCustomerStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceVenmoCustomerStrategy(\n paymentIntegrationService,\n createPayPalCommerceIntegrationService(paymentIntegrationService),\n );\n\nexport default toResolvableModule(createPayPalCommerceVenmoCustomerStrategy, [\n { id: 'paypalcommercevenmo' },\n]);\n","import {\n CustomerCredentials,\n CustomerInitializeOptions,\n CustomerStrategy,\n ExecutePaymentMethodCheckoutOptions,\n InvalidArgumentError,\n PaymentIntegrationService,\n RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n getFastlaneStyles,\n PayPalFastlaneAuthenticationResult,\n PayPalFastlaneAuthenticationState,\n PayPalFastlaneStylesOption,\n PayPalFastlaneUtils,\n PayPalInitializationData,\n PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceFastlaneCustomerInitializeOptions, {\n WithPayPalCommerceFastlaneCustomerInitializeOptions,\n} from './paypal-commerce-fastlane-customer-initialize-options';\n\nexport default class PayPalCommerceFastlaneCustomerStrategy implements CustomerStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalSdkScriptLoader: PayPalSdkScriptLoader,\n private paypalFastlaneUtils: PayPalFastlaneUtils,\n ) {}\n\n async initialize(\n options: CustomerInitializeOptions & WithPayPalCommerceFastlaneCustomerInitializeOptions,\n ): Promise<void> {\n const { methodId, paypalcommercefastlane } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"methodId\" argument is not provided.',\n );\n }\n\n try {\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n const isTestModeEnabled = !!paymentMethod.initializationData?.isDeveloperModeApplicable;\n\n const paypalFastlaneSdk = await this.paypalSdkScriptLoader.getPayPalFastlaneSdk(\n paymentMethod,\n cart.currency.code,\n cart.id,\n state.getLocale(),\n );\n\n await this.paypalFastlaneUtils.initializePayPalFastlane(\n paypalFastlaneSdk,\n isTestModeEnabled,\n this.getFastlaneStyles(methodId, paypalcommercefastlane),\n );\n } catch (_) {\n // TODO: add logger to be able to debug issues if there any\n // Info: Do not throw anything here to avoid blocking customer from passing checkout flow\n }\n\n return Promise.resolve();\n }\n\n async deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n await this.paymentIntegrationService.signInCustomer(credentials, options);\n\n await this.paymentIntegrationService.updatePaymentProviderCustomer({\n authenticationState: undefined,\n addresses: undefined,\n instruments: undefined,\n });\n\n this.paypalFastlaneUtils.removeStorageSessionId();\n }\n\n async signOut(options?: RequestOptions): Promise<void> {\n await this.paymentIntegrationService.signOutCustomer(options);\n }\n\n async executePaymentMethodCheckout(\n options?: ExecutePaymentMethodCheckoutOptions,\n ): Promise<void> {\n const { checkoutPaymentMethodExecuted, continueWithCheckoutCallback, methodId } =\n options || {};\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"methodId\" argument is not provided.',\n );\n }\n\n if (typeof continueWithCheckoutCallback !== 'function') {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.',\n );\n }\n\n const state = this.paymentIntegrationService.getState();\n const customer = state.getCustomerOrThrow();\n\n if (customer.isGuest) {\n if (\n checkoutPaymentMethodExecuted &&\n typeof checkoutPaymentMethodExecuted === 'function'\n ) {\n checkoutPaymentMethodExecuted();\n }\n\n try {\n await this.runPayPalAuthenticationFlowOrThrow(methodId);\n } catch (_) {\n // TODO: add logger to be able to debug issues if there any\n // Info: Do not throw anything here to avoid blocking customer from passing checkout flow\n }\n }\n\n continueWithCheckoutCallback();\n }\n\n /**\n *\n * Authentication flow methods\n *\n */\n private async runPayPalAuthenticationFlowOrThrow(methodId: string): Promise<void> {\n const state = this.paymentIntegrationService.getState();\n const cartId = state.getCartOrThrow().id;\n const customer = state.getCustomer();\n const billingAddress = state.getBillingAddress();\n const customerEmail = customer?.email || billingAddress?.email || '';\n\n const { customerContextId } = await this.paypalFastlaneUtils.lookupCustomerOrThrow(\n customerEmail,\n );\n\n const authenticationResult =\n await this.paypalFastlaneUtils.triggerAuthenticationFlowOrThrow(customerContextId);\n\n const isAuthenticationFlowCanceled =\n authenticationResult.authenticationState === PayPalFastlaneAuthenticationState.CANCELED;\n\n await this.updateCustomerDataState(methodId, authenticationResult);\n\n if (isAuthenticationFlowCanceled) {\n this.paypalFastlaneUtils.removeStorageSessionId();\n } else {\n this.paypalFastlaneUtils.updateStorageSessionId(cartId);\n }\n }\n\n private async updateCustomerDataState(\n methodId: string,\n authenticationResult: PayPalFastlaneAuthenticationResult,\n ): Promise<void> {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n\n const { authenticationState, addresses, billingAddress, shippingAddress, instruments } =\n this.paypalFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(\n methodId,\n authenticationResult,\n );\n\n await this.paymentIntegrationService.updatePaymentProviderCustomer({\n authenticationState,\n addresses,\n instruments,\n });\n\n if (billingAddress) {\n await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n }\n\n if (shippingAddress && cart.lineItems.physicalItems.length > 0) {\n const updatedState = await this.paymentIntegrationService.updateShippingAddress(\n shippingAddress,\n );\n\n const paymentMethod =\n updatedState.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const { isFastlaneShippingOptionAutoSelectEnabled } =\n paymentMethod.initializationData || {};\n const consignments = updatedState.getConsignments() || [];\n const availableShippingOptions = consignments[0]?.availableShippingOptions || [];\n const firstShippingOption = availableShippingOptions[0];\n const recommendedShippingOption = availableShippingOptions.find(\n (option) => option.isRecommended,\n );\n\n if (\n (recommendedShippingOption || firstShippingOption) &&\n isFastlaneShippingOptionAutoSelectEnabled\n ) {\n const shippingOptionId = recommendedShippingOption?.id || firstShippingOption.id;\n\n await this.paymentIntegrationService.selectShippingOption(shippingOptionId);\n }\n }\n }\n\n /**\n *\n * Fastlane styling methods\n *\n */\n private getFastlaneStyles(\n methodId: string,\n paypalcommercefastlane: PayPalCommerceFastlaneCustomerInitializeOptions | undefined,\n ): PayPalFastlaneStylesOption | undefined {\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n const { fastlaneStyles, isFastlaneStylingEnabled } = paymentMethod.initializationData || {};\n\n return getFastlaneStyles(\n isFastlaneStylingEnabled ? fastlaneStyles : {},\n paypalcommercefastlane?.styles,\n );\n }\n}\n","import {\n CustomerStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalFastlaneUtils,\n createPayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceFastlaneCustomerStrategy from './paypal-commerce-fastlane-customer-strategy';\n\nconst createPayPalCommerceFastlaneCustomerStrategy: CustomerStrategyFactory<\n PayPalCommerceFastlaneCustomerStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceFastlaneCustomerStrategy(\n paymentIntegrationService,\n createPayPalSdkScriptLoader(),\n createPayPalFastlaneUtils(),\n );\n\nexport default toResolvableModule(createPayPalCommerceFastlaneCustomerStrategy, [\n { id: 'paypalcommerceacceleratedcheckout' }, // this method id will be provided for users from test group\n { id: 'paypalcommercecreditcards' }, // this method id will be provided for users from control group\n]);\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n PaypalButtonCreationService,\n PayPalButtonOptions,\n PayPalInitializationData,\n PayPalIntegrationService,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceButtonInitializeOptions, {\n WithPayPalCommerceButtonInitializeOptions,\n} from './paypal-commerce-button-initialize-options';\n\nexport default class PayPalCommerceButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalIntegrationService: PayPalIntegrationService,\n private paypalButtonCreationService: PaypalButtonCreationService,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceButtonInitializeOptions,\n ): Promise<void> {\n const { paypalcommerce, containerId, methodId } = options;\n\n const isBuyNowFlow = Boolean(paypalcommerce?.buyNowInitializeOptions);\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!paypalcommerce) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.`,\n );\n }\n\n if (isBuyNowFlow && !paypalcommerce.currencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerce.currencyCode\" argument is not provided.`,\n );\n }\n\n if (\n isBuyNowFlow &&\n typeof paypalcommerce.buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n ) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerce.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n );\n }\n\n if (!isBuyNowFlow) {\n // Info: default checkout should not be loaded for BuyNow flow,\n // since there is no checkout session available for that.\n await this.paymentIntegrationService.loadDefaultCheckout();\n }\n\n // Info: we are using provided currency code for buy now cart,\n // because checkout session is not available before buy now cart creation,\n // hence application will throw an error on getCartOrThrow method call\n const currencyCode = isBuyNowFlow\n ? paypalcommerce.currencyCode\n : this.paymentIntegrationService.getState().getCartOrThrow().currency.code;\n\n await this.paypalIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n this.renderButton(containerId, methodId, paypalcommerce);\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n methodId: string,\n paypalcommerce: PayPalCommerceButtonInitializeOptions,\n ): void {\n const { buyNowInitializeOptions, style, onComplete, onEligibilityFailure } = paypalcommerce;\n\n const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const { isHostedCheckoutEnabled, isServerSideShippingCallbacksEnabled } =\n paymentMethod.initializationData || {};\n\n const buyNowFlowCallbacks = {\n onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n };\n\n const buttonOptions: PayPalButtonOptions = {\n fundingSource: paypalSdk.FUNDING.PAYPAL,\n style: this.paypalIntegrationService.getValidButtonStyle(style),\n isServerSideShippingCallbacksEnabled,\n isHostedCheckoutEnabled,\n ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n ...(isHostedCheckoutEnabled && onComplete && { onPaymentComplete: () => onComplete() }),\n };\n\n const paypalButton = this.paypalButtonCreationService.createPayPalButton(\n 'paypalcommerce',\n methodId,\n buttonOptions,\n buyNowInitializeOptions,\n );\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${containerId}`);\n } else if (onEligibilityFailure && typeof onEligibilityFailure === 'function') {\n onEligibilityFailure();\n } else {\n this.paypalIntegrationService.removeElement(containerId);\n }\n }\n}\n","import {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalIntegrationService,\n PaypalButtonCreationService,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceButtonStrategy from './paypal-commerce-button-strategy';\n\nconst createPayPalCommerceButtonStrategy: CheckoutButtonStrategyFactory<\n PayPalCommerceButtonStrategy\n> = (paymentIntegrationService) => {\n const paypalIntegrationService = createPayPalIntegrationService(paymentIntegrationService);\n const paypalButtonCreationService = new PaypalButtonCreationService(\n paymentIntegrationService,\n paypalIntegrationService,\n );\n\n return new PayPalCommerceButtonStrategy(\n paymentIntegrationService,\n paypalIntegrationService,\n paypalButtonCreationService,\n );\n};\n\nexport default toResolvableModule(createPayPalCommerceButtonStrategy, [{ id: 'paypalcommerce' }]);\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n ApproveCallbackActions,\n ApproveCallbackPayload,\n PayPalButtonsOptions,\n PayPalBuyNowInitializeOptions,\n PayPalInitializationData,\n PayPalIntegrationService,\n ShippingAddressChangeCallbackPayload,\n ShippingOptionChangeCallbackPayload,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCreditButtonInitializeOptions, {\n WithPayPalCommerceCreditButtonInitializeOptions,\n} from './paypal-commerce-credit-button-initialize-options';\n\nexport default class PayPalCommerceCreditButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalIntegrationService: PayPalIntegrationService,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceCreditButtonInitializeOptions,\n ): Promise<void> {\n const { paypalcommercecredit, containerId, methodId } = options;\n const { buyNowInitializeOptions, currencyCode: providedCurrencyCode } =\n paypalcommercecredit || {};\n\n const isBuyNowFlow = !!buyNowInitializeOptions;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!paypalcommercecredit) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.`,\n );\n }\n\n if (isBuyNowFlow && !providedCurrencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercecredit.currencyCode\" argument is not provided.`,\n );\n }\n\n if (\n isBuyNowFlow &&\n typeof buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n ) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercecredit.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n );\n }\n\n if (!isBuyNowFlow) {\n // Info: default checkout should not be loaded for BuyNow flow,\n // since there is no checkout session available for that.\n await this.paymentIntegrationService.loadDefaultCheckout();\n }\n\n const state = this.paymentIntegrationService.getState();\n\n // Info: we are using provided currency code for buy now cart,\n // because checkout session is not available before buy now cart creation,\n // hence application will throw an error on getCartOrThrow method call\n const currencyCode = isBuyNowFlow\n ? providedCurrencyCode\n : state.getCartOrThrow().currency.code;\n\n await this.paypalIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n this.renderButton(containerId, methodId, paypalcommercecredit);\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n methodId: string,\n paypalcommercecredit: PayPalCommerceCreditButtonInitializeOptions,\n ): void {\n const { buyNowInitializeOptions, style, onComplete, onEligibilityFailure } =\n paypalcommercecredit;\n\n const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const { isHostedCheckoutEnabled, isServerSideShippingCallbacksEnabled } =\n paymentMethod.initializationData || {};\n\n const defaultCallbacks = {\n createOrder: () => this.paypalIntegrationService.createOrder('paypalcommercecredit'),\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalIntegrationService.tokenizePayment(methodId, orderID),\n };\n\n const buyNowFlowCallbacks = {\n onClick: () => this.handleClick(buyNowInitializeOptions),\n onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n };\n\n const hostedCheckoutCallbacks = {\n ...(!isServerSideShippingCallbacksEnabled && {\n onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n this.onShippingAddressChange(data),\n onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n this.onShippingOptionsChange(data),\n }),\n onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n this.onHostedCheckoutApprove(\n data,\n actions,\n methodId,\n onComplete,\n isServerSideShippingCallbacksEnabled,\n ),\n };\n\n const fundingSources = [paypalSdk.FUNDING.PAYLATER, paypalSdk.FUNDING.CREDIT];\n let hasRenderedSmartButton = false;\n\n fundingSources.forEach((fundingSource) => {\n if (!hasRenderedSmartButton) {\n const buttonRenderOptions: PayPalButtonsOptions = {\n fundingSource,\n style: this.paypalIntegrationService.getValidButtonStyle(style),\n ...defaultCallbacks,\n ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n };\n\n const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${containerId}`);\n hasRenderedSmartButton = true;\n } else if (onEligibilityFailure && typeof onEligibilityFailure === 'function') {\n onEligibilityFailure();\n }\n }\n });\n\n if (!hasRenderedSmartButton) {\n this.paypalIntegrationService.removeElement(containerId);\n }\n }\n\n private async handleClick(\n buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n ): Promise<void> {\n if (buyNowInitializeOptions) {\n const buyNowCart = await this.paypalIntegrationService.createBuyNowCartOrThrow(\n buyNowInitializeOptions,\n );\n\n await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n }\n }\n\n private async onHostedCheckoutApprove(\n data: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n methodId: string,\n onComplete?: () => void,\n isServerSideShippingCallbacksEnabled?: boolean,\n ): Promise<boolean> {\n if (!data.orderID) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n\n try {\n const hasPhysicalItems = cart.lineItems.physicalItems.length > 0;\n\n if (!isServerSideShippingCallbacksEnabled) {\n const orderDetails = await actions.order.get();\n\n const billingAddress =\n this.paypalIntegrationService.getBillingAddressFromOrderDetails(orderDetails);\n\n await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n if (hasPhysicalItems) {\n const shippingAddress =\n this.paypalIntegrationService.getShippingAddressFromOrderDetails(\n orderDetails,\n );\n\n await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n }\n }\n\n if (hasPhysicalItems) {\n await this.paypalIntegrationService.updateOrder(\n 'paypalcommerce',\n undefined,\n undefined,\n isServerSideShippingCallbacksEnabled,\n );\n }\n\n if (isServerSideShippingCallbacksEnabled) {\n await this.paymentIntegrationService.loadCheckout();\n }\n\n await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n\n await this.paypalIntegrationService.submitPayment(methodId, data.orderID);\n\n if (onComplete && typeof onComplete === 'function') {\n onComplete();\n }\n\n return true; // FIXME: Do we really need to return true here?\n } catch (error) {\n if (typeof error === 'string') {\n throw new Error(error);\n }\n\n throw error;\n }\n }\n\n private async onShippingAddressChange(\n data: ShippingAddressChangeCallbackPayload,\n ): Promise<void> {\n const address = this.paypalIntegrationService.getAddress({\n city: data.shippingAddress.city,\n countryCode: data.shippingAddress.countryCode,\n postalCode: data.shippingAddress.postalCode,\n stateOrProvinceCode: data.shippingAddress.state,\n });\n\n try {\n // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n // on this stage we don't have access to valid customer's address accept shipping data\n await this.paymentIntegrationService.updateBillingAddress(address);\n await this.paymentIntegrationService.updateShippingAddress(address);\n\n const shippingOption = this.paypalIntegrationService.getShippingOptionOrThrow();\n\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalIntegrationService.updateOrder('paypalcommerce');\n } catch (error) {\n if (typeof error === 'string') {\n throw new Error(error);\n }\n\n throw error;\n }\n }\n\n private async onShippingOptionsChange(\n data: ShippingOptionChangeCallbackPayload,\n ): Promise<void> {\n const shippingOption = this.paypalIntegrationService.getShippingOptionOrThrow(\n data.selectedShippingOption.id,\n );\n\n try {\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalIntegrationService.updateOrder('paypalcommerce');\n } catch (error) {\n if (typeof error === 'string') {\n throw new Error(error);\n }\n\n throw error;\n }\n }\n}\n","import {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { createPayPalIntegrationService } from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCreditButtonStrategy from './paypal-commerce-credit-button-strategy';\n\nconst createPayPalCommerceCreditButtonStrategy: CheckoutButtonStrategyFactory<\n PayPalCommerceCreditButtonStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceCreditButtonStrategy(\n paymentIntegrationService,\n createPayPalIntegrationService(paymentIntegrationService),\n );\n\nexport default toResolvableModule(createPayPalCommerceCreditButtonStrategy, [\n { id: 'paypalcommercecredit' },\n]);\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n ApproveCallbackPayload,\n PayPalButtonStyleOptions,\n PayPalBuyNowInitializeOptions,\n PayPalCommerceButtonsOptions,\n StyleButtonColor,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceVenmoButtonInitializeOptions, {\n WithPayPalCommerceVenmoButtonInitializeOptions,\n} from './paypal-commerce-venmo-button-initialize-options';\n\nexport default class PayPalCommerceVenmoButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceVenmoButtonInitializeOptions,\n ): Promise<void> {\n const { paypalcommercevenmo, containerId, methodId } = options;\n const { buyNowInitializeOptions, currencyCode: providedCurrencyCode } =\n paypalcommercevenmo || {};\n\n const isBuyNowFlow = !!buyNowInitializeOptions;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!paypalcommercevenmo) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.`,\n );\n }\n\n if (isBuyNowFlow && !providedCurrencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercevenmo.currencyCode\" argument is not provided.`,\n );\n }\n\n if (\n isBuyNowFlow &&\n typeof buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n ) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercevenmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n );\n }\n\n if (!isBuyNowFlow) {\n // Info: default checkout should not be loaded for BuyNow flow,\n // since there is no checkout session available for that.\n await this.paymentIntegrationService.loadDefaultCheckout();\n }\n\n // Info: we are using provided currency code for buy now cart,\n // because checkout session is not available before buy now cart creation,\n // hence application will throw an error on getCartOrThrow method call\n const currencyCode = isBuyNowFlow\n ? providedCurrencyCode\n : this.paymentIntegrationService.getState().getCartOrThrow().currency.code;\n\n await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n this.renderButton(containerId, methodId, paypalcommercevenmo);\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n methodId: string,\n paypalcommercevenmo: PayPalCommerceVenmoButtonInitializeOptions,\n ): void {\n const { buyNowInitializeOptions, style, onEligibilityFailure } = paypalcommercevenmo;\n\n const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n const fundingSource = paypalSdk.FUNDING.VENMO;\n\n const defaultCallbacks = {\n createOrder: () =>\n this.paypalCommerceIntegrationService.createOrder('paypalcommercevenmo'),\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n };\n\n const buyNowFlowCallbacks = {\n onClick: () => this.handleClick(buyNowInitializeOptions),\n onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n };\n\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource,\n style: this.getValidVenmoButtonStyles(style),\n ...defaultCallbacks,\n ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n };\n\n const paypalButtonRender = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n } else if (onEligibilityFailure && typeof onEligibilityFailure === 'function') {\n onEligibilityFailure();\n } else {\n this.paypalCommerceIntegrationService.removeElement(containerId);\n }\n }\n\n private getValidVenmoButtonStyles(style: PayPalButtonStyleOptions | undefined) {\n const validButtonStyle = this.paypalCommerceIntegrationService.getValidButtonStyle(style);\n\n if (validButtonStyle.color === StyleButtonColor.gold) {\n return {\n ...validButtonStyle,\n color: undefined,\n };\n }\n\n return validButtonStyle;\n }\n\n private async handleClick(\n buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n ): Promise<void> {\n if (buyNowInitializeOptions) {\n const buyNowCart = await this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(\n buyNowInitializeOptions,\n );\n\n await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n }\n }\n}\n","import {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceVenmoButtonStrategy from './paypal-commerce-venmo-button-strategy';\n\nconst createPayPalCommerceVenmoButtonStrategy: CheckoutButtonStrategyFactory<\n PayPalCommerceVenmoButtonStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceVenmoButtonStrategy(\n paymentIntegrationService,\n createPayPalCommerceIntegrationService(paymentIntegrationService),\n );\n\nexport default toResolvableModule(createPayPalCommerceVenmoButtonStrategy, [\n { id: 'paypalcommercevenmo' },\n]);\n","import { Response } from '@bigcommerce/request-sender';\nimport { isNil, omitBy } from 'lodash';\n\nimport {\n MissingDataError,\n MissingDataErrorType,\n PaymentMethod,\n PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n AddressRequestBody,\n BillingAddressResponse,\n GraphQLRequestOptions,\n WalletButtonIntegrationService,\n} from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport PayPalCommerceScriptLoader from './paypal-commerce-script-loader';\nimport {\n PayPalButtonStyleOptions,\n PayPalCommerceInitializationData,\n PayPalSDK,\n StyleButtonColor,\n StyleButtonLabel,\n StyleButtonShape,\n} from './paypal-commerce-types';\n\nexport default class PaypalCommerceWalletService {\n private paypalSdk?: PayPalSDK;\n\n constructor(\n private walletButtonIntegrationService: WalletButtonIntegrationService,\n private paypalCommerceScriptLoader: PayPalCommerceScriptLoader,\n ) {}\n\n /**\n *\n * PayPalSDK methods\n *\n */\n async loadPayPalSdk(\n paymentMethod: PaymentMethod<PayPalCommerceInitializationData>,\n providedCurrencyCode: string,\n initializesOnCheckoutPage?: boolean,\n forceLoad?: boolean,\n ): Promise<PayPalSDK | undefined> {\n this.paypalSdk = await this.paypalCommerceScriptLoader.getPayPalSDK(\n paymentMethod,\n providedCurrencyCode,\n undefined,\n initializesOnCheckoutPage,\n forceLoad,\n );\n\n return this.paypalSdk;\n }\n\n getPayPalSdkOrThrow(): PayPalSDK {\n if (!this.paypalSdk) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.paypalSdk;\n }\n\n /**\n *\n * Payment submitting and tokenizing methods\n *\n */\n async proxyTokenizationPayment(cartId: string, orderId?: string): Promise<void> {\n if (!orderId) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n const inputData = {\n paymentWalletData: {\n providerId: 'paypalcommerce',\n providerOrderId: orderId,\n },\n cartEntityId: cartId,\n queryParams: [\n { key: 'payment_type', value: 'paypal' },\n { key: 'action', value: 'set_external_checkout' },\n { key: 'provider', value: 'paypalcommerce' },\n ],\n };\n\n const response = await this.walletButtonIntegrationService.getRedirectToCheckoutUrl(\n inputData,\n );\n\n if (!response.body.redirectUrls?.externalCheckoutUrl) {\n throw new Error('Failed to redirection to checkout page');\n }\n\n window.location.assign(response.body.redirectUrls.externalCheckoutUrl);\n }\n\n async createPaymentOrderIntent(\n providerId: string,\n cartId: string,\n options?: GraphQLRequestOptions,\n ): Promise<string> {\n const inputData = {\n cartEntityId: cartId,\n paymentWalletEntityId: providerId,\n };\n const response = await this.walletButtonIntegrationService.createPaymentOrderIntent(\n inputData,\n options,\n );\n\n return response.body.orderId;\n }\n\n async addBillingAddress(\n cartId: string,\n address: AddressRequestBody,\n options?: GraphQLRequestOptions,\n ): Promise<Response<BillingAddressResponse>> {\n return this.walletButtonIntegrationService.addBillingAddress(cartId, address, options);\n }\n\n /**\n *\n * Buttons style methods\n *\n */\n getValidButtonStyle(style?: PayPalButtonStyleOptions): PayPalButtonStyleOptions {\n const { color, height, label, shape } = style || {};\n\n const validStyles = {\n color: color && StyleButtonColor[color] ? color : undefined,\n height: this.getValidHeight(height),\n label: label && StyleButtonLabel[label] ? label : undefined,\n shape: shape && StyleButtonShape[shape] ? shape : undefined,\n };\n\n return omitBy(validStyles, isNil);\n }\n\n getValidHeight(height?: number): number {\n const defaultHeight = 40;\n const minHeight = 25;\n const maxHeight = 55;\n\n if (!height || typeof height !== 'number') {\n return defaultHeight;\n }\n\n if (height > maxHeight) {\n return maxHeight;\n }\n\n if (height < minHeight) {\n return minHeight;\n }\n\n return height;\n }\n\n /**\n *\n * Utils methods\n *\n */\n removeElement(elementId?: string): void {\n const element = elementId && document.getElementById(elementId);\n\n if (element) {\n // For now this is a temporary solution, further removeElement method will be removed\n element.style.display = 'none';\n }\n }\n}\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PayPalCommerceInitializationData } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\nimport { AddressRequestBody } from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport {\n ApproveCallbackActions,\n ApproveCallbackPayload,\n PayPalCommerceButtonsOptions,\n PayPalOrderDetails,\n} from '../paypal-commerce-types';\nimport PaypalCommerceWalletService from '../paypal-commerce-wallet-service';\n\nimport { WithPayPalCommerceWalletInitializeOptions } from './paypal-commerce-wallet-initialize-options';\n\nexport default class PaypalCommerceWalletStrategy implements CheckoutButtonStrategy {\n constructor(private paypalCommerceHeadlessWalletButtonService: PaypalCommerceWalletService) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceWalletInitializeOptions,\n ): Promise<void> {\n const { paypalcommercepaypal, containerId, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!paypalcommercepaypal) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercepaypal\" argument is not provided.`,\n );\n }\n\n let parsedInitializationData: PaymentMethod<PayPalCommerceInitializationData>;\n\n try {\n parsedInitializationData = JSON.parse(atob(paypalcommercepaypal.initializationData));\n } catch {\n throw new InvalidArgumentError(\"Failed to parse payment method 'initializationData'.\");\n }\n\n await this.paypalCommerceHeadlessWalletButtonService.loadPayPalSdk(\n parsedInitializationData,\n paypalcommercepaypal.currency.code,\n false,\n );\n\n this.renderButton(containerId, 'paypalcommerce.paypal', paypalcommercepaypal.cartId);\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n private renderButton(containerId: string, methodId: string, cartId: string): void {\n const paypalSdk = this.paypalCommerceHeadlessWalletButtonService.getPayPalSdkOrThrow();\n\n const defaultCallbacks = {\n createOrder: () =>\n this.paypalCommerceHeadlessWalletButtonService.createPaymentOrderIntent(\n methodId,\n cartId,\n ),\n onApprove: async (\n { orderID }: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n ) => {\n const orderDetails = await actions.order.get();\n const billingAddress = this.mapOrderDetailsToBillingAddress(orderDetails);\n\n await this.paypalCommerceHeadlessWalletButtonService.addBillingAddress(\n cartId,\n billingAddress,\n );\n await this.paypalCommerceHeadlessWalletButtonService.proxyTokenizationPayment(\n cartId,\n orderID,\n );\n },\n };\n\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource: paypalSdk.FUNDING.PAYPAL,\n style: this.paypalCommerceHeadlessWalletButtonService.getValidButtonStyle(),\n ...defaultCallbacks,\n };\n\n const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${containerId}`);\n } else {\n this.paypalCommerceHeadlessWalletButtonService.removeElement(containerId);\n }\n }\n\n private mapOrderDetailsToBillingAddress(orderDetails: PayPalOrderDetails): AddressRequestBody {\n const { payer } = orderDetails;\n\n return {\n firstName: payer.name.given_name,\n lastName: payer.name.surname,\n company: '',\n address1: payer.address.address_line_1,\n address2: payer.address.address_line_2,\n city: payer.address.admin_area_2,\n email: payer.email_address,\n stateOrProvince: payer.address.admin_area_1 ?? '',\n stateOrProvinceCode: payer.address.admin_area_1 ?? '',\n countryCode: payer.address.country_code,\n postalCode: payer.address.postal_code,\n phone: payer.phone?.phone_number.national_number ?? '',\n shouldSaveAddress: false,\n };\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { toResolvableModule } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { WalletPaymentButtonStrategyFactory } from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport PayPalCommerceScriptLoader from '../paypal-commerce-script-loader';\nimport PaypalCommerceWalletService from '../paypal-commerce-wallet-service';\n\nimport PaypalCommerceWalletStrategy from './paypal-commerce-wallet-strategy';\n\nconst createPaypalCommerceWalletStrategy: WalletPaymentButtonStrategyFactory<\n PaypalCommerceWalletStrategy\n> = (walletButtonIntegrationService) =>\n new PaypalCommerceWalletStrategy(\n new PaypalCommerceWalletService(\n walletButtonIntegrationService,\n new PayPalCommerceScriptLoader(getScriptLoader()),\n ),\n );\n\nexport default toResolvableModule(createPaypalCommerceWalletStrategy, [\n { id: 'paypalcommercepaypal' },\n]);\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PayPalCommerceInitializationData } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\nimport { AddressRequestBody } from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport {\n ApproveCallbackActions,\n ApproveCallbackPayload,\n PayPalButtonStyleOptions,\n PayPalCommerceButtonsOptions,\n PayPalOrderDetails,\n} from '../paypal-commerce-types';\nimport PaypalCommerceWalletService from '../paypal-commerce-wallet-service';\n\nimport { WithPayPalCommerceCreditWalletInitializeOptions } from './paypal-commerce-credit-wallet-initialize-options';\n\nexport default class PayPalCommerceCreditWalletStrategy implements CheckoutButtonStrategy {\n constructor(private paypalCommerceHeadlessWalletButtonService: PaypalCommerceWalletService) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceCreditWalletInitializeOptions,\n ): Promise<void> {\n const { paypalcommercepaypalcredit, containerId, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.containerId\" argument is not provided.',\n );\n }\n\n if (!paypalcommercepaypalcredit) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercepaypalcredit\" argument is not provided.',\n );\n }\n\n let parsedInitializationData: PaymentMethod<PayPalCommerceInitializationData>;\n\n try {\n parsedInitializationData = JSON.parse(\n atob(paypalcommercepaypalcredit.initializationData),\n );\n } catch {\n throw new InvalidArgumentError(\"Failed to parse payment method 'initializationData'.\");\n }\n\n await this.paypalCommerceHeadlessWalletButtonService.loadPayPalSdk(\n parsedInitializationData,\n paypalcommercepaypalcredit.currency.code,\n false,\n );\n\n const buttonStyle =\n parsedInitializationData.initializationData?.paymentButtonStyles?.cartButtonStyles;\n\n this.renderButton(\n containerId,\n 'paypalcommerce.paypalcredit',\n paypalcommercepaypalcredit.cartId,\n buttonStyle,\n );\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n methodId: string,\n cartId: string,\n buttonStyle?: PayPalButtonStyleOptions,\n ): void {\n const paypalSdk = this.paypalCommerceHeadlessWalletButtonService.getPayPalSdkOrThrow();\n const fundingSources = [paypalSdk.FUNDING.PAYLATER, paypalSdk.FUNDING.CREDIT];\n\n const defaultCallbacks = {\n createOrder: () =>\n this.paypalCommerceHeadlessWalletButtonService.createPaymentOrderIntent(\n methodId,\n cartId,\n ),\n onApprove: async (\n { orderID }: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n ) => {\n const orderDetails = await actions.order.get();\n const billingAddress = this.mapOrderDetailsToBillingAddress(orderDetails);\n\n await this.paypalCommerceHeadlessWalletButtonService.addBillingAddress(\n cartId,\n billingAddress,\n );\n\n await this.paypalCommerceHeadlessWalletButtonService.proxyTokenizationPayment(\n cartId,\n orderID,\n );\n },\n };\n\n let hasRenderedSmartButton = false;\n\n fundingSources.forEach((fundingSource) => {\n if (!hasRenderedSmartButton) {\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource,\n style: this.paypalCommerceHeadlessWalletButtonService.getValidButtonStyle(\n buttonStyle,\n ),\n ...defaultCallbacks,\n };\n\n const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${containerId}`);\n hasRenderedSmartButton = true;\n }\n }\n });\n\n if (!hasRenderedSmartButton) {\n this.paypalCommerceHeadlessWalletButtonService.removeElement(containerId);\n }\n }\n\n private mapOrderDetailsToBillingAddress(orderDetails: PayPalOrderDetails): AddressRequestBody {\n const { payer } = orderDetails;\n\n return {\n firstName: payer.name.given_name,\n lastName: payer.name.surname,\n company: '',\n address1: payer.address.address_line_1,\n address2: payer.address.address_line_2,\n city: payer.address.admin_area_2,\n email: payer.email_address,\n stateOrProvince: payer.address.admin_area_1 ?? '',\n stateOrProvinceCode: payer.address.admin_area_1 ?? '',\n countryCode: payer.address.country_code,\n postalCode: payer.address.postal_code,\n phone: payer.phone?.phone_number.national_number ?? '',\n shouldSaveAddress: false,\n };\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { toResolvableModule } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { WalletPaymentButtonStrategyFactory } from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport PayPalCommerceScriptLoader from '../paypal-commerce-script-loader';\nimport PaypalCommerceWalletService from '../paypal-commerce-wallet-service';\n\nimport PayPalCommerceCreditWalletStrategy from './paypal-commerce-credit-wallet-strategy';\n\nconst createPayPalCommerceCreditWalletStrategy: WalletPaymentButtonStrategyFactory<\n PayPalCommerceCreditWalletStrategy\n> = (walletButtonIntegrationService) =>\n new PayPalCommerceCreditWalletStrategy(\n new PaypalCommerceWalletService(\n walletButtonIntegrationService,\n new PayPalCommerceScriptLoader(getScriptLoader()),\n ),\n );\n\nexport default toResolvableModule(createPayPalCommerceCreditWalletStrategy, [\n { id: 'paypalcommercepaypalcredit' },\n]);\n"],"names":["toResolvableModule","module","resolveIds","Object","assign","StandardError","Error","constructor","message","prototype","super","this","name","type","setPrototypeOf","__proto__","captureStackTrace","stack","PaymentMethodClientUnavailableError","MissingDataErrorType","MissingDataError","subtype","MissingBillingAddress","MissingCart","MissingConsignments","MissingCheckout","MissingCustomer","MissingCheckoutConfig","MissingOrderConfig","MissingOrder","MissingOrderId","MissingPayment","MissingPaymentToken","MissingPaymentMethod","MissingShippingAddress","getErrorMessage","LOADING_INDICATOR_STYLES","PAYPAL_SDK_SUPPORTED_LOCALES","transformLocaleToPayPalFormat","storeLanguage","locale","includes","language","region","split","toUpperCase","undefined","PayPalSdkScriptLoader","scriptLoader","window","getPayPalSDK","paymentMethod","currencyCode","initializesOnCheckoutPage","forceLoad","paypal","paypalSdkScriptConfig","getPayPalSdkScriptConfigOrThrow","loadPayPalSdk","getPayPalFastlaneSdk","sessionId","paypalFastlaneSdk","config","getPayPalFastlaneSdkConfiguration","getPayPalGooglePaySdk","paypalGooglePay","getPayPalGooglePaySdkScriptConfigOrThrow","getPayPalApmsSdk","paypalApms","getPayPalApmSdkConfiguration","getPayPalMessages","paypalMessages","paypalSdkMessagesConfig","getPayPalSdkMessagesConfiguration","_a","options","attributes","scriptOptions","transformConfig","scriptAttributes","scriptSrc","URLSearchParams","toString","loadScript","async","id","clientToken","initializationData","clientId","intent","merchantId","buyerCountry","attributionId","isVenmoEnabled","isHostedCheckoutEnabled","isPayPalCreditAvailable","isDeveloperModeApplicable","availableAlternativePaymentMethods","enabledAlternativePaymentMethods","isGooglePayEnabled","commit","shouldEnableCard","enableCardFunding","enableCreditFunding","enableVenmoFunding","googlePayComponent","cardFieldsComponent","disableFunding","filter","apm","enableFunding","length","components","currency","replace","enableAPMsFunding","disableAPMsFunding","transformedConfig","keys","forEach","key","value","Array","isArray","join","createPayPalSdkScriptLoader","__WEBPACK_EXTERNAL_MODULE__bigcommerce_script_loader_875b3e8f_getScriptLoader__","BuyNowCartCreationError","DEFAULT_RESPONSE","body","headers","status","RequestError","response","errors","CartSource","PayPalIntent","TDSecureVerificationMethod","TDSecureAuthenticationState","LiabilityShiftEnum","StyleButtonLabel","StyleButtonColor","StyleButtonShape","PayPalFastlaneAuthenticationState","NonInstantAlternativePaymentMethods","PayPalOrderStatus","PayPalIntegrationService","formPoster","paymentIntegrationService","paypalRequestSender","paypalSdkLoader","methodId","providedCurrencyCode","state","getState","getCartOrThrow","code","getPaymentMethodOrThrow","getLocale","paypalSdk","getPayPalSdkOrThrow","createBuyNowCartOrThrow","buyNowInitializeOptions","cartRequestBody","getBuyNowCartRequestBody","createBuyNowCart","error","createOrder","providerId","requestBody","cartId","orderId","createOrderCardFields","setupToken","updateOrder","isServerSideShippingCallbacksEnabled","cart","consignment","getConsignmentsOrThrow","availableShippingOptions","selectedShippingOption","_error","getOrderStatus","tokenizePayment","postForm","payment_type","action","provider","order_id","source","BuyNow","cart_id","submitPayment","gatewayId","paymentData","formattedPayload","vault_payment_instrument","set_as_default_stored_instrument","device_info","method_id","paypal_account","getShippingOptionOrThrow","selectedShippingOptionId","recommendedShippingOption","find","option","isRecommended","shippingOptionToSelect","shippingOptionId","getAddress","address","firstName","lastName","email","phone","company","address1","address2","city","countryCode","postalCode","stateOrProvince","stateOrProvinceCode","customFields","getBillingAddressFromOrderDetails","payer","given_name","surname","email_address","address_line_1","address_line_2","admin_area_2","country_code","postal_code","admin_area_1","_b","phone_number","national_number","getShippingAddressFromOrderDetails","orderDetails","purchase_units","full_name","shipping","getValidButtonStyle","style","color","height","label","shape","validStyles","getValidHeight","__WEBPACK_EXTERNAL_MODULE_lodash_omitBy__","__WEBPACK_EXTERNAL_MODULE_lodash_isNil__","removeElement","elementId","element","document","getElementById","display","INTERNAL_USE_ONLY","ContentType","content_type","SDK_VERSION_HEADERS","PayPalRequestSender","requestSender","url","Json","post","put","get","create_paypal_integration_service","getHost","__WEBPACK_EXTERNAL_MODULE__bigcommerce_form_poster_1cd9ef62_createFormPoster__","__WEBPACK_EXTERNAL_MODULE__bigcommerce_request_sender_01d1f546_createRequestSender__","host","DEFAULT_STYLES","size","backgroundColor","ROTATION_ANIMATION","LoadingIndicator","styles","containerStyles","defineAnimation","container","buildContainer","indicator","buildIndicator","appendChild","show","parentId","parent","visibility","opacity","hide","handleTransitionEnd","removeEventListener","addEventListener","createElement","bottom","left","width","position","right","top","transition","setStyleAttribute","borderRadius","border","borderColor","margin","transform","transformStyle","animation","attrs","k","setProperty","head","sheet","CSSStyleSheet","insertRule","InvalidArgumentError","PaymentArgumentInvalidError","invalidFields","PaymentMethodInvalidError","OrderFinalizationNotRequiredError","isHostedInstrumentLike","instrument","shouldSaveInstrument","shouldSetAsDefaultInstrument","isVaultedInstrument","Boolean","instrumentId","get_paypal_messages_styles_from_bnpl_config","messagesStyles","layout","logo","ratio","text","isBaseInstrument","PayPalCommercePaymentStrategy","paypalIntegrationService","payPalSdkScriptLoader","loadingIndicator","initialize","paypalcommerce","loadPaymentMethod","bannerContainerId","paypalBNPLConfiguration","console","bannerConfiguration","Messages","renderMessages","loadingIndicatorContainer","onInit","renderButton","shouldRenderPayPalButtonOnInitialization","execute","payload","payment","order","__rest","onError","isPayPalVaultedInstrumentPaymentData","paymentPayload","prepareVaultedInstrumentPaymentPayload","preparePaymentPayload","submitOrder","is_request_error","additional_action_required","isRedirectActionError","redirectUrl","data","redirect_url","Promise","location","isProviderError","_resolve","reject","paypalButton","close","handleError","finalize","deinitialize","resolve","paypalOrderId","shouldConfirmInstrument","isTrustedVaultingFlow","bigpay_token","token","paymentButtonStyles","checkoutPaymentButtonStyles","onRenderButton","onValidate","submitForm","containerId","getSmartButtonContainerId","buttonOptions","fundingSource","FUNDING","PAYPAL","onClick","_","actions","handleClick","onApprove","handleApprove","onCancel","toggleLoadingIndicator","Buttons","isEligible","render","orderID","fieldsValues","getFieldsValues","instruments","getInstruments","findInstrument","bigpayToken","trustedShippingAddress","isLoading","paypalMessagesOptions","amount","getCheckoutOrThrow","outstandingBalance","placement","isPaypalProviderError","_c","e","provider_error","create_paypal_commerce_payment_strategy","NotImplementedError","PayPalCommerceCreditPaymentStrategy","paypalcommercecredit","paypalOptions","paypal_commerce_credit_payment_strategy_rest","fundingSources","PAYLATER","CREDIT","hasRenderedSmartButton","create_paypal_commerce_credit_payment_strategy","PayPalCommerceVenmoPaymentStrategy","paypalcommercevenmo","paypal_commerce_venmo_payment_strategy_rest","VENMO","create_paypal_commerce_venmo_payment_strategy","paypal_commerce_constants_LOADING_INDICATOR_STYLES","TimeoutError","paypal_commerce_types_LiabilityShiftEnum","PayPalCommerceIntent","paypal_commerce_types_StyleButtonLabel","paypal_commerce_types_StyleButtonColor","paypal_commerce_types_StyleButtonShape","paypal_commerce_types_NonInstantAlternativePaymentMethods","paypal_commerce_types_PayPalOrderStatus","PayPalCommerceAlternativeMethodsPaymentStrategy","paypalCommerceIntegrationService","paypalSdkScriptLoader","pollingInterval","maxPollingIntervalTime","pollingTimer","stopPolling","__WEBPACK_EXTERNAL_MODULE_lodash_noop__","isOrderApprovedProcessing","paypalcommercealternativemethods","shouldRenderFields","features","getStoreConfigOrThrow","checkoutSettings","experimentName","fallbackValue","isExperimentEnabled","renderFields","paypal_commerce_alternative_methods_payment_strategy_rest","initializePollingMechanism","isNonInstantPaymentMethod","IDEAL","resetPollingMechanism","resolvePromise","rejectPromise","timeout","setTimeout","clearTimeout","orderStatus","isOrderApproved","Approved","isPollingError","PollingError","deinitializePollingMechanism","reinitializeStrategy","paypalAmpsSdk","getPaypalAmpsSdkOrThrow","buttonStyle","onInitButton","onCreateOrder","handleFailure","paypal_commerce_alternative_methods_payment_strategy_awaiter","OXXO","useStoreCredit","params","bcOrderId","getOrder","getBillingAddressOrThrow","apmFieldsContainer","apmFieldsStyles","fieldContainerElement","querySelector","innerHTML","fieldsOptions","fields","PaymentFields","create_paypal_commerce_alternative_methods_payment_strategy","gateway","UntrustedShippingCardVerificationType","CookieStorage","cookieKey","encodeURIComponent","cookie","firstIndex","indexOf","lastIndex","decodeURIComponent","substring","set","secure","cookieText","expires","path","domain","toUTCString","now","Date","minutes","setTime","getTime","remove","HostedFieldType","PaypalFastlaneUtils","initializePayPalFastlane","isTestModeEnabled","localStorage","setItem","paypalFastlane","defaultStyles","root","backgroundColorPrimary","Fastlane","getPayPalFastlaneOrThrow","lookupCustomerOrThrow","identity","lookupCustomerByEmail","triggerAuthenticationFlowOrThrow","customerContextId","triggerAuthenticationFlow","updateStorageSessionId","setDate","getDate","cookiesOption","removeStorageSessionId","getStorageSessionId","mapPayPalFastlaneProfileToBcCustomerData","authenticationResult","authenticationState","profileData","paypalBillingAddress","card","paymentSource","billingAddress","paypalShippingAddress","shippingAddress","paypalProfileName","paypalInstrument","mapPayPalToBcAddress","phoneNumber","mapPayPalToBcInstrument","addresses","filterAddresses","UNRECOGNIZED","brand","expiry","lastDigits","expiryYear","expiryMonth","defaultInstrument","iin","last4","method","untrustedShippingCardVerificationMode","PAN","mapBcToPayPalAddress","addressLine1","addressLine2","adminArea1","adminArea2","profileName","fullName","phoneData","nationalNumber","country","reduce","customerAddresses","currentAddress","some","customerAddress","isEqualAddresses","firstAddress","secondAddress","__WEBPACK_EXTERNAL_MODULE_lodash_isEqual__","normalizeAddress","__WEBPACK_EXTERNAL_MODULE_lodash_omit__","createPaypalFastlaneUtils","hosted_field_type","isCreditCardFormFields","CardNumber","CardName","CardExpiry","isCreditCardVaultedFormFields","CardNumberVerification","CardCodeVerification","CardExpiryVerification","PaymentMethodFailedError","NotInitializedErrorType","NotInitializedError","CustomerNotInitialized","PaymentNotInitialized","ShippingNotInitialized","SpamProtectionNotInitialized","not_initialized_error_getErrorMessage","PaymentInvalidFormError","details","PayPalCommerceCreditCardsPaymentStrategy","paypalFastlaneUtils","paypalcommercecreditcards","paypalCommerceInitializationOptions","form","onCreditCardFieldsRenderingError","onLoadComplete","hostedFormOptions","isCreditCardForm","isCreditCardVaultedForm","hasUndefinedValues","initializeFields","shouldInitializePayPalFastlane","initializePayPalFastlaneOrThrow","paypal_commerce_credit_cards_payment_strategy_rest","executionPaymentData","validateHostedFormOrThrow","submitHostedForm","getInstrumentParams","returnedOrderId","submitPaymentPayload","returnedVaultedToken","cvvField","expiryField","numberField","_d","nameField","nonce","verification_nonce","card_with_order","formOptions","executeCallback","getExecuteCallback","cardFieldsConfig","getInputStyles","vaultSetupToken","liabilityShift","No","Unknown","inputEvents","onChange","event","onChangeHandler","onFocus","onFocusHandler","onBlur","onBlurHandler","onInputSubmitRequest","cardFields","CardFields","stylizeInputContainers","renderVaultedFields","createVaultSetupTokenCallback","createOrderCallback","createVaultSetupToken","paypal_commerce_credit_cards_payment_strategy_awaiter","getCardFieldsOrThrow","cardCode","CVVField","placeholder","cardExpiry","ExpiryField","cardName","NameField","cardNumber","NumberField","cardCodeVerification","cardExpiryVerification","cardNumberVerification","getFieldTypeByEmittedField","emittedBy","fieldType","mapFieldType","submitConfig","submit","cardFieldsState","then","validationData","getValidityData","isValid","call","mapValidationErrors","updatedFields","cardNameField","fieldsKeys","every","fieldsErrors","getInvalidErrorByFieldType","CardCode","validationErrors","commonStyles","default","fontSize","fontFamily","fontWeight","outline","padding","input","values","boxShadow","background","marginBottom","marginLeft","onEnter","paymentProviderCustomer","getPaymentProviderCustomer","paypalCommercePaymentProviderCustomer","customer","isAcceleratedCheckoutEnabled","isPayPalCommerceAnalyticsV2Enabled","connectClientToken","payPalFastlaneSdk","create_paypal_commerce_credit_cards_payment_strategy","PaypalCommerceRatepayPaymentStrategy","paypalCommerceService","paypalcommerceratepay","legalTextContainer","loadingContainerId","createFraudNetScript","loadFraudnetConfig","renderLegalText","paypal_commerce_ratepay_payment_strategy_rest","metadataId","guid","ratepayBirthDate","ratepayPhoneNumber","ratepayPhoneCountryCode","rate_pay","birth_date","normalizeDate","fraudNetScript","querySelectorAll","fraudNetConfig","legalTextContainerElement","date","formattedDate","formatDate","formattedMonth","getMonth","getFullYear","legalTextContainerElementId","legalTextContainerId","buttonContainerId","buttonContainer","buttonContainerParent","parentNode","setAttribute","prepend","ratePayButton","Legal","PAY_UPON_INVOICE","testMode","scriptElement","generateGUID","f","s","sandbox","JSON","stringify","i","Math","floor","characters","random","script","src","useMetadata","PollingStop","create_paypal_commerce_ratepay_payment_strategy","PayPalCommerceRequestSender","isInvalidStyleOption","styleOption","getFastlaneStyles","styleSettings","uiStyles","fastlaneStyles","toggle","textBody","textCaption","caption","branding","cleanUpFastlaneStyles","fastlaneRootSettingsBackgroundColor","errorColor","fastlaneRootSettingsErrorColor","fastlaneRootSettingsFontFamily","fontSizeBase","fastlaneRootSettingsFontSize","fastlaneRootSettingsPadding","_e","primaryColor","fastlaneRootSettingsPrimaryColor","_f","fastlaneInputSettingsBorderRadius","_g","fastlaneInputSettingsBorderColor","_h","focusBorderColor","fastlaneInputSettingsFocusBorderBase","_j","fastlaneInputSettingsBackgroundColor","_k","borderWidth","fastlaneInputSettingsBorderWidth","_l","textColorBase","fastlaneInputSettingsTextColorBase","_m","colorPrimary","fastlaneToggleSettingsColorPrimary","_o","colorSecondary","fastlaneToggleSettingsColorSecondary","_p","fastlaneTextBodySettingsColor","_r","_q","fastlaneTextBodySettingsFontSize","_t","_s","fastlaneTextCaptionSettingsColor","_v","_u","fastlaneTextCaptionSettingsFontSize","_x","_w","fastlaneBrandingSettings","mergeFastlaneStyles","isPayPalFastlaneCustomer","PaypalCommerceFastlanePaymentStrategy","paypalCommerceRequestSender","paypalcommercefastlane","isFastlaneStylingEnabled","threeDSVerificationMethod","shouldRunAuthenticationFlow","runPayPalAuthenticationFlowOrThrow","initializePayPalPaymentComponent","renderPayPalPaymentComponent","handlePayPalStoredInstrumentChange","orderRequest","paypal_commerce_fastlane_payment_strategy_rest","isVaultedFlow","isPaypalFastlaneRequestError","invalidRequestError","translationKey","getCustomerOrThrow","paypalFastlaneCustomer","paypalFastlaneSessionId","isGuest","CANCELED","getCustomer","getBillingAddress","customerEmail","updatePaymentProviderCustomer","trim","cardComponentOptions","cardholderName","prefill","enabled","paypalComponentMethods","FastlaneCardComponent","getPayPalComponentMethodsOrThrow","is3dsEnabled","get3DSNonce","paypal_fastlane_token","getPaymentToken","fastlaneToken","getOrderOrThrow","checkoutUrl","links","checkoutLink","threeDomainSecureComponent","ThreeDomainSecureClient","threeDomainSecureParameters","orderAmount","toFixed","threeDSRequested","Always","transactionContext","experience_context","return_url","cancel_url","isThreeDomainSecureEligible","threeDSNonce","Errored","Cancelled","Succeeded","Yes","Possible","paypalAxoSdk","selectionChanged","selectedCard","profile","showCardSelector","selectedInstrument","create_paypal_commerce_fastlane_payment_strategy","paypal_button_creation_service","createPayPalButton","onPaymentComplete","hostedCheckoutCallbacks","onShippingAddressChange","onShippingOptionsChange","onHostedCheckoutApprove","paypal_button_creation_service_awaiter","buyNowCart","loadCheckout","onComplete","hasPhysicalItems","lineItems","physicalItems","updateBillingAddress","updateShippingAddress","shippingOption","selectShippingOption","PayPalCommerceCustomerStrategy","paypalButtonCreationService","getPaymentMethod","signIn","credentials","signInCustomer","signOut","signOutCustomer","executePaymentMethodCheckout","continueWithCheckoutCallback","checkoutTopButtonStyles","create_paypal_commerce_customer_strategy","PayPalCommerceIntegrationService","paypalCommerceScriptLoader","PayPalCommerceScriptLoader","loadPayPalSDK","paypalSdkScriptConfig_1","create_paypal_commerce_integration_service","PayPalCommerceCreditCustomerStrategy","paypalCommerceCredit","defaultCallbacks","buttonRenderOptions","create_paypal_commerce_credit_customer_strategy","PayPalCommerceVenmoCustomerStrategy","paypalButtonRender","create_paypal_commerce_venmo_customer_strategy","PayPalCommerceFastlaneCustomerStrategy","checkoutPaymentMethodExecuted","isAuthenticationFlowCanceled","updateCustomerDataState","updatedState","isFastlaneShippingOptionAutoSelectEnabled","getConsignments","firstShippingOption","create_paypal_commerce_fastlane_customer_strategy","PayPalCommerceButtonStrategy","isBuyNowFlow","loadDefaultCheckout","onEligibilityFailure","buyNowFlowCallbacks","create_paypal_commerce_button_strategy","PayPalCommerceCreditButtonStrategy","create_paypal_commerce_credit_button_strategy","PayPalCommerceVenmoButtonStrategy","getValidVenmoButtonStyles","validButtonStyle","gold","create_paypal_commerce_venmo_button_strategy","PaypalCommerceWalletService","walletButtonIntegrationService","proxyTokenizationPayment","inputData","paymentWalletData","providerOrderId","cartEntityId","queryParams","getRedirectToCheckoutUrl","redirectUrls","externalCheckoutUrl","createPaymentOrderIntent","paymentWalletEntityId","addBillingAddress","PaypalCommerceWalletStrategy","paypalCommerceHeadlessWalletButtonService","paypalcommercepaypal","parsedInitializationData","parse","atob","actions_1","paypal_commerce_wallet_strategy_awaiter","mapOrderDetailsToBillingAddress","shouldSaveAddress","create_paypal_commerce_wallet_strategy","PayPalCommerceCreditWalletStrategy","paypalcommercepaypalcredit","cartButtonStyles","paypal_commerce_credit_wallet_strategy_awaiter","create_paypal_commerce_credit_wallet_strategy"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"integrations/paypal-commerce.js","mappings":"uQAEe,SAASA,EACpBC,EACAC,GAEA,OAAOC,OAAOC,OAAOH,EAAQ,CAAEC,cACnC,CCAe,MAAeG,UAAsBC,MAIhD,WAAAC,CAAYC,GCXD,IAAqCC,EDY5CC,MAAMF,GAAW,qCAJrBG,KAAAC,KAAO,gBACPD,KAAAE,KAAO,WCTyCJ,aDcZA,UCbhCN,OAAOW,eACPX,OAAOW,eDYQH,KCZeF,GDYfE,KCVRI,UAAYN,EDYoB,mBAA5BH,MAAMU,kBACbV,MAAMU,kBAAkBL,iBAExBA,KAAKM,MAAQ,IAAIX,MAAMK,KAAKH,SAASS,KAE7C,EEfW,MAAMC,UAA4Cb,EAC7D,WAAAE,CAAYC,GACRE,MACIF,GACI,uGAGRG,KAAKC,KAAO,sCACZD,KAAKE,KAAO,mCAChB,ECbJ,IAAYM,GAAZ,SAAYA,GACRA,EAAAA,EAAA,iDACAA,EAAAA,EAAA,6BACAA,EAAAA,EAAA,qCACAA,EAAAA,EAAA,6CACAA,EAAAA,EAAA,qCACAA,EAAAA,EAAA,iDACAA,EAAAA,EAAA,+BACAA,EAAAA,EAAA,2CACAA,EAAAA,EAAA,mCACAA,EAAAA,EAAA,mCACAA,EAAAA,EAAA,wCACAA,EAAAA,EAAA,wDACAA,EAAAA,EAAA,gDACAA,EAAAA,EAAA,0DACAA,EAAAA,EAAA,gDACAA,EAAAA,EAAA,8CACAA,EAAAA,EAAA,mDACH,CAlBD,CAAYA,IAAAA,EAAoB,KAyBjB,MAAMC,UAAyBf,EAC1C,WAAAE,CAAmBc,GACfX,MAOR,SAAyBG,GACrB,OAAQA,GACJ,KAAKM,EAAqBG,sBACtB,MAAO,iEAEX,KAAKH,EAAqBI,YACtB,MAAO,sDAEX,KAAKJ,EAAqBK,oBACtB,MAAO,8DAEX,KAAKL,EAAqBM,gBACtB,MAAO,0DAEX,KAAKN,EAAqBO,gBACtB,MAAO,0DAEX,KAAKP,EAAqBQ,sBAC1B,KAAKR,EAAqBS,mBACtB,MAAO,+DAEX,KAAKT,EAAqBU,aACtB,MAAO,uDAEX,KAAKV,EAAqBW,eACtB,MAAO,0EAEX,KAAKX,EAAqBY,eACtB,MAAO,yDAEX,KAAKZ,EAAqBa,oBACtB,MAAO,+EAEX,KAAKb,EAAqBc,qBACtB,MAAO,2FAEX,KAAKd,EAAqBe,uBACtB,MAAO,kEAEX,QACI,MAAO,8DAEnB,CAjDcC,CAAgBd,IADPV,KAAAU,QAAAA,EAGfV,KAAKC,KAAO,mBACZD,KAAKE,KAAO,cAChB,ECjCG,MAAMuB,EAA2B,CACpC,mBAAoB,qBACpB,UAAW,QAOFC,EAA+B,CACxC,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SC3mBW,SAASC,EACpBC,GAEA,IAAKA,EACD,OAGJ,IAAIC,EAEJ,GAAID,EAAcE,SAAS,KAAM,CAC7B,MAAOC,EAAUC,GAAUJ,EAAcK,MAAM,KAE/CJ,EAAS,GAAGE,KAAYC,EAAOE,eACnC,MACIL,EAAS,GAAGD,KAAiBA,EAAcM,gBAG/C,OAAOR,EAA6BI,SAASD,GAAUA,OAASM,CACpE,uSCJe,MAAMC,EAGjB,WAAAxC,CAAoByC,GAAArC,KAAAqC,aAAAA,EAChBrC,KAAKsC,OAASA,MAClB,CAEM,YAAAC,CACFC,EACAC,EACAb,EACAc,EACAC,2CAEA,IAAK3C,KAAKsC,OAAOM,QAAUD,EAAW,CAClC,MAAME,EAAwB7C,KAAK8C,gCAC/BN,EACAC,EACAb,EACAc,GAKJ,SAFM1C,KAAK+C,cAAcF,IAEpB7C,KAAKsC,OAAOM,OACb,MAAM,IAAIrC,CAElB,CAEA,OAAOP,KAAKsC,OAAOM,MACvB,GAEM,oBAAAI,CACFR,EACAC,EACAQ,EACArB,2CAEA,IAAK5B,KAAKsC,OAAOY,kBAAmB,CAChC,MAAMC,EAASnD,KAAKoD,kCAChBZ,EACAC,EACAQ,EACArB,GAKJ,SAFM5B,KAAK+C,cAAcI,IAEpBnD,KAAKsC,OAAOY,kBACb,MAAM,IAAI3C,CAElB,CAEA,OAAOP,KAAKsC,OAAOY,iBACvB,GAEM,qBAAAG,CACFb,EACAC,EACAb,EACAc,EACAC,2CAEA,IAAK3C,KAAKsC,OAAOgB,iBAAmBX,EAAW,CAC3C,MAAME,EAAwB7C,KAAKuD,yCAC/Bf,EACAC,EACAb,EACAc,SAGE1C,KAAK+C,cAAcF,EAC7B,CAEA,IAAK7C,KAAKsC,OAAOgB,gBACb,MAAM,IAAI/C,EAGd,OAAOP,KAAKsC,OAAOgB,eACvB,GAEM,gBAAAE,CACFhB,EACAC,EACAb,2CAEA,IAAK5B,KAAKsC,OAAOmB,WAAY,CACzB,MAAMN,EAASnD,KAAK0D,6BAChBlB,EACAC,EACAb,GAKJ,SAFM5B,KAAK+C,cAAcI,IAEpBnD,KAAKsC,OAAOmB,WACb,MAAM,IAAIlD,CAElB,CAEA,OAAOP,KAAKsC,OAAOmB,UACvB,GAEM,iBAAAE,CACFnB,EACAC,EACAb,2CAEA,IAAK5B,KAAKsC,OAAOsB,eAAgB,CAC7B,MAAMC,EAA0B7D,KAAK8D,kCACjCtB,EACAC,EACAb,SAGE5B,KAAK+C,cAAcc,EAC7B,CAEA,IAAK7D,KAAKsC,OAAOsB,eACb,MAAM,IAAIrD,EAGd,OAAOP,KAAKsC,OAAOsB,cACvB,GAQc,aAAAb,CAAagB,6CAACC,QAAEA,EAAOC,WAAEA,IACnC,MAAMC,EAAgBlE,KAAKmE,gBAA4CH,GACjEI,EAAmBpE,KAAKmE,gBAA+CF,GAIvEI,EAAY,iCADE,IAAIC,gBAAgBJ,GAAeK,mBAGjDvE,KAAKqC,aAAamC,WAAWH,EAAW,CAC1CI,OAAO,EACPR,WAAYG,GAEpB,GAOQ,+BAAAtB,CACJN,EACAC,EACAb,EACAc,GAA4B,GAE5B,MAAMgC,GAAEA,EAAEC,YAAEA,EAAWC,mBAAEA,GAAuBpC,EAEhD,IAAKoC,IAAuBA,EAAmBC,SAC3C,MAAM,IAAIpE,EAAiBD,EAAqBc,sBAGpD,MAAMwD,OACFA,EAAMD,SACNA,EAAQE,WACRA,EAAUC,aACVA,EAAYC,cACZA,EAAaC,eACbA,EAAcC,wBACdA,EAAuBC,wBACvBA,EAAuBC,0BACvBA,EAAyBC,mCACzBA,EAAqC,GAAEC,iCACvCA,EAAmC,GAAEC,mBACrCA,GACAZ,EAEEa,EAASN,GAA2BzC,EAEpCgD,EACK,8BAAPhB,GAA6C,qCAAPA,EACpCiB,EAAoBD,EAAmB,CAAC,QAAU,GAGlDE,EAAsBR,EAA0B,CAAC,SAAU,YAAc,GAGzES,EAAqBX,EAAiB,CAAC,SAAW,GAKlDY,EAA0CN,EAAqB,CAAC,aAAe,GAC/EO,EAA2CrD,EAC3C,CAAC,eACD,GACAsD,EAA8B,IAdRN,EAA8B,GAAX,CAAC,WAGlBN,EAAmD,GAAzB,CAAC,SAAU,eAGtCF,EAA6B,GAAZ,CAAC,YACpBI,EAAmCW,OACzDC,IAAiBX,EAAiCzD,SAASoE,KAY1DC,EAA6B,IAC5BR,KACAC,KACAC,KACAN,GAGD1D,EAASF,EAA8BC,GAE7C,MAAO,CACHoC,QAAOxE,OAAAC,OAAAD,OAAAC,OAAA,CACH,YAAaoF,EACb,cAAeE,EACf,iBAAkBoB,EAAcC,OAAS,EAAID,OAAgBhE,EAC7D,kBAAmB6D,EAAeI,OAAS,EAAIJ,OAAiB7D,EAChEsD,SACAY,WAAY,CACR,UACA,gBACA,iBACA,WACGP,KACAC,GAEPO,SAAU7D,EACVqC,UACIO,GAA6B,CAAE,gBAAiBL,IAChDnD,GAAU,CAAEA,WAEpBoC,WAAY,CACR,8BAA+BgB,EAC/B,oBAAqBN,GAGjC,CAEQ,iCAAAvB,CACJZ,EACAC,EACAQ,EACArB,GAEA,MAAM+C,YAAEA,EAAWC,mBAAEA,GAAuBpC,EAE5C,IAAKoC,IAAuBA,EAAmBC,SAC3C,MAAM,IAAIpE,EAAiBD,EAAqBc,sBAGpD,MAAMwD,OAAEA,EAAMD,SAAEA,EAAQE,WAAEA,EAAUE,cAAEA,GAAkBL,EAElD/C,EAASF,EAA8BC,GAE7C,MAAO,CACHoC,QAAOxE,OAAAC,OAAAD,OAAAC,OAAA,CACH,YAAaoF,EACb,cAAeE,EACfU,QAAQ,EACRY,WAAY,CACR,WACA,UACA,iBACA,gBACA,uBAEJC,SAAU7D,GACNZ,GAAU,CAAEA,WAAS,CACzBiD,WAEJb,WAAY,CACR,0BAA2BhB,EAAUsD,QAAQ,KAAM,IACnD,iBAAkB,oBAClB,8BAA+BtB,EAC/B,wBAAyBN,GAGrC,CAEQ,wCAAApB,CACJf,EACAC,EACAb,EACAc,GAA4B,GAE5B,MAAMiC,YAAEA,EAAWC,mBAAEA,GAAuBpC,EAE5C,IAAKoC,IAAuBA,EAAmBC,SAC3C,MAAM,IAAIpE,EAAiBD,EAAqBc,sBAGpD,MAAMwD,OACFA,EAAMD,SACNA,EAAQE,WACRA,EAAUC,aACVA,EAAYC,cACZA,EAAaE,wBACbA,EAAuBE,0BACvBA,GACAT,EAEEa,EAASN,GAA2BzC,EAEpCb,EAASF,EAA8BC,GAE7C,MAAO,CACHoC,QAAOxE,OAAAC,OAAAD,OAAAC,OAAA,CACH,YAAaoF,EACb,cAAeE,EACfU,SACAY,WAAY,CAAC,aACbC,SAAU7D,EACVqC,UACIO,GAA6B,CAAE,gBAAiBL,IAChDnD,GAAU,CAAEA,WAEpBoC,WAAY,CACR,8BAA+BgB,EAC/B,oBAAqBN,EACrB,iBAAkB,mBAG9B,CAEQ,4BAAAjB,CACJlB,EACAC,EACAb,GAEA,MAAMgD,mBAAEA,GAAuBpC,EAE/B,IAAKoC,IAAuBA,EAAmBC,SAC3C,MAAM,IAAIpE,EAAiBD,EAAqBc,sBAGpD,MAAMwD,OACFA,EAAMD,SACNA,EAAQE,WACRA,EAAUC,aACVA,EAAYC,cACZA,EAAaI,0BACbA,EAAyBC,mCACzBA,EAAqC,GAAEC,iCACvCA,EAAmC,IACnCX,EAEE4B,EAAoBjB,EACpBkB,EAAqBnB,EAAmCW,OACzDC,IAAiBX,EAAiCzD,SAASoE,IAG1DrE,EAASF,EAA8BC,GAE7C,MAAO,CACHoC,QAAOxE,OAAAC,OAAAD,OAAAC,OAAA,CACH,YAAaoF,EACb,cAAeE,EACf,iBAAkByB,EAAkBJ,OAAS,EAAII,OAAoBrE,EACrE,kBAAmBsE,EAAmBL,OAAS,EAAIK,OAAqBtE,EACxEsD,QAAQ,EACRY,WAAY,CAAC,UAAW,kBACxBC,SAAU7D,EACVqC,UACIO,GAA6B,CAAE,gBAAiBL,IAChDnD,GAAU,CAAEA,WAEpBoC,WAAY,CACR,8BAA+BgB,EAC/B,iBAAkB,cAG9B,CAEQ,iCAAAnB,CACJtB,EACAC,EACAb,GAEA,MAAMgD,mBAAEA,GAAuBpC,EAE/B,IAAKoC,IAAuBA,EAAmBC,SAC3C,MAAM,IAAIpE,EAAiBD,EAAqBc,sBAGpD,MAAMuD,SAAEA,EAAQE,WAAEA,EAAUE,cAAEA,EAAaI,0BAAEA,EAAyBL,aAAEA,GACpEJ,EAEE/C,EAASF,EAA8BC,GAE7C,MAAO,CACHoC,QAAOxE,OAAAC,OAAAD,OAAAC,OAAA,CACH,YAAaoF,EACb,cAAeE,EACfsB,WAAY,CAAC,YACbC,SAAU7D,GACN4C,GAA6B,CAAE,gBAAiBL,IAChDnD,GAAU,CAAEA,WAEpBoC,WAAY,CACR,iBAAkB,iBAClB,8BAA+BgB,GAG3C,CAOQ,eAAAd,CAAmDhB,GACvD,IAAIuD,EAAoB,GAsBxB,OApBalH,OAAOmH,KAAKxD,GAEpByD,QAASC,IACV,MAAMC,EAAQ3D,EAAO0D,GAGjBC,SAEU,KAAVA,GACCC,MAAMC,QAAQF,IAA2B,IAAjBA,EAAMV,SAKnCM,EAAiBlH,OAAAC,OAAAD,OAAAC,OAAA,GACViH,GAAiB,CACpBG,CAACA,GAAME,MAAMC,QAAQF,GAASA,EAAMG,KAAK,KAAOH,OAIjDJ,CACX,ECpcW,SAASQ,IACpB,OAAO,IAAI9E,EAAsB+E,IACrC,CCAe,MAAMC,UAAgC1H,EACjD,WAAAE,CAAYC,GACRE,MACIF,GACI,kGAGRG,KAAKC,KAAO,0BACZD,KAAKE,KAAO,6BAChB,ECXJ,MAAMmH,EAAmB,CACrBC,KAAM,GACNC,QAAS,GACTC,OAAQ,GAOG,MAAMC,UAAkC/H,EAMnD,WAAAE,CACI8H,GACA7H,QACIA,EAAO8H,OACPA,GAIA,IAEJ,MAAML,KAAEA,EAAIC,QAAEA,EAAOC,OAAEA,GAAWE,GAAYL,EAE9CtH,MAAMF,GAAW,qCAEjBG,KAAKC,KAAO,eACZD,KAAKE,KAAO,UACZF,KAAKsH,KAAOA,EACZtH,KAAKuH,QAAUA,EACfvH,KAAKwH,OAASA,EACdxH,KAAK2H,OAASA,GAAU,EAC5B,ECxCJ,IAAYC,ECkHAC,EAsJAC,EAIAC,EAMAC,EA+OAC,EAQAC,EAQAC,EAkOAC,EAuNAC,EA6BAC,GDv+BZ,SAAYV,GACRA,EAAA,iBACAA,EAAA,qBACH,CAHD,CAAYA,IAAAA,EAAU,KCkHtB,SAAYC,GACRA,EAAA,sBACAA,EAAA,iBACH,CAHD,CAAYA,IAAAA,EAAY,KAsJxB,SAAYC,GACRA,EAAA,mBACH,CAFD,CAAYA,IAAAA,EAA0B,KAItC,SAAYC,GACRA,EAAA,sBACAA,EAAA,sBACAA,EAAA,iBACH,CAJD,CAAYA,IAAAA,EAA2B,KAMvC,SAAYC,GACRA,EAAA,oBACAA,EAAA,QACAA,EAAA,kBACAA,EAAA,SACH,CALD,CAAYA,IAAAA,EAAkB,KA+O9B,SAAYC,GACRA,EAAA,gBACAA,EAAA,oBACAA,EAAA,gBACAA,EAAA,UACAA,EAAA,yBACH,CAND,CAAYA,IAAAA,EAAgB,KAQ5B,SAAYC,GACRA,EAAA,YACAA,EAAA,YACAA,EAAA,gBACAA,EAAA,cACAA,EAAA,aACH,CAND,CAAYA,IAAAA,EAAgB,KAQ5B,SAAYC,GACRA,EAAA,YACAA,EAAA,WACH,CAHD,CAAYA,IAAAA,EAAgB,KAkO5B,SAAYC,GACRA,EAAA,sBACAA,EAAA,gBACAA,EAAA,oBACAA,EAAA,2BACH,CALD,CAAYA,IAAAA,EAAiC,KAuN7C,SAAYC,GACRA,EAAA,WACH,CAFD,CAAYA,IAAAA,EAAmC,KA6B/C,SAAYC,GACRA,EAAA,oBACAA,EAAA,kBACAA,EAAA,4CACAA,EAAA,2BACAA,EAAA,4BACH,CAND,CAAYA,IAAAA,EAAiB,2SCt8Bd,MAAMC,EAGjB,WAAA3I,CACY4I,EACAC,EACAC,EACAC,GAHA3I,KAAAwI,WAAAA,EACAxI,KAAAyI,0BAAAA,EACAzI,KAAA0I,oBAAAA,EACA1I,KAAA2I,gBAAAA,CACT,CAOG,aAAA5F,CACF6F,EACAC,EACAnG,EACAC,2CAEA,MAAMmG,EAAQ9I,KAAKyI,0BAA0BM,WACvCtG,EAAeoG,GAAwBC,EAAME,iBAAiB1C,SAAS2C,KACvEzG,EAAgBsG,EAAMI,wBAAkDN,GACxEhH,EAAgBkH,EAAMK,YAU5B,OARAnJ,KAAKoJ,gBAAkBpJ,KAAK2I,gBAAgBpG,aACxCC,EACAC,EACAb,EACAc,EACAC,GAGG3C,KAAKoJ,SAChB,GAEA,mBAAAC,GACI,IAAKrJ,KAAKoJ,UACN,MAAM,IAAI7I,EAGd,OAAOP,KAAKoJ,SAChB,CAOM,uBAAAE,CACFC,2CAEA,MAAMC,EAAkBD,EAAwBE,2BAEhD,IAAKD,EACD,MAAM,IAAI/I,EAAiBD,EAAqBI,aAGpD,IACI,aAAaZ,KAAKyI,0BAA0BiB,iBAAiBF,EACjE,CAAE,MAAOG,GACL,MAAM,IAAIvC,CACd,CACJ,GAOM,WAAAwC,CACFC,EACAC,2CAEA,MAAMC,EAAS/J,KAAKyI,0BAA0BM,WAAWC,iBAAiBtE,IAEpEsF,QAAEA,SAAkBhK,KAAK0I,oBAAoBkB,YAAYC,EAAUrK,OAAAC,OAAA,CACrEsK,UACGD,IAGP,OAAOE,CACX,GAEM,qBAAAC,CACFJ,EACAC,2CAEA,MAAMC,EAAS/J,KAAKyI,0BAA0BM,WAAWC,iBAAiBtE,IAEpEsF,QAAEA,EAAOE,WAAEA,SAAqBlK,KAAK0I,oBAAoBkB,YAAYC,EAAUrK,OAAAC,OAAA,CACjFsK,UACGD,IAGP,OAAAtK,OAAAC,OAAA,CAASuK,WAAaE,EAAa,CAAEA,cAAe,GACxD,GAEM,WAAAC,CACFN,EACAjB,EACAoB,EACAI,2CAEA,MAAMtB,EAAQ9I,KAAKyI,0BAA0BM,WACvCsB,EAAOvB,EAAME,iBACnB,IAAIsB,EAECF,IACDE,EAAcxB,EAAMyB,yBAAyB,IAGjD,UACUvK,KAAK0I,oBAAoByB,YAAYN,EAAUrK,OAAAC,OAAAD,OAAAC,OAAA,CACjD+K,yBAA0BJ,EACpB,GACAE,aAAW,EAAXA,EAAaE,yBACnBT,OAAQM,EAAK3F,GACb+F,uBAAwBL,EAClB,KACAE,aAAW,EAAXA,EAAaG,wBACf7B,EAAW,CAAEA,YAAa,IAC1BoB,EAAU,CAAEA,WAAY,IAEpC,CAAE,MAAOU,GACL,MAAM,IAAIjD,CACd,CACJ,GAEM,cAAAkD,CAAe/B,EAAkB5E,2CACnC,IACI,MAAMwD,OAAEA,SAAiBxH,KAAK0I,oBAAoBiC,eAAe/B,EAAU5E,GAE3E,OAAOwD,CACX,CAAE,MAAOkD,GACL,MAAM,IAAIjD,CACd,CACJ,GAOA,eAAAmD,CAAgBhC,EAAkBoB,GAC9B,MAAMK,EAAOrK,KAAKyI,0BAA0BM,WAAWC,iBAEvD,IAAKgB,EACD,MAAM,IAAIvJ,EAAiBD,EAAqBW,gBAGpD,OAAOnB,KAAKwI,WAAWqC,SAAS,gBAAerL,OAAAC,OAAA,CAC3CqL,aAAc,SACdC,OAAQ,wBACRC,SAAUpC,EACVqC,SAAUjB,GACNK,EAAKa,SAAWtD,EAAWuD,QAAU,CAAEC,QAASf,EAAK3F,KAEjE,CAEM,aAAA2G,CAAczC,EAAkBoB,EAAiBsB,2CACnD,MAAMC,EAAc,CAChBC,iBAAkB,CACdC,yBAA0B,KAC1BC,iCAAkC,KAClCC,YAAa,KACbC,UAAWhD,EACXiD,eAAgB,CACZZ,SAAUjB,WAKhBhK,KAAKyI,0BAA0B4C,cAAa7L,OAAAC,OAAA,CAC9CmJ,WACA2C,eACID,EAAY,CAAEA,aAAc,IAExC,GAOA,wBAAAQ,CAAyBC,GACrB,MACMzB,EADQtK,KAAKyI,0BAA0BM,WACnBwB,yBAAyB,GAE7CC,EAA2BF,EAAYE,0BAA4B,GAEnEwB,EAA4BxB,EAAyByB,KACtDC,GAAWA,EAAOC,eAejBC,GAZyBL,EACzBvB,EAAyByB,KAAMC,GAAWA,EAAOxH,KAAOqH,GACxDvB,EAAyByB,KAAMC,IAC3B,GAAI5B,EAAYG,uBAAwB,CACpC,MAAM4B,EAAmB/B,EAAYG,uBAAuB/F,GAE5D,OAAOwH,EAAOxH,KAAO2H,CACzB,CAEA,OAAO,MAIaL,GAA6BxB,EAAyB,GAEpF,IAAK4B,EACD,MAAM,IAAIzM,MAAM,+CAGpB,OAAOyM,CACX,CAOA,UAAAE,CAAWC,GACP,MAAO,CACHC,WAAWD,aAAO,EAAPA,EAASC,YAAa,GACjCC,UAAUF,aAAO,EAAPA,EAASE,WAAY,GAC/BC,OAAOH,aAAO,EAAPA,EAASG,QAAS,GACzBC,OAAOJ,aAAO,EAAPA,EAASI,QAAS,GACzBC,QAAS,GACTC,UAAUN,aAAO,EAAPA,EAASM,WAAY,GAC/BC,UAAUP,aAAO,EAAPA,EAASO,WAAY,GAC/BC,MAAMR,aAAO,EAAPA,EAASQ,OAAQ,GACvBC,aAAaT,aAAO,EAAPA,EAASS,cAAe,GACrCC,YAAYV,aAAO,EAAPA,EAASU,aAAc,GACnCC,gBAAiB,GACjBC,qBAAqBZ,aAAO,EAAPA,EAASY,sBAAuB,GACrDC,aAAc,GAEtB,CAEA,iCAAAC,EAAkCC,MAAEA,YAChC,OAAOtN,KAAKsM,WAAW,CACnBE,UAAWc,EAAMrN,KAAKsN,WACtBd,SAAUa,EAAMrN,KAAKuN,QACrBd,MAAOY,EAAMG,cACbZ,SAAUS,EAAMf,QAAQmB,eACxBZ,SAAUQ,EAAMf,QAAQoB,eACxBZ,KAAMO,EAAMf,QAAQqB,aACpBZ,YAAaM,EAAMf,QAAQsB,aAC3BZ,WAAYK,EAAMf,QAAQuB,YAC1BX,oBAAqBG,EAAMf,QAAQwB,aACnCpB,MAAgC,QAAzBqB,EAAW,QAAXjK,EAAAuJ,EAAMX,aAAK,IAAA5I,OAAA,EAAAA,EAAEkK,oBAAY,IAAAD,OAAA,EAAAA,EAAEE,iBAE1C,CAEA,kCAAAC,CACIC,GAEA,MAAMd,MAAEA,EAAKe,eAAEA,GAAmBD,GAC5B7B,QACFA,EACAtM,MAAMqO,UAAEA,IACRD,EAAe,GAAGE,UAEf/B,KAAcC,GAAY6B,EAAUrM,MAAM,KAEjD,OAAOjC,KAAKsM,WAAW,CACnBE,YACAC,SAAUA,EAASxF,KAAK,KACxByF,MAAOY,EAAMG,cACbZ,SAAUN,EAAQmB,eAClBZ,SAAUP,EAAQoB,eAClBZ,KAAMR,EAAQqB,aACdZ,YAAaT,EAAQsB,aACrBZ,WAAYV,EAAQuB,YACpBX,oBAAqBZ,EAAQwB,cAErC,CAOA,mBAAAS,CAAoBC,EAAkC,IAClD,MAAMC,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,MAAEA,GAAUJ,EAElCK,EAAc,CAChBJ,MAAOA,GAASxG,EAAiBwG,GAASA,OAAQvM,EAClDwM,OAAQ3O,KAAK+O,eAAeJ,GAC5BC,MAAOA,GAAS3G,EAAiB2G,GAASA,OAAQzM,EAClD0M,MAAOA,GAAS1G,EAAiB0G,GAASA,OAAQ1M,GAGtD,OAAO6M,EAAOF,EAAaG,EAC/B,CAEA,cAAAF,CAAeJ,GAKX,OAAKA,GAA4B,iBAAXA,EAIlBA,EANc,MAUdA,EAXc,MAeXA,EAhBe,EAiB1B,CAOA,aAAAO,CAAcC,GACV,MAAMC,EAAUD,GAAaE,SAASC,eAAeH,GAEjDC,IAEAA,EAAQX,MAAMc,QAAU,OAEhC,EC3WG,MAAMC,EACT,0ECDJ,IAAKC,GAAL,SAAKA,GACDA,EAAA,wBACAA,EAAA,mCACH,CAHD,CAAKA,IAAAA,EAAW,KAKhB,MAAAC,EAAA,ECLaC,EAAsB,CAAE,yBAA0B,iTCiBhD,MAAMC,EACjB,WAAAhQ,CAAoBiQ,GAAA7P,KAAA6P,cAAAA,CAA+B,CAE7C,WAAAjG,CACFC,EACAC,2CAEA,MAAMgG,EAAM,2BAA2BjG,IACjCvC,EAAOwC,EACPvC,EAAO/H,OAAAC,OAAA,CACT,iBAAkB+P,EAClB,eAAgBE,EAAYK,MACzBJ,GAKP,aAFkB3P,KAAK6P,cAAcG,KAAsBF,EAAK,CAAEvI,UAASD,UAEhEA,IACf,GAEM,WAAA6C,CACFvB,EACAkB,2CAEA,MAAMgG,EAAM,kCAAkClH,IACxCtB,EAAOwC,EACPvC,EAAO/H,OAAAC,OAAA,CACT,iBAAkB+P,EAClB,eAAgBE,EAAYK,MACzBJ,GAKP,aAFkB3P,KAAK6P,cAAcI,IAA+BH,EAAK,CAAEvI,UAASD,UAEzEA,IACf,GAEM,cAAAqD,CACF/B,EACA5E,2CAEA,MAAM8L,EAAM,kCAAkClH,IACxCrB,EAAO/H,OAAAC,OAAA,CACT,iBAAkB+P,EAClB,eAAgBE,EAAYK,MACzBJ,GAQP,aALkB3P,KAAK6P,cAAcK,IAA2BJ,EAAGtQ,OAAAC,OAAA,CAC/D8H,WACGvD,KAGIsD,IACf,IC9DJ,MAWA6I,EAXwC1H,IACpC,MAAM2H,QAAEA,GAAY3H,EAA0BM,WAE9C,OAAO,IAAIR,EACP8H,IACA5H,EACA,IAAImH,EAAoBU,EAAoB,CAAEC,KAAMH,OACpDlJ,MCXFsJ,EAAyC,CAC3CC,KAAM,GACN/B,MAAO,UACPgC,gBAAiB,WASfC,EAAqB,+CAOZ,MAAMC,EAMjB,WAAAhR,CAAYoE,GACRhE,KAAK6Q,OAAMrR,OAAAC,OAAAD,OAAAC,OAAA,GAAQ+Q,GAAoBxM,GAAWA,EAAQ6M,QAC1D7Q,KAAK8Q,gBAAetR,OAAAC,OAAA,GAASuE,GAAWA,EAAQ8M,iBAEhD9Q,KAAK+Q,kBAEL/Q,KAAKgR,UAAYhR,KAAKiR,iBACtBjR,KAAKkR,UAAYlR,KAAKmR,iBAEtBnR,KAAKgR,UAAUI,YAAYpR,KAAKkR,UACpC,CAEA,IAAAG,CAAKC,GACD,GAAIA,EAAU,CACV,MAAMC,EAASlC,SAASC,eAAegC,GAEvC,IAAKC,EACD,MAAM,IAAI5R,MACN,8EAIR4R,EAAOH,YAAYpR,KAAKgR,UAC5B,CAEAhR,KAAKgR,UAAUvC,MAAM+C,WAAa,UAClCxR,KAAKgR,UAAUvC,MAAMgD,QAAU,GACnC,CAEA,IAAAC,GACI,MAAMC,EAAsB,KACxB3R,KAAKgR,UAAUvC,MAAM+C,WAAa,SAElCxR,KAAKgR,UAAUY,oBAAoB,gBAAiBD,IAGxD3R,KAAKgR,UAAUa,iBAAiB,gBAAiBF,GAEjD3R,KAAKgR,UAAUvC,MAAMgD,QAAU,GACnC,CAEQ,cAAAR,GACJ,MAAMD,EAAY3B,SAASyC,cAAc,OAezC,OAbAd,EAAUvC,MAAMc,QAAU,QAC1ByB,EAAUvC,MAAMsD,OAAS,IACzBf,EAAUvC,MAAMuD,KAAO,IACvBhB,EAAUvC,MAAME,OAAS,OACzBqC,EAAUvC,MAAMwD,MAAQ,OACxBjB,EAAUvC,MAAMyD,SAAW,WAC3BlB,EAAUvC,MAAM0D,MAAQ,IACxBnB,EAAUvC,MAAM2D,IAAM,IACtBpB,EAAUvC,MAAM4D,WAAa,qBAC7BrB,EAAUvC,MAAMgD,QAAU,IAE1BzR,KAAKsS,kBAAkBtB,EAAWhR,KAAK8Q,iBAEhCE,CACX,CAEQ,cAAAG,GACJ,MAAMD,EAAY7B,SAASyC,cAAc,OAiBzC,OAfAZ,EAAUzC,MAAMc,QAAU,QAC1B2B,EAAUzC,MAAMwD,MAAQ,GAAGjS,KAAK6Q,OAAOJ,SACvCS,EAAUzC,MAAME,OAAS,GAAG3O,KAAK6Q,OAAOJ,SACxCS,EAAUzC,MAAM8D,aAAe,GAAGvS,KAAK6Q,OAAOJ,SAC9CS,EAAUzC,MAAM+D,OAAS,YACzBtB,EAAUzC,MAAMgE,YAAc,GAAGzS,KAAK6Q,OAAOH,mBAAmB1Q,KAAK6Q,OAAOH,mBAAmB1Q,KAAK6Q,OAAOnC,SAAS1O,KAAK6Q,OAAOnC,QAChIwC,EAAUzC,MAAMiE,OAAS,SACzBxB,EAAUzC,MAAMyD,SAAW,WAC3BhB,EAAUzC,MAAMuD,KAAO,IACvBd,EAAUzC,MAAM0D,MAAQ,IACxBjB,EAAUzC,MAAM2D,IAAM,MACtBlB,EAAUzC,MAAMkE,UAAY,gCAC5BzB,EAAUzC,MAAMmE,eAAiB,cACjC1B,EAAUzC,MAAMoE,UAAY,GAAGlC,wDAExBO,CACX,CAEQ,iBAAAoB,CAAkBlD,EAAsB0D,GAC5CtT,OAAOmH,KAAKmM,GAAOlM,QAASmM,IACxB3D,EAAQX,MAAMuE,YAAYD,EAAGD,EAAMC,KAE3C,CAEQ,eAAAhC,SAGJ,GAAI1B,SAASC,eAAeqB,GACxB,OAGJ,MAAMlC,EAAQY,SAASyC,cAAc,SAErCrD,EAAM/J,GAAKiM,EAEE,QAAb5M,EAAAsL,SAAS4D,YAAI,IAAAlP,GAAAA,EAAEqN,YAAY3C,GAEvBA,EAAMyE,iBAAiBC,eAGvB1E,EAAMyE,MAAME,WACR,gCACazC,uLAKb,EAGZ,ECxIW,MAAM0C,UAA6B3T,EAC9C,WAAAE,CAAYC,GACRE,MAAMF,GAAW,yCAEjBG,KAAKC,KAAO,uBACZD,KAAKE,KAAO,kBAChB,ECNW,MAAMoT,UAAoCD,EACrD,WAAAzT,CAAY2T,GACR,IAAI1T,EAAU,yEAEV0T,IACA1T,EAAU,GAAGA,4DAAkE0T,EAActM,KACzF,UAIRlH,MAAMF,GAENG,KAAKC,KAAO,6BAChB,ECXW,MAAMuT,UAA2C/L,EAC5D,WAAA7H,CAAY8H,GACR3H,MAAM2H,EAAU,CACZ7H,QAAS,wEAGbG,KAAKC,KAAO,4BACZD,KAAKE,KAAO,wBAChB,ECXW,MAAMuT,UAA0C/T,EAC3D,WAAAE,GACIG,MAAM,kEAENC,KAAKC,KAAO,oCACZD,KAAKE,KAAO,iCAChB,ECVW,SAASwT,EACpBC,GAEA,QAC0B,iBAAfA,GACQ,OAAfA,QACkE,IAAzDA,EAAgCC,sBAC4B,kBAAzDD,EAAgCC,2BAC8B,IAAjED,EAAgCE,8BACoC,kBAAjEF,EAAgCE,6BAEpD,CCLe,SAASC,EACpBH,GAEA,OAAOI,QAASJ,EAAiCK,aACrD,CCTA,MC2CAC,EA5CA,UAA+CpD,OAC3CA,IAEA,MAAMqD,EAAuC,GAsC7C,OApCIrD,EAAOnC,QACPwF,EAAexF,MAAQmC,EAAOnC,OAG9BmC,EAAOsD,SACPD,EAAeC,OAAStD,EAAOsD,SAG/BtD,EAAO,cAAgBA,EAAO,oBAC9BqD,EAAeE,KAAO,GAElBvD,EAAO,eACPqD,EAAeE,KAAKlU,KAAO2Q,EAAO,cAGlCA,EAAO,mBACPqD,EAAeE,KAAKlC,SAAWrB,EAAO,mBAI1CA,EAAOwD,QACPH,EAAeG,MAAQxD,EAAOwD,QAG9BxD,EAAO,eAAiBA,EAAO,gBAC/BqD,EAAeI,KAAO,GAElBzD,EAAO,gBACPqD,EAAeI,KAAK5F,MAAQmC,EAAO,eAGnCA,EAAO,eACPqD,EAAeI,KAAK7D,MAAQI,EAAO,eAIpCqD,CACX,ECnCO,SAASK,EAAiBZ,GAC7B,MAA0B,iBAAfA,GAA0C,OAAfA,GAKlC,gBAAiBA,GACjB,sBAAuBA,GACvB,aAAcA,GACd,2BAA4BA,GAC5B,WAAYA,GACZ,SAAUA,CAElB,uSCkBe,MAAMa,GAMjB,WAAA5U,CACY6I,EACAgM,EACAC,EACAC,GAHA3U,KAAAyI,0BAAAA,EACAzI,KAAAyU,yBAAAA,EACAzU,KAAA0U,sBAAAA,EACA1U,KAAA2U,iBAAAA,CACT,CAEG,UAAAC,CACF5Q,iDAEA,MAAM4E,SAAEA,EAAQiM,eAAEA,GAAmB7Q,GAAW,GAIhD,GAFAhE,KAAK6U,eAAiBA,GAEjBjM,EACD,MAAM,IAAIyK,EACN,qFAIR,IAAKwB,EACD,MAAM,IAAIxB,EACN,iGAIFrT,KAAKyI,0BAA0BqM,kBAAkBlM,GAEvD,MAAME,EAAQ9I,KAAKyI,0BAA0BM,WACvCvG,EAAgBsG,EAAMI,wBAAkDN,IAExEoI,UAAEA,EAAS+D,kBAAEA,GAAsBF,GAEnC7K,QACFA,EAAOgL,wBACPA,EAA0B,GAAE5P,wBAC5BA,GACA5C,EAAcoC,oBAAsB,GAExC,QAA0BzC,IAAtB4S,EAAiC,CACjC,IAAK1F,SAASC,eAAeyF,GAIzB,YAFAE,QAAQtL,MAAM,8DAKlB,MAAMuL,EAAsBF,aAAuB,EAAvBA,EAAyB/I,KACjD,EAAGvH,QAAgB,aAAPA,GAGhB,GAAIU,KAA4B8P,aAAmB,EAAnBA,EAAqB1N,QACjD,OAGJ,MAAM5D,QAAuB5D,KAAK0U,sBAAsB/Q,kBACpDnB,EACAsG,EAAME,iBAAiB1C,SAAS2C,KAChCH,EAAMK,aAGV,OAAKvF,GAAsD,mBAA7BA,aAAc,EAAdA,EAAgBuR,UASvCnV,KAAKoV,eAAexR,EAAgBmR,EAAmBG,QAP1DD,QAAQtL,MACJ,oGAOZ,CAMIK,EACAhK,KAAKgK,QAA0C,QAAhCjG,EAAAvB,EAAcoC,0BAAkB,IAAAb,OAAA,EAAAA,EAAEiG,SAKrDhK,KAAKqV,0BAA4BrE,aAAS,EAATA,EAAW/O,MAAM,KAAK,SAEjDjC,KAAKyU,yBAAyB1R,cAAc6F,GAE9CiM,EAAeS,QAA2C,mBAA1BT,EAAeS,QAC/CT,EAAeS,OAAO,IAAMtV,KAAKuV,aAAa3M,EAAUiM,UAII1S,IAA5D0S,EAAeW,0CACfX,EAAeW,2CAEfxV,KAAKuV,aAAa3M,EAAUiM,GAEpC,GAEM,OAAAY,CAAQC,EAA2B1R,mDACrC,MAAM2R,QAAEA,GAAsBD,EAAVE,2UAAKC,CAAKH,EAAxB,cACAI,QAAEA,GAAY9V,KAAK6U,gBAAkB,GAE3C,IAAKc,EACD,MAAM,IAAIrC,EAA4B,CAAC,YAG3C,MAAM1K,SAAEA,EAAQ2C,YAAEA,GAAgBoK,EAMlC,GAJI3V,KAAK+V,qCAAqCxK,KAAiBvL,KAAKgK,UAChEhK,KAAKgK,cAAgBhK,KAAK4J,gBAGzB5J,KAAKgK,QACN,MAAM,IAAIwJ,EAGd,MAAMwC,EAAiBhW,KAAK+V,qCAAqCxK,GAC3DvL,KAAKiW,uCAAuCrN,EAAU5I,KAAKgK,QAASuB,GACpEvL,KAAKkW,sBAAsBtN,EAAU5I,KAAKgK,QAASuB,GAEzD,UACUvL,KAAKyI,0BAA0B0N,YAAYP,EAAO5R,SAClDhE,KAAKyI,0BAA0B4C,cAAc2K,EACvD,CAAE,MAAOrM,GACL,GC5JG,SAA+BA,SAC1C,MJbmB,CAACA,GACI,iBAAVA,GAAgC,OAAVA,GAAkB,SAAUA,EIa5DyM,CAAezM,IAA0D,sBAAX,QAArC5F,EAAA4F,EAAMrC,KAAK+O,kCAA0B,IAAAtS,OAAA,EAAAA,EAAE7D,KAExE,CDwJgBoW,CAAsB3M,GAAQ,CAC9B,MAAM4M,EAAyD,QAA3CvI,EAAqC,QAArCjK,EAAA4F,EAAMrC,KAAK+O,kCAA0B,IAAAtS,OAAA,EAAAA,EAAEyS,YAAI,IAAAxI,OAAA,EAAAA,EAAEyI,aAEjE,OAAO,IAAIC,QAAQ,IAAMpU,OAAOqU,SAASpQ,QAAQgQ,GACrD,CAkBA,OAhBIvW,KAAK4W,gBAAgBjN,WACf3J,KAAKyU,yBAAyB1R,cAAc4S,EAAQ/M,gBAEpD,IAAI8N,QAAQ,CAACG,EAAUC,WACrB9W,KAAK6U,iBACY,QAAjB9Q,EAAA/D,KAAK+W,oBAAY,IAAAhT,GAAAA,EAAEiT,QACnBhX,KAAKuV,aAAaI,EAAQ/M,SAAU5I,KAAK6U,gBACzC7U,KAAKiX,YAAY,IAAItX,MAAM,uBAAwBmW,IAGvDgB,OAIR9W,KAAKiX,YAAYtN,EAAOmM,GAEjBY,QAAQI,QACnB,CACJ,GAEA,QAAAI,GACI,OAAOR,QAAQI,OAAO,IAAIrD,EAC9B,CAEA,YAAA0D,SAKI,OAJAnX,KAAKgK,aAAU7H,EAEE,QAAjB4B,EAAA/D,KAAK+W,oBAAY,IAAAhT,GAAAA,EAAEiT,QAEZN,QAAQU,SACnB,CAEQ,sCAAAnB,CACJrN,EACAyO,EACA9L,GAEA,MAAMyI,aAAEA,EAAYH,6BAAEA,GAAiCtI,EAEjD+L,GAA2BtX,KAAKuX,sBAAsBhM,GAE5D,OAAI+L,EACO,CACH1O,WACA2C,YAAa,CACTqI,qBAAsB0D,EACtBzD,+BACArI,iBAAkB,CACdK,eAAgB,CACZZ,SAAUoM,MAOvB,CACHzO,WACA2C,YAAa,CACTyI,eACAH,+BACArI,iBAAkB,CACdK,eAAgB,CACZZ,SAAUoM,GAEdG,aAAc,CACVC,MAAOzD,KAK3B,CAEQ,qBAAAkC,CACJtN,EACAyO,EACA9L,GAEA,MAAMqI,qBAAEA,GAAuB,EAAKC,6BAAEA,GAA+B,GACjEH,EAAuBnI,GAAeA,EAAc,GAExD,MAAO,CACH3C,WACA2C,YAAa,CACTqI,uBACAC,+BACArI,iBAAkB,CACdK,eAAgB,CACZZ,SAAUoM,KAK9B,CAOQ,YAAA9B,CACJ3M,EACAiM,GAEA,MAAMzL,EAAYpJ,KAAKyU,yBAAyBpL,sBAG1C7G,EADQxC,KAAKyI,0BAA0BM,WACjBG,wBAAkDN,IACxE8O,oBAAEA,GAAwBlV,EAAcoC,oBAAsB,IAC9D+S,4BAAEA,GAAgCD,GAAuB,IACzD1G,UAAEA,EAAS8E,QAAEA,EAAO8B,eAAEA,EAAcC,WAAEA,EAAUC,WAAEA,GAAejD,EAEvE,IAAK7D,EACD,MAAM,IAAIqC,EACN,8EAIR,MAAM0E,EAAc/X,KAAKgY,0BAA0BhH,GAGnD,IAF6B3B,SAASC,eAAeyI,GAGjD,MAAM,IAAI1E,EACN,wDAAwD0E,qBAIhE,MAAME,EAAsC,CACxCC,cAAe9O,EAAU+O,QAAQC,OACjC3J,MAAOzO,KAAKyU,yBAAyBjG,oBAAoBmJ,GACzD/N,YAAa,IAAM5J,KAAK4J,cACxByO,QAAS,CAACC,EAAGC,IAAYvY,KAAKwY,YAAYD,EAASV,GACnDY,UAAYjC,GAASxW,KAAK0Y,cAAclC,EAAMsB,GAC9ChC,QAAUnM,GAAU3J,KAAKiX,YAAYtN,EAAOmM,GAC5C6C,SAAU,IAAM3Y,KAAK4Y,wBAAuB,IAGhD5Y,KAAK+W,aAAe3N,EAAUyP,QAAQZ,GAEjCjY,KAAK+W,aAAa+B,eAInBlB,GAA4C,mBAAnBA,GACzBA,IAGJ5X,KAAK+W,aAAagC,OAAO/H,GAC7B,CAEc,WAAAwH,CACVD,EACAV,2CAEA,MAAMT,QAAEA,EAAON,OAAEA,GAAWyB,EAQ5B,OAAOV,aAAU,EAAVA,EANoB,KACvB7X,KAAK4Y,wBAAuB,GAErBxB,KAG6BN,EAC5C,GAEQ,aAAA4B,EACJM,QAAEA,GACFlB,GAEA9X,KAAKgK,QAAUgP,EAEflB,SAAAA,GACJ,CAEQ,WAAAb,CACJtN,EACAmM,GAEA9V,KAAK4Y,wBAAuB,GAExB9C,GAA8B,mBAAZA,GAClBA,EAAQnM,EAEhB,CAEc,WAAAC,2CACV,MAAMqP,EAAejZ,KAAKkZ,kBAE1B,OAAOlZ,KAAKyU,yBAAyB7K,YAAY,yBAA0B,CACvEgK,sBAAsBqF,aAAY,EAAZA,EAAcrF,wBAAwB,GAEpE,GAOQ,eAAAsF,GACJ,MAAMA,gBAAEA,GAAoBlZ,KAAK6U,gBAAkB,GAEnD,MAAkC,mBAApBqE,EAAiCA,SAAoB/W,CACvE,CAEQ,qBAAAoV,CAAsBhM,GAC1B,GAAIA,GAAeuI,EAAoBvI,GAAc,CACjD,MAEM4N,EAFQnZ,KAAKyI,0BAA0BM,WAEnBqQ,iBACpBC,EAAiBF,aAAW,EAAXA,EAAalN,KAC/B0H,GACGY,EAAiBZ,IACjBA,EAAW2F,cAAgB/N,EAAYyI,cAM/C,QAJ+BO,EAAiB8E,KAC1CA,EAAeE,uBAIzB,CAEA,OAAO,CACX,CAOQ,sBAAAX,CAAuBY,GACvBA,GAAaxZ,KAAKqV,0BAClBrV,KAAK2U,iBAAiBtD,KAAKrR,KAAKqV,2BAEhCrV,KAAK2U,iBAAiBjD,MAE9B,CAOQ,oCAAAqE,CACJxK,GAEA,QACMA,GAAeuI,EAAoBvI,IAAgBmI,EAAuBnI,EAEpF,CAOQ,cAAA6J,CACJxR,EACAmR,EACAG,GAEA,MAEMuE,EAA0C,CAC5CC,OAHa1Z,KAAKyI,0BAA0BM,WAAW4Q,qBAGtCC,mBACjBC,UAAW,UACXpL,MAAOwF,EAAsCiB,IAGjDtR,EAAeuR,SAASsE,GAAuBV,OAAO,IAAIhE,IAC9D,CAOQ,eAAA6B,CAAgBjN,aACpB,QEnbO,SAA+BA,GAC1C,MAAwB,iBAAVA,GAAgC,OAAVA,GAAkB,WAAYA,CACtE,CFibYmQ,CAAsBnQ,IAGkC,yBAAX,QAAtCoQ,EAAsB,QAAtB/L,IAFkC,QAAbjK,EAAA4F,aAAK,EAALA,EAAOhC,cAAM,IAAA5D,OAAA,EAAAA,EAAEkC,OAAQ+T,GAAMA,EAAEC,kBAAmB,IAEnD,UAAE,IAAAjM,OAAA,EAAAA,EAAEiM,sBAAc,IAAAF,OAAA,EAAAA,EAAE9Q,KAIvD,CAEQ,yBAAA+O,CAA0BhH,SAC9B,OAA8B,QAAvBjN,EAAAiN,EAAU/O,MAAM,KAAK,UAAE,IAAA8B,EAAAA,EAAIiN,CACtC,EGlcJ,MAYAkJ,GAAe7a,EAXXoJ,GAEA,IAAI+L,GACA/L,EACA0H,EAA+B1H,GAC/B,IAAIrG,EAAsB+E,KAC1B,IAAIyJ,EAAiB,CACjBE,gBAAiBrP,KAI0C,CAAC,CAAEiD,GAAI,oBCrB/D,MAAMyV,WAA4Bza,EAC7C,WAAAE,CAAYC,GACRE,MAAMF,GAAW,oBAEjBG,KAAKC,KAAO,sBACZD,KAAKE,KAAO,iBAChB,ySCmBW,MAAMka,GAKjB,WAAAxa,CACY6I,EACAgM,EACAE,EACAD,GAHA1U,KAAAyI,0BAAAA,EACAzI,KAAAyU,yBAAAA,EACAzU,KAAA2U,iBAAAA,EACA3U,KAAA0U,sBAAAA,CACT,CAEG,UAAAE,CACF5Q,4CAEA,MAAM4E,SAAEA,EAAQiM,eAAEA,EAAcwF,qBAAEA,GAAyBrW,GAAW,GAEhEsW,EAAgBD,GAAwBxF,EAE9C,IAAKjM,EACD,MAAM,IAAIyK,EACN,qFAIR,IAAKiH,EACD,MAAM,IAAIjH,EACN,iGAIFrT,KAAKyI,0BAA0BqM,kBAAkBlM,GAEvD,MAAME,EAAQ9I,KAAKyI,0BAA0BM,WACvCvG,EAAgBsG,EAAMI,wBAAkDN,IAExEoM,wBAAEA,EAA0B,GAAEhL,QAAEA,GAAYxH,EAAcoC,oBAAsB,IAChFmQ,kBAAEA,EAAiB/D,UAAEA,GAAcsJ,EAEzC,QAA0BnY,IAAtB4S,EAAiC,CACjC,IAAK1F,SAASC,eAAeyF,GAIzB,YAFAE,QAAQtL,MAAM,8DAKlB,MAAMuL,EACFF,GACAA,EAAwB/I,KAAK,EAAGvH,QAAgB,aAAPA,GAE7C,KAAKwQ,aAAmB,EAAnBA,EAAqB1N,QACtB,OAGJ,MAAM5D,QAAuB5D,KAAK0U,sBAAsB/Q,kBACpDnB,EACAsG,EAAME,iBAAiB1C,SAAS2C,KAChCH,EAAMK,aAGV,OAAOnJ,KAAKoV,eAAexR,EAAgBmR,EAAmBG,EAClE,CAMIlL,EACAhK,KAAKgK,QAAUA,SAKbhK,KAAKyU,yBAAyB1R,cAAc6F,GAElD5I,KAAKqV,0BAA4BrE,aAAS,EAATA,EAAW/O,MAAM,KAAK,GAEvDjC,KAAKuV,aAAa3M,EAAU0R,GAChC,GAEM,OAAA7E,CAAQC,EAA2B1R,4CACrC,MAAM2R,QAAEA,GAAsBD,EAAVE,2UAAK2E,CAAK7E,EAAxB,aAEN,IAAKC,EACD,MAAM,IAAIrC,EAA4B,CAAC,YAG3C,IAAKtT,KAAKgK,QACN,MAAM,IAAIwJ,QAGRxT,KAAKyI,0BAA0B0N,YAAYP,EAAO5R,SAClDhE,KAAKyU,yBAAyBpJ,cAAcsK,EAAQ/M,SAAU5I,KAAKgK,QAC7E,GAEA,QAAAkN,GACI,OAAOR,QAAQI,OAAO,IAAIrD,EAC9B,CAEA,YAAA0D,SAKI,OAJAnX,KAAKgK,aAAU7H,EAEE,QAAjB4B,EAAA/D,KAAK+W,oBAAY,IAAAhT,GAAAA,EAAEiT,QAEZN,QAAQU,SACnB,CAOQ,YAAA7B,CACJ3M,EACA0R,GAEA,KAAKA,aAAa,EAAbA,EAAetJ,WAChB,MAAM,IAAIqC,EACN,8EAIR,MAAMjK,EAAYpJ,KAAKyU,yBAAyBpL,sBAG1C7G,EADQxC,KAAKyI,0BAA0BM,WACjBG,wBAAkDN,IACxE8O,oBAAEA,GAAwBlV,EAAcoC,oBAAsB,IAC9D+S,4BAAEA,GAAgCD,GAAuB,IAEzD1G,UAAEA,EAAS8E,QAAEA,EAAO8B,eAAEA,EAAcC,WAAEA,EAAUC,WAAEA,GAAewC,EAEjEE,EAAiB,CAACpR,EAAU+O,QAAQsC,SAAUrR,EAAU+O,QAAQuC,QACtE,IAAIC,GAAyB,EAE7BH,EAAe5T,QAASsR,IACpB,GAAIyC,EACA,OAGJ,MAAM1C,EAAsC,CACxCC,gBACAzJ,MAAOzO,KAAKyU,yBAAyBjG,oBACjCmJ,GAEJ/N,YAAa,IACT5J,KAAKyU,yBAAyB7K,YAAY,gCAC9CyO,QAAS,CAACC,EAAGC,IAAYvY,KAAKwY,YAAYD,EAASV,GACnDY,UAAYjC,GAASxW,KAAK0Y,cAAclC,EAAMsB,GAC9Ca,SAAU,IAAM3Y,KAAK4Y,wBAAuB,GAC5C9C,QAAUnM,GAAU3J,KAAKiX,YAAYtN,EAAOmM,IAKhD,GAFA9V,KAAK+W,aAAe3N,EAAUyP,QAAQZ,GAEjCjY,KAAK+W,aAAa+B,cAAgBZ,IAAkB9O,EAAU+O,QAAQsC,SAA3E,CAIA,IAAKza,KAAK+W,aAAa+B,cAAgBZ,IAAkB9O,EAAU+O,QAAQuC,OACvE,MAAM,IAAIP,GACN,UAAUjC,2EAIdN,GAA4C,mBAAnBA,GACzBA,IAGJ5X,KAAK+W,aAAagC,OAAO/H,GACzB2J,GAAyB,CAbzB,GAeR,CAEc,WAAAnC,CACVD,EACAV,4CAEA,MAAMT,QAAEA,EAAON,OAAEA,GAAWyB,EAQ5B,GAAIV,GAAoC,mBAAfA,EACrB,OAAOA,EAPgB,KACvB7X,KAAK4Y,wBAAuB,GAErBxB,KAI+BN,EAE9C,GAEQ,aAAA4B,EACJM,QAAEA,GACFlB,GAEA9X,KAAKgK,QAAUgP,EAEXlB,GAAoC,mBAAfA,GACrBA,GAER,CAEQ,WAAAb,CACJtN,EACAmM,GAEA9V,KAAK4Y,wBAAuB,GAExB9C,GAA8B,mBAAZA,GAClBA,EAAQnM,EAEhB,CAOQ,sBAAAiP,CAAuBY,GACvBA,GAAaxZ,KAAKqV,0BAClBrV,KAAK2U,iBAAiBtD,KAAKrR,KAAKqV,2BAEhCrV,KAAK2U,iBAAiBjD,MAE9B,CAOQ,cAAA0D,CACJxR,EACAmR,EACAG,GAEA,MAEMuE,EAA0C,CAC5CC,OAHa1Z,KAAKyI,0BAA0BM,WAAW4Q,qBAGtCC,mBACjBC,UAAW,UACXpL,MAAOwF,EAAsCiB,IAGjDtR,EAAeuR,SAASsE,GAAuBV,OAAO,IAAIhE,IAC9D,ECvQJ,MAYA6F,GAAevb,EAVVoJ,GACD,IAAI2R,GACA3R,EACA0H,EAA+B1H,GAC/B,IAAImI,EAAiB,CACjBE,gBAAiBrP,IAErByF,KAGqE,CACzE,CAAExC,GAAI,iUCAK,MAAMmW,GAKjB,WAAAjb,CACY6I,EACAgM,EACAE,GAFA3U,KAAAyI,0BAAAA,EACAzI,KAAAyU,yBAAAA,EACAzU,KAAA2U,iBAAAA,CACT,CAEG,UAAAC,CACF5Q,oDAEA,MAAM4E,SAAEA,EAAQiM,eAAEA,EAAciG,oBAAEA,GAAwB9W,GAAW,GAE/DsW,EAAgBQ,GAAuBjG,EAE7C,IAAKjM,EACD,MAAM,IAAIyK,EACN,qFAIR,IAAKiH,EACD,MAAM,IAAIjH,EACN,sGAIFrT,KAAKyI,0BAA0BqM,kBAAkBlM,GAEvD,MACMpG,EADQxC,KAAKyI,0BAA0BM,WACjBG,wBAAkDN,IAM1C,QAAhC7E,EAAAvB,EAAcoC,0BAAkB,IAAAb,OAAA,EAAAA,EAAEiG,SAClChK,KAAKgK,QAA0C,QAAhCgE,EAAAxL,EAAcoC,0BAAkB,IAAAoJ,OAAA,EAAAA,EAAEhE,eAK/ChK,KAAKyU,yBAAyB1R,cAAc6F,GAElD5I,KAAKqV,0BAA4BiF,EAActJ,UAAU/O,MAAM,KAAK,GAEpEjC,KAAKuV,aAAa3M,EAAU0R,GAChC,GAEM,OAAA7E,CAAQC,EAA2B1R,4CACrC,MAAM2R,QAAEA,GAAsBD,EAAVE,2UAAKmF,CAAKrF,EAAxB,aAEN,IAAKC,EACD,MAAM,IAAIrC,EAA4B,CAAC,YAG3C,IAAKtT,KAAKgK,QACN,MAAM,IAAIwJ,QAGRxT,KAAKyI,0BAA0B0N,YAAYP,EAAO5R,SAClDhE,KAAKyU,yBAAyBpJ,cAAcsK,EAAQ/M,SAAU5I,KAAKgK,QAC7E,GAEA,QAAAkN,GACI,OAAOR,QAAQI,OAAO,IAAIrD,EAC9B,CAEA,YAAA0D,SAKI,OAJAnX,KAAKgK,aAAU7H,EAEE,QAAjB4B,EAAA/D,KAAK+W,oBAAY,IAAAhT,GAAAA,EAAEiT,QAEZN,QAAQU,SACnB,CAOQ,YAAA7B,CACJ3M,EACAkS,GAEA,MAAM1R,EAAYpJ,KAAKyU,yBAAyBpL,sBAG1C7G,EADQxC,KAAKyI,0BAA0BM,WACjBG,wBAAkDN,IACxE8O,oBAAEA,GAAwBlV,EAAcoC,oBAAsB,IAC9D+S,4BAAEA,GAAgCD,GAAuB,IAEzD1G,UAAEA,EAAS8E,QAAEA,EAAO8B,eAAEA,EAAcC,WAAEA,EAAUC,WAAEA,GAAegD,EAEjE7C,EAAsC,CACxCC,cAAe9O,EAAU+O,QAAQ6C,MACjCvM,MAAOzO,KAAKyU,yBAAyBjG,oBAAoBmJ,GACzD/N,YAAa,IACT5J,KAAKyU,yBAAyB7K,YAAY,+BAC9CyO,QAAS,CAACC,EAAGC,IAAYvY,KAAKwY,YAAYD,EAASV,GACnDY,UAAYjC,GAASxW,KAAK0Y,cAAclC,EAAMsB,GAC9Ca,SAAU,IAAM3Y,KAAK4Y,wBAAuB,GAC5C9C,QAAUnM,GAAU3J,KAAKiX,YAAYtN,EAAOmM,IAKhD,GAFA9V,KAAK+W,aAAe3N,EAAUyP,QAAQZ,IAEjCjY,KAAK+W,aAAa+B,aACnB,MAAM,IAAIqB,GACN,sFAIJvC,GAA4C,mBAAnBA,GACzBA,IAGJ5X,KAAK+W,aAAagC,OAAO/H,EAC7B,CAEc,WAAAwH,CACVD,EACAV,4CAEA,MAAMT,QAAEA,EAAON,OAAEA,GAAWyB,EAQ5B,OAAOV,EANoB,KACvB7X,KAAK4Y,wBAAuB,GAErBxB,KAG2BN,EAC1C,GAEQ,aAAA4B,EACJM,QAAEA,GACFlB,GAEA9X,KAAKgK,QAAUgP,EAEflB,IACA9X,KAAK4Y,wBAAuB,EAChC,CAEQ,WAAA3B,CACJtN,EACAmM,GAEA9V,KAAK4Y,wBAAuB,GAExB9C,GAA8B,mBAAZA,GAClBA,EAAQnM,EAEhB,CAOQ,sBAAAiP,CAAuBY,GACvBA,GAAaxZ,KAAKqV,0BAClBrV,KAAK2U,iBAAiBtD,KAAKrR,KAAKqV,2BAEhCrV,KAAK2U,iBAAiBjD,MAE9B,ECxLJ,MAYAuJ,GAAe5b,EAVVoJ,GACD,IAAIoS,GACApS,EACA0H,EAA+B1H,GAC/B,IAAImI,EAAiB,CACjBE,gBAAiBrP,EACjBoP,OAAQ,CAAEH,gBAAiB,YAIqC,CACxE,CAAEhM,GAAI,yBCzBGwW,GAA2B,CACpC,mBAAoB,qBACpB,UAAW,QCMA,MAAMC,WAA8B1T,EAC/C,WAAA7H,CAAY8H,GACR3H,MAAM2H,EAAU,CACZ7H,QAAS,0CAGbG,KAAKC,KAAO,eACZD,KAAKE,KAAO,SAChB,ECmCJ,IAAYkb,GAoKAC,GAgRAC,GAQAC,GAQAC,GAoFAC,GA6BAC,IArjBZ,SAAY1T,GACRA,EAAA,oBACAA,EAAA,QACAA,EAAA,kBACAA,EAAA,SACH,CALD,CAAYoT,KAAAA,GAAkB,KAoK9B,SAAYC,GACRA,EAAA,sBACAA,EAAA,iBACH,CAHD,CAAYA,KAAAA,GAAoB,KAgRhC,SAAYpT,GACRA,EAAA,gBACAA,EAAA,oBACAA,EAAA,gBACAA,EAAA,UACAA,EAAA,yBACH,CAND,CAAYqT,KAAAA,GAAgB,KAQ5B,SAAYpT,GACRA,EAAA,YACAA,EAAA,YACAA,EAAA,gBACAA,EAAA,cACAA,EAAA,aACH,CAND,CAAYqT,KAAAA,GAAgB,KAQ5B,SAAYpT,GACRA,EAAA,YACAA,EAAA,WACH,CAHD,CAAYqT,KAAAA,GAAgB,KAoF5B,SAAYnT,GACRA,EAAA,YACAA,EAAA,aACH,CAHD,CAAYoT,KAAAA,GAAmC,KA6B/C,SAAYnT,GACRA,EAAA,oBACAA,EAAA,kBACAA,EAAA,4CACAA,EAAA,2BACAA,EAAA,4BACH,CAND,CAAYoT,KAAAA,GAAiB,4SChkBd,MAAMC,GAUjB,WAAA/b,CACY6I,EACAmT,EACAC,EACAlH,EACAmH,EAlBS,IAmBTC,EAlBS,KAaT/b,KAAAyI,0BAAAA,EACAzI,KAAA4b,iCAAAA,EACA5b,KAAA6b,sBAAAA,EACA7b,KAAA2U,iBAAAA,EACA3U,KAAA8b,gBAAAA,EACA9b,KAAA+b,uBAAAA,EAXJ/b,KAAAgc,aAAe,EACfhc,KAAAic,YAAcC,EACdlc,KAAAmc,2BAA4B,CAUjC,CAEG,UAAAvH,CACF5Q,4CAGA,MAAMsH,UACFA,EAAS1C,SACTA,EAAQiM,eACRA,EAAcuH,iCACdA,GACApY,EACEsW,EAAgB8B,GAAoCvH,EAI1D,GAFA7U,KAAKoc,iCAAmCA,GAEnCxT,EACD,MAAM,IAAIyK,EACN,qFAIR,IAAK/H,EACD,MAAM,IAAI+H,EACN,sFAIR,IAAKiH,EACD,MAAM,IAAIjH,EACN,6GAIR,MAAMvK,EAAQ9I,KAAKyI,0BAA0BM,WACvCvG,EAAgBsG,EAAMI,wBACxBN,EACA0C,IAEEtB,QAAEA,EAAOqS,mBAAEA,GAAuB7Z,EAAcoC,oBAAsB,GACtE0X,EAAWxT,EAAMyT,wBAAwBC,iBAAiBF,SAEhEtc,KAAKmc,0BC/FE,SACXG,EACAG,EACAC,GAAgB,SAEhB,OAA+B,QAAxB3Y,EAAAuY,ED4FC,gDC5FuB,IAAAvY,EAAAA,EAAI2Y,CACvC,CDyFyCC,CAC7BL,EACA,GACA,GAOAtS,EACAhK,KAAKgK,QAAUA,GAKnBhK,KAAKyD,iBAAmBzD,KAAK6b,sBAAsBrY,iBAC/ChB,EACAsG,EAAME,iBAAiB1C,SAAS2C,KAChCH,EAAMK,aAGVnJ,KAAKqV,0BAA4BiF,EAActJ,UAAU/O,MAAM,KAAK,GAEpEjC,KAAKuV,aAAa3M,EAAU0C,EAAWgP,GAEnC+B,GACArc,KAAK4c,aAAahU,EAAU0R,GAEpC,GAEM,OAAA7E,CAAQC,EAA2B1R,4CACrC,MAAM2R,QAAEA,GAAsBD,EAAVE,2UAAKiH,CAAKnH,EAAxB,aAEN,IAAKC,EACD,MAAM,IAAIrC,EAA4B,CAAC,YAG3C,MAAM1K,SAAEA,EAAQ0C,UAAEA,GAAcqK,EAEhC,IAAK3V,KAAKgK,QACN,MAAM,IAAIwJ,EAGTxT,KAAKmc,2BAA0C,UAAbvT,UAC7B,IAAI8N,QAAQ,CAACU,EAASN,KACnB9W,KAAK8c,2BAA2BlU,EAAUwO,EAASN,EAAQxL,MAKnEtL,KAAK+c,0BAA0BnU,KAC/BA,IAAa6S,GAAoCuB,OAC7Chd,KAAKmc,mCAEJnc,KAAKyI,0BAA0B0N,YAAYP,EAAO5R,UAGtDhE,KAAK4b,iCAAiCvQ,cACxCzC,EACA5I,KAAKgK,QACLsB,EAER,GAEA,QAAA4L,GACI,OAAOR,QAAQI,OAAO,IAAIrD,EAC9B,CAEA,YAAA0D,SASI,OARAnX,KAAKgK,aAAU7H,EAEVnC,KAAKmc,2BACNnc,KAAKid,wBAGQ,QAAjBlZ,EAAA/D,KAAK+W,oBAAY,IAAAhT,GAAAA,EAAEiT,QAEZN,QAAQU,SACnB,CAQc,0BAAA0F,CACVlU,EACAsU,EACAC,EACA7R,kDAEM,IAAIoL,QAAc,CAACU,EAASN,KAC9B,MAAMsG,EAAUC,WAAWjG,EAASpX,KAAK8b,iBAEzC9b,KAAKic,YAAc,KACfqB,aAAaF,GACbpd,KAAK4Y,wBAAuB,GAErB9B,OAIf,IACI9W,KAAKgc,cAAgBhc,KAAK8b,gBAE1B,MAAMyB,QAAoBvd,KAAK4b,iCAAiCjR,eAC5DW,QAAAA,EAAa,kBAGXkS,EAAkBD,IAAgB7B,GAAkB+B,SACpDC,EAAiBH,IAAgB7B,GAAkBiC,aAEzD,GAAIH,EAGA,OAFAxd,KAAK4d,+BAEEV,IAGX,GAAIQ,EACA,OAAOP,IAGX,IAAKK,GAAmBxd,KAAKgc,aAAehc,KAAK+b,uBAC7C,aAAa/b,KAAK8c,2BACdlU,EACAsU,EACAC,EACA7R,SAIFtL,KAAK6d,qBAAqB,CAC5BjV,WACA0C,YACA8Q,iCAAkCpc,KAAKoc,mCAG3Cpc,KAAKiX,YAAY,IAAIkE,GACzB,CAAE,MAAOxR,GACLwT,GACJ,CACJ,GAEQ,4BAAAS,GACJ5d,KAAKic,cACLjc,KAAKgc,aAAe,CACxB,CAEQ,qBAAAiB,GACJjd,KAAK4d,8BACT,CAEc,oBAAAC,CACV7Z,kDAGMhE,KAAKmX,qBACLnX,KAAK4U,WAAW5Q,EAC1B,GAEQ,WAAAiT,CAAYtN,GAChB,MAAMmM,QAAEA,GAAY9V,KAAKoc,kCAAoC,GAExDpc,KAAKmc,2BACNnc,KAAKid,wBAGTjd,KAAK4Y,wBAAuB,GAExB9C,GAA8B,mBAAZA,GAClBA,EAAQnM,EAEhB,CAOQ,YAAA4L,CACJ3M,EACA0C,EACAgP,GAEA,MAAMwD,EAAgB9d,KAAK+d,0BAGrBvb,EADQxC,KAAKyI,0BAA0BM,WACjBG,wBACxBN,EACA0C,IAEE0S,YAAEA,GAAgBxb,EAAcoC,oBAAsB,IAEtDoM,UAAEA,EAAS8E,QAAEA,EAAO8B,eAAEA,EAAcE,WAAEA,GAAewC,EAErDrC,EAA8C,CAChDC,cAAetP,EACf6F,MAAOzO,KAAK4b,iCAAiCpN,oBAAoBwP,GACjE1I,OAAQ,CAACgD,EAAGC,IAAY+B,EAAc2D,aAAa1F,GACnD3O,YAAa,IAAM5J,KAAKke,cAActV,EAAU0C,EAAWgP,GAC3D7B,UAAYjC,GAASxW,KAAK0Y,cAAclC,EAAMsB,GAC9Ca,SAAU,KACN3Y,KAAK4Y,wBAAuB,GAC5B5Y,KAAK4d,gCAET9H,QAAUnM,IACN3J,KAAK4d,+BACL5d,KAAKme,cAAcxU,EAAOmM,IAE9BuC,QAAS,CAAOC,EAAGC,IAAW6F,GAAApe,UAAA,qBAC1B,OAAAsa,EAAczC,WAAWU,EAAQnB,QAASmB,EAAQzB,OAAO,IAGjE9W,KAAK+W,aAAe+G,EAAcjF,QAAQZ,GAErCjY,KAAK+W,aAAa+B,eAInBlB,GAA4C,mBAAnBA,GACzBA,IAGJ5X,KAAK+W,aAAagC,OAAO/H,GAC7B,CAEc,aAAAkN,CACVtV,EACA0C,EACAgP,kDAEA,MAAMzC,WAAEA,GAAeyC,QAQjBzC,EANqB,KACvB7X,KAAK4Y,wBAAuB,GAErB,IAAMlC,QAAQU,WAGY8E,GAErC,MAAMlS,QAAgBhK,KAAK4b,iCAAiChS,YACxD,4CAGJ,GACI5J,KAAK+c,0BAA0BnU,KAC7BA,IAAa6S,GAAoCuB,OAC/Chd,KAAKmc,2BACLvT,IAAa6S,GAAoC4C,MACvD,CACE,MAAMzI,EAAQ,CAAE0I,gBAAgB,GAC1Bta,EAAU,CACZua,OAAQ,CACJ3V,WACA0C,cAMR,SAFMtL,KAAKyI,0BAA0B0N,YAAYP,EAAO5R,GAEpD4E,IAAa6S,GAAoCuB,MAAO,CACxD,MACMwB,EAA4B,QAAhBza,EADJ/D,KAAKyI,0BAA0BM,WACrB0V,kBAAU,IAAA1a,OAAA,EAAAA,EAAEiG,cAE9BhK,KAAK4b,iCAAiCzR,YACxC,mCACAvB,EACA4V,EAER,OAEMxe,KAAK4b,iCAAiCvQ,cAAczC,EAAUoB,EAASsB,EACjF,CAEA,OAAOtB,CACX,GAEQ,aAAA0O,EACJM,QAAEA,GACFlB,GAEA9X,KAAKgK,QAAUgP,EAEflB,GACJ,CAEQ,aAAAqG,CACJxU,EACAmM,GAEA9V,KAAK4Y,wBAAuB,GAExB9C,GAA8B,mBAAZA,GAClBA,EAAQnM,EAEhB,CAOQ,YAAAiT,CACJhU,EACA0R,GAEA,MAAMwD,EAAgB9d,KAAK+d,0BACrBjV,EAAQ9I,KAAKyI,0BAA0BM,YACvCyD,UAAEA,EAASC,SAAEA,EAAQC,MAAEA,GAAU5D,EAAM4V,4BAEvCC,mBAAEA,EAAkBC,gBAAEA,GAAoBtE,EAEhD,IAAKqE,EACD,MAAM,IAAItL,EACN,iIAIR,MAAMwL,EAAwBxP,SAASyP,cAAcH,GAEjDE,IACAA,EAAsBE,UAAY,IAGtC,MAAMC,EAAgB,CAClB9G,cAAetP,EACf6F,MAAOmQ,GAAmB,GAC1BK,OAAQ,CACJhf,KAAM,CACF6G,MAAO,GAAG0F,KAAaC,KAE3BC,MAAO,CACH5F,MAAO4F,KAKSoR,EAAcoB,cAAcF,GAEpCjG,OAAO4F,EAC/B,CAOQ,sBAAA/F,CAAuBY,GACvBA,GAAaxZ,KAAKqV,0BAClBrV,KAAK2U,iBAAiBtD,KAAKrR,KAAKqV,2BAEhCrV,KAAK2U,iBAAiBjD,MAE9B,CAOQ,yBAAAqL,CAA0BnU,GAC9B,OAAOA,EAAS1G,gBAAiBuZ,EACrC,CAEQ,uBAAAsC,GACJ,IAAK/d,KAAKyD,WACN,MAAM,IAAIlD,EAGd,OAAOP,KAAKyD,UAChB,EE1cJ,MAYA0b,GAAe9f,EAVVoJ,GACD,IAAIkT,GACAlT,EACA0H,EAA+B1H,GAC/BvB,IACA,IAAI0J,EAAiB,CACjBE,gBAAiBoK,MAI4D,CACrF,CAAEkE,QAAS,sCCZf,IAAYC,IAAZ,SAAYA,GACRA,EAAA,UACAA,EAAA,SACH,CAHD,CAAYA,KAAAA,GAAqC,KCRlC,MAAMC,GACjB,UAAOpP,CAAIjQ,GACP,MAAMsf,EAAY,GAAGC,mBAAmB,GAAGvf,QACrCwf,EAASpQ,SAASoQ,OAExB,IAAI3Y,EAAQ,KAEZ,MAAM4Y,EAAaD,EAAOE,QAAQJ,GAElC,GAAIG,GAAc,EAAG,CACjB,IAAIE,EAAYH,EAAOE,QAAQ,IAAKD,IAEjB,IAAfE,IACAA,EAAYH,EAAOrZ,QAGvBU,EAAQ+Y,mBAAmBJ,EAAOK,UAAUJ,EAAaH,EAAUnZ,OAAQwZ,GAC/E,CAEA,OAAO9Y,CACX,CAEA,UAAOiZ,CAAI9f,EAAc6G,EAAe9C,EAAyB,CAAEgc,QAAQ,IACvE,IAAIC,EAAa,GAAGT,mBAAmBvf,MAASuf,mBAAmB1Y,KAEnE,MAAMoZ,QAAEA,EAAOC,KAAEA,EAAIC,OAAEA,EAAMJ,OAAEA,GAAWhc,EAE1C,GAAIkc,EACAD,GAAc,aAAaC,EAAQG,oBAChC,CACH,MAAMC,EAAM,IAAIC,KAEVC,EAAU,GAEhBF,EAAIG,QAAQH,EAAII,UAAsB,GAAVF,EAAe,KAE3CP,GAAc,aAAaK,EAAID,eACnC,CAEIF,IACAF,GAAc,UAAUE,KAGxBC,IACAH,GAAc,YAAYG,KAG1BJ,IACAC,GAAc,YAGlB5Q,SAASoQ,OAASQ,CACtB,CAEA,aAAOU,CAAO1gB,EAAc+D,GACxBsb,GAAcS,IAAI9f,EAAM,GAAET,OAAAC,OAAA,CAAIygB,QAAS,IAAIK,KAAK,IAAOvc,GAC3D,MC7DC4c,sSCwBU,MAAMC,GAGjB,WAAAjhB,GACII,KAAKsC,OAASA,MAClB,CAEM,wBAAAwe,CACF5d,EACA6d,EACAlQ,4CAOA,GALIkQ,IACAze,OAAO0e,aAAaC,QAAQ,cAAe,WAC3C3e,OAAO0e,aAAaC,QAAQ,SAAU,aAGrCjhB,KAAKsC,OAAO4e,eAAgB,CAC7B,MAAMC,EAAgB,CAClBC,KAAM,CACFC,uBAAwB,gBAIhCrhB,KAAKsC,OAAO4e,qBAAuBhe,EAAkBoe,SAAS,CAC1DzQ,OAAQA,GAAUsQ,GAE1B,CAEA,OAAOnhB,KAAKsC,OAAO4e,cACvB,GAEA,wBAAAK,GACI,IAAKvhB,KAAKsC,OAAO4e,eACb,MAAM,IAAI3gB,EAGd,OAAOP,KAAKsC,OAAO4e,cACvB,CAQM,qBAAAM,CAAsB9U,4CAGxB,OAFuB1M,KAAKuhB,2BAENE,SAASC,sBAAsBhV,EACzD,GAQM,gCAAAiV,CACFC,4CAEA,OAAKA,EAIkB5hB,KAAKuhB,2BAENE,SAASI,0BAA0BD,GAL9C,EAMf,GAaA,sBAAAE,CAAuB7e,GACnB,MAAMid,EAAU,IAAIK,KAEpBL,EAAQ6B,QAAQ7B,EAAQ8B,UAAY,IAEpC,MAAMC,EAAgB,CAClB/B,UACAF,QAAQ,GAGZV,GAAcS,IAAI,wBAAyB9c,EAAWgf,EAC1D,CAEA,sBAAAC,GACI5C,GAAcqB,OAAO,wBACzB,CAEA,mBAAAwB,GACI,OAAO7C,GAAcpP,IAAI,0BAA4B,EACzD,CAUA,wCAAAkS,CACIxZ,EACAyZ,aAEA,MAAMC,oBAAEA,EAAmBC,YAAEA,GAAgBF,EAEvCG,EAA6D,QAAtCzI,EAAgC,QAAhC/L,EAAiB,QAAjBjK,EAAAwe,aAAW,EAAXA,EAAaE,YAAI,IAAA1e,OAAA,EAAAA,EAAE2e,qBAAa,IAAA1U,OAAA,EAAAA,EAAEyU,YAAI,IAAA1I,OAAA,EAAAA,EAAE4I,eAC/DC,EAAwBL,aAAW,EAAXA,EAAaM,gBACrCC,EAAoBP,aAAW,EAAXA,EAAatiB,KACjC8iB,EAAmBR,aAAW,EAAXA,EAAaE,KAEhCI,EAAkBD,EAClB5iB,KAAKgjB,qBACDJ,EAAsBrW,QACtBqW,EAAsB3iB,KACtB2iB,EAAsBK,kBAE1B9gB,EACAwgB,EACFH,GAAwBM,EAClB9iB,KAAKgjB,qBACDR,EACAM,EACAF,aAAqB,EAArBA,EAAuBK,kBAE3B9gB,EACJgX,EAAc4J,EACd/iB,KAAKkjB,wBAAwBta,EAAUma,GACvC,GAEAI,EAAYnjB,KAAKojB,gBAAgB,CAACP,EAAiBF,IAEzD,MAAO,CACHL,oBACIA,GAAuBla,EAAkCib,aAC7DF,YACAR,iBACAE,kBACA1J,cAER,CAEA,uBAAA+J,CACIta,EACA+K,GAEA,MAAMjP,GAAEA,EAAEge,cAAEA,GAAkB/O,GACxB2P,MAAEA,EAAKC,OAAEA,EAAMC,WAAEA,GAAed,EAAcD,MAE7CgB,EAAYC,GAAeH,EAAOthB,MAAM,KAE/C,MAAO,CACH,CACIqX,YAAa5U,EACb4e,QACAK,mBAAmB,EACnBD,cACAD,aACAG,IAAK,GACLC,MAAOL,EACPM,OAAQlb,EACRoC,SAAUpC,EACV2Q,wBAAwB,EACxBwK,sCAAuC1E,GAAsC2E,IAC7E9jB,KAAM,QAGlB,CAEA,oBAAA+jB,CAAqB1X,GACjB,MAAO,CACHK,SAASL,aAAO,EAAPA,EAASK,UAAW,GAC7BsX,cAAc3X,aAAO,EAAPA,EAASM,WAAY,GACnCsX,cAAc5X,aAAO,EAAPA,EAASO,WAAY,GACnCsX,YAAY7X,aAAO,EAAPA,EAASY,uBAAuBZ,aAAO,EAAPA,EAASW,kBAAmB,GACxEmX,YAAY9X,aAAO,EAAPA,EAASQ,OAAQ,GAC7BE,YAAYV,aAAO,EAAPA,EAASU,aAAc,GACnCD,aAAaT,aAAO,EAAPA,EAASS,cAAe,GAE7C,CAEA,oBAAAgW,CACIzW,EACA+X,EACA3X,EACAS,GAEA,MAAOZ,EAAWC,GAAY6X,EAAYC,SAAStiB,MAAM,KAEnDuiB,GACc7X,aAAK,EAALA,EAAO8X,iBAAkB,GADvCD,GAEW7X,aAAK,EAALA,EAAOK,cAAe,GAGvC,MAAO,CACHtI,GAAI6b,KAAKD,MACTpgB,KAAM,iBACNsM,UAAW8X,EAAY9X,WAAaA,GAAa,GACjDC,SAAU6X,EAAY7X,UAAYA,GAAY,GAC9CG,QAASL,EAAQK,SAAW,GAC5BC,SAAUN,EAAQ2X,aAClBpX,SAAUP,EAAQ4X,cAAgB,GAClCpX,KAAMR,EAAQ8X,WACdnX,gBAAiBX,EAAQ6X,WACzBjX,oBAAqBZ,EAAQ6X,WAC7BM,QAASnY,EAAQS,aAAe,GAChCA,YAAaT,EAAQS,aAAe,GACpCC,WAAYV,EAAQU,WACpBN,MAAO6X,EAAwBA,EAC/BpX,aAAcA,GAAgB,GAEtC,CASA,eAAAgW,CAAgBD,GACZ,OAAOA,EAAUwB,OACb,CAACC,EAAsCC,IAC9BA,EAIyBD,EAAkBE,KAAMC,GAClD/kB,KAAKglB,iBAAiBD,EAAiBF,IAIrCD,EACA,IAAIA,EAAmBC,GATlBD,EAWf,GAER,CAEQ,gBAAAI,CACJC,EACAC,GAEA,OAAOC,EAAQnlB,KAAKolB,iBAAiBH,GAAejlB,KAAKolB,iBAAiBF,GAC9E,CAEQ,gBAAAE,CAAiB7Y,GACrB,OAAO8Y,EAAK9Y,EAAS,CAAC,KAAM,SAChC,EC1RW,SAAS+Y,KACpB,OAAO,IAAIzE,EACf,EFFA,SAAKD,GACDA,EAAA,oBACAA,EAAA,4CACAA,EAAA,wBACAA,EAAA,oBACAA,EAAA,wBACAA,EAAA,gDACAA,EAAA,+CACH,CARD,CAAKA,KAAAA,GAAe,KAUpB,MAAA2E,GAAA,GGTe,SAASC,GACpBvG,GAEA,OACIsG,GAAgBE,cAAcxG,GAC9BsG,GAAgBG,YAAYzG,GAC5BsG,GAAgBI,cAAc1G,CAEtC,CCRe,SAAS2G,GACpB3G,GAEA,OACIsG,GAAgBM,0BAA0B5G,GAC1CsG,GAAgBO,wBAAwB7G,GACxCsG,GAAgBQ,0BAA0B9G,CAElD,CCJe,MAAM+G,WAAiCtmB,EAClD,WAAAE,CAAYC,GACRE,MACIF,GACI,oGAGRG,KAAKC,KAAO,2BACZD,KAAKE,KAAO,+BAChB,ECdJ,IAAY+lB,IAAZ,SAAYA,GACRA,EAAAA,EAAA,+DACAA,EAAAA,EAAA,mDACAA,EAAAA,EAAA,iDACAA,EAAAA,EAAA,mDACAA,EAAAA,EAAA,8DACH,CAND,CAAYA,KAAAA,GAAuB,KAapB,MAAMC,WAA4BxmB,EAC7C,WAAAE,CAAmBc,GACfX,MAOR,SAAyBG,GACrB,OAAQA,GACJ,KAAK+lB,GAAwBE,uBACzB,MAAO,oFAEX,KAAKF,GAAwBG,sBACzB,MAAO,mFAEX,KAAKH,GAAwBI,uBACzB,MAAO,oFAEX,KAAKJ,GAAwBK,6BACzB,MAAO,mFAEX,QACI,MAAO,6EAEnB,CAxBcC,CAAgB7lB,IADPV,KAAAU,QAAAA,EAGfV,KAAKC,KAAO,sBACZD,KAAKE,KAAO,iBAChB,ECfW,MAAMsmB,WAAgC9mB,EACjD,WAAAE,CAAmB6mB,EAAyC5mB,GACxDE,MAAMF,GAAW,qEADFG,KAAAymB,QAAAA,EAGfzmB,KAAKC,KAAO,0BACZD,KAAKE,KAAO,sBAChB,ySC+CW,MAAMwmB,GAejB,WAAA9mB,CACY6I,EACAgM,EACAoH,EACA8K,GAHA3mB,KAAAyI,0BAAAA,EACAzI,KAAAyU,yBAAAA,EACAzU,KAAA6b,sBAAAA,EACA7b,KAAA2mB,oBAAAA,CACT,CAEG,UAAA/R,CACF5Q,4CAEA,MAAM4E,SAAEA,EAAQge,0BAAEA,EAAyB/R,eAAEA,GAAmB7Q,EAC1D6iB,EAAsCD,GAA6B/R,GAEnEiS,KAAEA,EAAIC,iCAAEA,EAAgCC,eAAEA,GAC5CH,GAAuC,GAE3C,IAAKje,EACD,MAAM,IAAIyK,EACN,qFAIR,IAAKyT,EACD,MAAM,IAAIzT,EACN,gGAIRrT,KAAKinB,kBAAoBH,EAEzB9mB,KAAKknB,iBAAmB1B,GAAuBsB,EAAK7H,QACpDjf,KAAKmnB,wBACDvB,GAA8BkB,EAAK7H,UAAYjf,KAAKonB,2BAElDpnB,KAAKyI,0BAA0BqM,kBAAkBlM,SACjD5I,KAAKyU,yBAAyB1R,cAAc6F,OAAUzG,GAAW,GAAM,IAEzEnC,KAAKknB,kBAAoBlnB,KAAKmnB,iCACxBnnB,KAAKqnB,iBAAiBP,EAAMC,IAGtCC,SAAAA,IAEIhnB,KAAKsnB,+BAA+B1e,WAC9B5I,KAAKunB,gCAAgC3e,GAEnD,GAEM,OAAA6M,CAAQC,EAA2B1R,4CACrC,MAAM2R,QAAEA,GAAsBD,EAAVE,2UAAK4R,CAAK9R,EAAxB,cACA9M,SAAEA,EAAQ2C,YAAEA,GAAgBoK,GAAW,GAE7C,IAAKA,IAAY/M,EACb,MAAM,IAAI0K,EAA4B,CAAC,YAK3C,GAFAtT,KAAKynB,qBAAuBlc,EAExBvL,KAAKknB,kBAAoBlnB,KAAKmnB,8BACxBnnB,KAAK0nB,kCACL1nB,KAAK2nB,uBACR,CAEH,MAAM3d,QAAEA,SAAkBhK,KAAKyU,yBAAyBxK,sBACpD,oCACAjK,KAAK4nB,uBAGT5nB,KAAK6nB,gBAAkB7d,CAC3B,CAEA,MAAM8d,EAAuB9nB,KAAKkW,sBAC9BtN,EACA2C,EACAvL,KAAK6nB,gBACL7nB,KAAK+nB,4BAGH/nB,KAAKyI,0BAA0B0N,YAAYP,EAAO5R,SAClDhE,KAAKyI,0BAA0B4C,cAAcyc,EACvD,GAEA,QAAA5Q,GACI,OAAOR,QAAQI,OAAO,IAAIrD,EAC9B,CAEM,YAAA0D,wDAMF,aALmB,QAAbpT,EAAA/D,KAAKgoB,gBAAQ,IAAAjkB,OAAA,EAAAA,EAAEiT,cACC,QAAhBhJ,EAAAhO,KAAKioB,mBAAW,IAAAja,OAAA,EAAAA,EAAEgJ,cACF,QAAhB+C,EAAA/Z,KAAKkoB,mBAAW,IAAAnO,OAAA,EAAAA,EAAE/C,cACJ,QAAdmR,EAAAnoB,KAAKooB,iBAAS,IAAAD,OAAA,EAAAA,EAAEnR,QAEfN,QAAQU,SACnB,GAUQ,qBAAAlB,CACJtN,EACA2C,EACAvB,EACAqe,GAEA,MAAMzU,qBAAEA,GAAuB,EAAKC,6BAAEA,GAA+B,GACjEH,EAAuBnI,GAAeA,EAAc,GAElDyI,EACFzI,GAAeuI,EAAoBvI,GAAeA,EAAYyI,kBAAe7R,EAE3EqV,EAAexI,EACjB,CACIsZ,mBAAoBD,EACpB5Q,MAAOzD,GAEX/E,GAGJ,MAAO,CACHrG,WACA2C,YAAa,CACTqI,uBACAC,+BACAG,eACAxI,iBAAgBhM,OAAAC,OAAAD,OAAAC,OAAA,GACR4oB,GAASrU,EAAe,CAAEwD,gBAAiB,IAC3CxN,EAAU,CAAEue,gBAAiB,CAAEtd,SAAUjB,IAAc,KAI3E,CAOc,gBAAAqd,CACVmB,EACAzB,4CAEA,MAAM9H,OAAEA,EAAMpO,OAAEA,GAAW2X,EAErBpf,EAAYpJ,KAAKyU,yBAAyBpL,sBAC1Cof,EAAkBzoB,KAAK0oB,mBAAmBzJ,GAE1C0J,EAAgBnpB,OAAAC,OAAA,CAClBgP,MAAOzO,KAAK4oB,eAAe/X,GAC3B4H,UAAW,EACPO,UACA6P,kBACAC,qBAEA,GACIA,IAAmB1N,GAAmB2N,IACtCD,IAAmB1N,GAAmB4N,QAEtC,MAAM,IAAIrpB,MAGd,OAAOK,KAAK0Y,cAAc,CAAEM,UAAS6P,qBAEzC/S,QAAS,KACL,MAAM,IAAIkQ,IAEdiD,YAAa,CACTC,SAAWC,GAAUnpB,KAAKopB,gBAAgBZ,EAAaW,GACvDE,QAAUF,GAAUnpB,KAAKspB,eAAed,EAAaW,GACrDI,OAASJ,GAAUnpB,KAAKwpB,cAAchB,EAAaW,GACnDM,qBAAuBN,GAAUnpB,KAAKypB,qBAAqBjB,EAAaW,KAEzEV,GAKP,GAFAzoB,KAAK0pB,iBAAmBtgB,EAAUugB,WAAWhB,IAExC3oB,KAAK0pB,WAAW5Q,aACjB,MAAM,IAAIoN,GAAoBD,GAAwBG,uBAG1D,IACIpmB,KAAK4pB,uBAAuB3K,GAExBuG,GAAuBvG,WACjBjf,KAAK4c,aAAaqC,IAGxB2G,GAA8B3G,WACxBjf,KAAK6pB,oBAAoB5K,GAEvC,CAAE,MAAOtV,GAC2C,mBAArCod,GACPA,EAAiCpd,EAEzC,CACJ,GAUQ,kBAAA+e,CACJzJ,GAIA,OAFsB2G,GAA8B3G,GAE7Bjf,KAAK8pB,gCAAkC9pB,KAAK+pB,qBACvE,CAEQ,6BAAAD,GACJ,MAAO,CACHE,sBAAuB,IAAYC,GAAAjqB,UAAA,qBAC/B,MAAMkK,WAAEA,UACGlK,KAAKyU,yBAAyBxK,sBACjC,oCAAmCzK,OAAAC,OAAAD,OAAAC,OAAA,GAE5BO,KAAK4nB,uBAAqB,CAC7B1d,YAAY,OAEd,GAEV,OAAOA,CACX,GAER,CAEQ,mBAAA6f,GACJ,MAAO,CACHngB,YAAa,IAAYqgB,GAAAjqB,UAAA,qBACrB,MAAMgK,QAAEA,UACGhK,KAAKyU,yBAAyBxK,sBACjC,oCACAjK,KAAK4nB,yBACH,GAEV,OAAO5d,CACX,GAER,CAWQ,aAAA0O,EAAcM,QAAEA,EAAO6P,gBAAEA,IACzB7P,IACAhZ,KAAK6nB,gBAAkB7O,GAGvB6P,IACA7oB,KAAK+nB,qBAAuBc,EAEpC,CAOc,YAAAjM,CAAaoC,wDACvB,MAAM0K,EAAa1pB,KAAKkqB,wBAEE,QAAtBnmB,EAAAib,EAAcmL,gBAAQ,IAAApmB,OAAA,EAAAA,EAAEgU,eACxB/X,KAAKgoB,SAAW0B,EAAWU,SAAS,CAChCC,YAAa,WAEXrqB,KAAKgoB,SAASjP,OAAO,IAAIiG,EAAcmL,SAASpS,iBAG9B,QAAxB/J,EAAAgR,EAAcsL,kBAAU,IAAAtc,OAAA,EAAAA,EAAE+J,eAC1B/X,KAAKioB,YAAcyB,EAAWa,oBACxBvqB,KAAKioB,YAAYlP,OAAO,IAAIiG,EAAcsL,WAAWvS,iBAGrC,QAAtBgC,EAAAiF,EAAcwL,gBAAQ,IAAAzQ,OAAA,EAAAA,EAAEhC,eACxB/X,KAAKooB,UAAYsB,EAAWe,UAAU,CAClCJ,YAAa,WAEXrqB,KAAKooB,UAAUrP,OAAO,IAAIiG,EAAcwL,SAASzS,iBAG/B,QAAxBoQ,EAAAnJ,EAAc0L,kBAAU,IAAAvC,OAAA,EAAAA,EAAEpQ,eAC1B/X,KAAKkoB,YAAcwB,EAAWiB,YAAY,CACtCN,YAAa,WAEXrqB,KAAKkoB,YAAYnP,OAAO,IAAIiG,EAAc0L,WAAW3S,eAEnE,GAEc,mBAAA8R,CAAoB7K,sDAC9B,MAAM0K,EAAa1pB,KAAKkqB,wBAEc,QAAlCnmB,EAAAib,EAAc4L,4BAAoB,IAAA7mB,OAAA,EAAAA,EAAEgU,eACpC/X,KAAKgoB,SAAW0B,EAAWU,SAAS,CAChCC,YAAa,WAEXrqB,KAAKgoB,SAASjP,OAAO,IAAIiG,EAAc4L,qBAAqB7S,iBAG9B,QAApC/J,EAAAgR,EAAc6L,8BAAsB,IAAA7c,OAAA,EAAAA,EAAE+J,eACtC/X,KAAKioB,YAAcyB,EAAWa,oBACxBvqB,KAAKioB,YAAYlP,OAAO,IAAIiG,EAAc6L,uBAAuB9S,iBAGnC,QAApCgC,EAAAiF,EAAc8L,8BAAsB,IAAA/Q,OAAA,EAAAA,EAAEhC,eACtC/X,KAAKkoB,YAAcwB,EAAWiB,YAAY,CACtCN,YAAa,WAEXrqB,KAAKkoB,YAAYnP,OAAO,IAAIiG,EAAc8L,uBAAuB/S,eAE/E,GAOQ,mBAAA6P,GACJ,IAAK5nB,KAAKynB,qBACN,MAAO,GAGX,GAAI/T,EAAuB1T,KAAKynB,sBAAuB,CACnD,MAAM7T,qBAAEA,EAAoBC,6BAAEA,GAC1B7T,KAAKynB,qBAET,MAAO,CACH7T,uBACAC,+BAER,CAEA,GAAIC,EAAoB9T,KAAKynB,sBAAuB,CAChD,MAAMzT,aAAEA,GAAiBhU,KAAKynB,qBAE9B,MAAO,CACHzT,eAER,CAEA,MAAO,EACX,CAEQ,0BAAA+W,EAA2BC,UAC/BA,IAKA,MAAO,CACHC,UAAWjrB,KAAKkrB,aAAaF,GAErC,CAOc,gBAAArD,4CACV,MAAM+B,EAAa1pB,KAAKkqB,uBAElBvH,EADQ3iB,KAAKyI,0BAA0BM,WAChB2V,2BAEvByM,EAAe,CACjBxI,eAAgB,CACZ/V,QAAS+V,EAAe/V,QACxBsX,aAAcvB,EAAe9V,SAC7BsX,aAAcxB,EAAe7V,SAC7BsX,WAAYzB,EAAexV,oBAC3BkX,WAAY1B,EAAe5V,KAC3BE,WAAY0V,EAAe1V,WAC3BD,YAAa2V,EAAe3V,cAIpC,IACQhN,KAAKmnB,8BACCuC,EAAW0B,eAEX1B,EAAW0B,OAAOD,EAEhC,CAAE,MAAO7S,GACL,MAAM,IAAI0N,GACN,wDAER,CACJ,GAOc,yBAAA0B,oDACV,MAAMgC,EAAa1pB,KAAKkqB,uBAClBmB,QAAwB3B,EAAW3gB,WAAWuiB,KAAM9U,GAASA,GAC7D+U,EAAiBvrB,KAAKwrB,gBAAgBH,GAE5C,IAAIE,EAAeE,QAMnB,MAFkC,QAAlCzd,EAAsB,QAAtBjK,EAAA/D,KAAKinB,yBAAiB,IAAAljB,OAAA,EAAAA,EAAE8T,kBAAU,IAAA7J,GAAAA,EAAA0d,KAAA3nB,EAAGwnB,GAE/B,IAAI/E,GAAwBxmB,KAAK2rB,oBAAoBJ,EAAe5jB,QAC9E,GAEQ,eAAA6jB,EAAgBvM,OACpBA,IAEA,MAAM2M,EAAapsB,OAAAC,OAAA,GAAQwf,UAEpB2M,EAAcC,cAErB,MAAMC,EAAatsB,OAAOmH,KAAKilB,GAiB/B,MAAO,CAAEH,QAbOK,EAAWC,MAAOllB,IAAO,IAAA9C,EAAC,OAAkB,QAAlBA,EAAA6nB,EAAc/kB,UAAI,IAAA9C,OAAA,EAAAA,EAAE0nB,UAa5C9jB,OAXHmkB,EAAWnH,OAAO,CAACqH,EAAcnlB,WAC5C,MAAMokB,EAAYjrB,KAAKkrB,aAAarkB,GAEpC,OAAArH,OAAAC,OAAAD,OAAAC,OAAA,GACOusB,GAAY,CACff,CAACA,IAA8B,QAAlBlnB,EAAA6nB,EAAc/kB,UAAI,IAAA9C,OAAA,EAAAA,EAAE0nB,cAC3BtpB,EACA,CAACnC,KAAKisB,2BAA2BhB,OAE5C,IAGP,CAEQ,0BAAAgB,CAA2BhB,GAC/B,OAAQA,GACJ,KAAK1F,GAAgB2G,SACrB,KAAK3G,GAAgBO,qBACjB,MAAO,CACHmF,YACAprB,QAAS,oBACTK,KAAM,qBAGd,KAAKqlB,GAAgBE,WACrB,KAAKF,GAAgBM,uBACjB,MAAO,CACHoF,YACAprB,QAAS,sBACTK,KAAM,uBAGd,KAAKqlB,GAAgBI,WACrB,KAAKJ,GAAgBQ,uBACjB,MAAO,CACHkF,YACAprB,QAAS,sBACTK,KAAM,uBAGd,QACI,MAAO,CACH+qB,YACAprB,QAAS,gBACTK,KAAM,WAGtB,CAEQ,mBAAAyrB,CACJQ,EAAoD,IAEpD,MAAMxkB,EAAyC,GAc/C,OAb6BnI,OAAOmH,KAAKwlB,GAIpBvlB,QAASC,YAC1Bc,EAAOd,GAAO,CACV,CACIhH,SAAmC,QAA1BmO,EAAqB,QAArBjK,EAAAooB,EAAiBtlB,UAAI,IAAA9C,OAAA,EAAAA,EAAG,UAAE,IAAAiK,OAAA,EAAAA,EAAEnO,UAAW,GAChDK,KAAM2G,MAKXc,CACX,CAOQ,YAAAujB,CAAahrB,GACjB,OAAQA,GACJ,IAAK,OACD,OAAOqlB,GAAgBG,SAE3B,IAAK,kBACL,IAAK,SACD,OAAO1lB,KAAKknB,iBACN3B,GAAgBE,WAChBF,GAAgBM,uBAE1B,IAAK,kBACL,IAAK,SACD,OAAO7lB,KAAKknB,iBACN3B,GAAgBI,WAChBJ,GAAgBQ,uBAE1B,IAAK,eACL,IAAK,MACD,OAAO/lB,KAAKknB,iBACN3B,GAAgB2G,SAChB3G,GAAgBO,qBAE1B,QACI,MAAM,IAAInmB,MAAM,yBAE5B,CAOQ,oBAAAuqB,GACJ,IAAKlqB,KAAK0pB,WACN,MAAM,IAAIxD,GAAoBD,GAAwBG,uBAG1D,OAAOpmB,KAAK0pB,UAChB,CAEQ,cAAAd,CACJ/X,aAEA,MAAMub,EAAe,CACjB,aAA4B,QAAfroB,EAAA8M,aAAM,EAANA,EAAQwb,eAAO,IAAAtoB,OAAA,EAAAA,EAAEuoB,WAAY,OAC1C,eACmB,QAAfte,EAAA6C,aAAM,EAANA,EAAQwb,eAAO,IAAAre,OAAA,EAAAA,EAAEue,aAAc,2CACnC,eAA8B,QAAfxS,EAAAlJ,aAAM,EAANA,EAAQwb,eAAO,IAAAtS,OAAA,EAAAA,EAAEyS,aAAc,MAC9CC,QAAS,OACTC,QAAS,YAGPvL,EAAa3hB,OAAAC,OAAAD,OAAAC,OAAA,GAAQ2sB,GAAY,CAAE1d,MAAO,YAGhD,MAAO,CACHie,MAAOxL,EACP,WAJa3hB,OAAAC,OAAAD,OAAAC,OAAA,GAAQ2sB,GAAY,CAAE1d,MAAO,QAK1C,SAAUyS,EACV,SAAUA,EAElB,CAEQ,sBAAAyI,CACJ3K,GAEAzf,OAAOotB,OAAO3N,GAAU,IAAIrY,QAASlC,IACjC,MAAM0K,EAAUC,SAASC,eAAe,IAAG5K,aAAE,EAAFA,EAAIqT,cAAe,MAE1D3I,IACAA,EAAQX,MAAMie,QAAU,MACxBtd,EAAQX,MAAMoe,UAAY,OAC1Bzd,EAAQX,MAAM+D,OAAS,OACvBpD,EAAQX,MAAMqe,WAAa,cAC3B1d,EAAQX,MAAMse,aAAe,OAC7B3d,EAAQX,MAAMue,WAAa,SAGvC,CAEQ,kBAAA5F,GACJ,OAAIpnB,KAAKinB,mBACEznB,OAAOotB,OAAO5sB,KAAKinB,kBAAkBhI,QAAQ6F,KAC/Che,QAAoB3E,IAAV2E,EAKvB,CAOQ,eAAAsiB,CACJZ,EACAW,SAEuB,QAAvBplB,EAAAykB,aAAW,EAAXA,EAAa3Q,kBAAU,IAAA9T,GAAAA,EAAA2nB,KAAAlD,EAAGxoB,KAAKwrB,gBAAgBrC,GACnD,CAEQ,cAAAG,CACJd,EACAW,SAEoB,QAApBplB,EAAAykB,aAAW,EAAXA,EAAaa,eAAO,IAAAtlB,GAAAA,EAAA2nB,KAAAlD,EAAGxoB,KAAK+qB,2BAA2B5B,GAC3D,CAEQ,aAAAK,CACJhB,EACAW,SAEmB,QAAnBplB,EAAAykB,aAAW,EAAXA,EAAae,cAAM,IAAAxlB,GAAAA,EAAA2nB,KAAAlD,EAAGxoB,KAAK+qB,2BAA2B5B,GAC1D,CAEQ,oBAAAM,CACJjB,EACAW,SAEoB,QAApBplB,EAAAykB,aAAW,EAAXA,EAAayE,eAAO,IAAAlpB,GAAAA,EAAA2nB,KAAAlD,EAAGxoB,KAAK+qB,2BAA2B5B,GAC3D,CAQQ,8BAAA7B,CAA+B1e,WACnC,MAAME,EAAQ9I,KAAKyI,0BAA0BM,WACvCvG,EAAgBsG,EAAMI,wBAAkDN,GACxEskB,EAA0BpkB,EAAMqkB,6BAChCC,GCvsBVC,EDwsBQH,KCjsBJ,wBAAyBG,GAAY,cAAeA,GAAY,gBAAiBA,GDmsB3EH,EACA,GC5sBC,IACXG,ED6sBI,OACqC,QAAjCtpB,EAAAvB,aAAa,EAAbA,EAAeoC,0BAAkB,IAAAb,OAAA,EAAAA,EAAEupB,gCACF,QAAjCtf,EAAAxL,aAAa,EAAbA,EAAeoC,0BAAkB,IAAAoJ,OAAA,EAAAA,EAAEuf,uCAClCH,aAAqC,EAArCA,EAAuC9K,oBAEhD,CAGc,+BAAAiF,CAAgC3e,4CAC1C,IACI,MAAME,EAAQ9I,KAAKyI,0BAA0BM,WACvCsB,EAAOvB,EAAME,iBACbxG,EAAgBsG,EAAMI,wBAAkDN,IACxEhE,mBAAEA,GAAuBpC,EAE/B,KAAKoC,aAAkB,EAAlBA,EAAoB4oB,oBACrB,OAGJ,MAAMC,QAA0BztB,KAAK6b,sBAAsB7Y,qBACvDR,EACA6H,EAAK/D,SAAS2C,KACdoB,EAAK3F,GACLoE,EAAMK,mBAGJnJ,KAAK2mB,oBAAoB7F,yBAC3B2M,KACE7oB,aAAkB,EAAlBA,EAAoBS,2BAE9B,CAAE,MAAOiT,GAGT,CACJ,IEzuBJ,MAUAoV,GAAeruB,EARVoJ,GACD,IAAIie,GACAje,EACA0H,EAA+B1H,GAC/BvB,IACAoe,MAG0E,CAC9E,CAAE5gB,GAAI,sUCMK,MAAMipB,GAOjB,WAAA/tB,CACY6I,EACAmlB,EACAjZ,EACAmH,EAdS,IAeTC,EAdS,KAUT/b,KAAAyI,0BAAAA,EACAzI,KAAA4tB,sBAAAA,EACA5tB,KAAA2U,iBAAAA,EACA3U,KAAA8b,gBAAAA,EACA9b,KAAA+b,uBAAAA,EARJ/b,KAAAgc,aAAe,EACfhc,KAAAic,YAAcC,CAQnB,CAEG,UAAAtH,CACF5Q,4CAEA,MAAMsH,UAAEA,EAAS1C,SAAEA,EAAQilB,sBAAEA,GAA0B7pB,EAEvD,IAAK4E,EACD,MAAM,IAAIyK,EACN,qFAIR,IAAK/H,EACD,MAAM,IAAI+H,EACN,sFAIR,IAAKwa,EACD,MAAM,IAAIxa,EACN,kGAIR,MAAMya,mBAAEA,EAAkB9c,UAAEA,EAAS+c,mBAAEA,GAAuBF,EAE9D,IAAK7c,EACD,MAAM,IAAIqC,EACN,sFAIR,IAAKya,EACD,MAAM,IAAIza,EACN,+FAIR,IAAK0a,EACD,MAAM,IAAI1a,EACN,+FAIRrT,KAAKqV,0BAA4B0Y,EAEjC,MACMvrB,EADQxC,KAAKyI,0BAA0BM,WACjBG,wBACxBN,EACA0C,IAEEvG,WAAEA,GAAevC,EAAcoC,oBAAsB,GAE3D,IAAKG,EACD,MAAM,IAAIsO,EACN,6EAIRrT,KAAK6tB,sBAAwBA,QAEvB7tB,KAAK4tB,sBAAsB7qB,cAAc6F,GAE/C5I,KAAKguB,qBAAqBjpB,EAAY6D,EAAU0C,GAEhDtL,KAAKiuB,qBAELjuB,KAAKkuB,gBAAgBJ,EAAoB9c,EAC7C,GAEM,OAAAyE,CAAQC,EAA2B1R,4CACrC,MAAM2R,QAAEA,GAAsBD,EAAVE,2UAAKuY,CAAKzY,EAAxB,cAEAwD,gBAAEA,GAAoBlZ,KAAK6tB,uBAAyB,GAE1D,IAAKlY,EACD,MAAM,IAAIrC,EAA4B,CAAC,YAG3C,IAAK4F,GAA8C,mBAApBA,EAC3B,MAAM,IAAI7F,EACN,4FAIRrT,KAAK4Y,wBAAuB,GAE5B,IACI,MAAM5O,QAAgBhK,KAAK4tB,sBAAsBhkB,YAC7C,2CACA,CAAEwkB,WAAYpuB,KAAKquB,QAGjBC,iBAAEA,EAAgBC,mBAAEA,EAAkBC,wBAAEA,GAC1CtV,IAEE3N,EAAc,CAChBC,iBAAkB,CACdC,yBAA0B,KAC1BC,iCAAkC,KAClCC,YAAa,KACbC,UAAW+J,EAAQ/M,SACnB6lB,SAAU,CACNC,WAAY1uB,KAAK2uB,cAAcL,GAC/B3hB,MAAO,CACHuB,gBAAiBqgB,EACjB1gB,aAAc2gB,EAAwBvsB,MAAM,KAAK,KAGzD4J,eAAgB,CACZZ,SAAUjB,KAWtB,aANMhK,KAAKyI,0BAA0B0N,YAAYP,EAAO5R,SAClDhE,KAAKyI,0BAA0B4C,cAAc,CAC/CzC,SAAU+M,EAAQ/M,SAClB2C,sBAGS,IAAImL,QAAQ,CAACU,EAASN,KAC/B9W,KAAK8c,2BACDnH,EAAQ/M,SACRwO,EACAN,EACAnB,EAAQrK,YAGpB,CAAE,MAAO3B,GAGL,OAFA3J,KAAKiX,YAAYtN,GAEV,IAAI+M,QAAQ,CAACG,EAAUC,IAAWA,IAC7C,CACJ,GAEA,QAAAI,GACI,OAAOR,QAAQI,OAAO,IAAIrD,EAC9B,CAEA,YAAA0D,GACI,MAAM2W,mBAAEA,GAAuB9tB,KAAK6tB,uBAAyB,GACvDe,EAAiBvf,SAASwf,iBAAiB,8BAA8B,GACzEC,EAAiBzf,SAASwf,iBAAiB,8BAA8B,GAO/E,GALA7uB,KAAK4d,+BAELgR,EAAejO,SACfmO,EAAenO,SAEXmN,EAAoB,CACpB,MAAMiB,EAA4B1f,SAASC,eAAewe,GAE1DiB,SAAAA,EAA2BpO,QAC/B,CAEA,OAAOjK,QAAQU,SACnB,CAEQ,aAAAuX,CAAcK,GAClB,MAAMC,EAAgBjvB,KAAKkvB,WAAWF,EAAKhN,WACrCmN,EAAiBnvB,KAAKkvB,WAAWF,EAAKI,WAAa,GAEzD,MAAO,GAAGJ,EAAKK,iBAAiBF,KAAkBF,GACtD,CAEQ,UAAAC,CAAWF,GACf,MAAO,GAAGA,EAAO,GAAK,EAAI,KAAKA,GACnC,CAEQ,eAAAd,CAAgBoB,EAAqCte,GACzD,MAAMue,EAAuBD,EACvBE,EAAoBxe,EAAU/O,MAAM,KAAK,GACzCwtB,EAAkBpgB,SAASC,eAAekgB,GAC1CE,EAAwBD,aAAe,EAAfA,EAAiBE,WACzC7B,EAAqBze,SAASyC,cAAc,OAElDgc,EAAmBrf,MAAMse,aAAe,OACxCe,EAAmB8B,aAAa,KAAML,GACtCG,SAAAA,EAAuBG,QAAQ/B,GAE/B,MAAM1kB,EAAYpJ,KAAK4tB,sBAAsBvkB,sBACvCymB,EAAgB1mB,EAAU2mB,MAAM,CAClC7X,cAAe9O,EAAU2mB,MAAM5X,QAAQ6X,mBAI3C,IAFkC3gB,SAASC,eAAeigB,GAKtD,MAAM,IAAIlc,EACN,2FAHJyc,EAAc/W,OAAO,IAAIwW,IAMjC,CAEQ,WAAAtY,CAAYtN,GAChB,MAAMmM,QAAEA,GAAY9V,KAAK6tB,uBAAyB,GAElD7tB,KAAKid,wBACLjd,KAAK4Y,wBAAuB,GAExB9C,GAA8B,mBAAZA,GAClBA,EAAQnM,EAEhB,CAEQ,oBAAAqkB,CAAqBjpB,EAAoB6D,EAAkB0C,GAC/D,MACM9I,EADQxC,KAAKyI,0BAA0BM,WACjBG,wBAAwBN,EAAU0C,IACxD2kB,SAAEA,GAAaztB,EAAcW,OAC7B+sB,EAAgB7gB,SAASyC,cAAc,UAE7Coe,EAAcN,aAAa,OAAQ,oBACnCM,EAAcN,aAAa,QAAS,iDACpCM,EAAcN,aAAa,UAAW,kBACtC5vB,KAAKquB,KAAOruB,KAAKmwB,eAEjB,MAAMrB,EAAiB,CACnBsB,EAAGpwB,KAAKquB,KACRgC,EAAG,GAAGtrB,kBACNurB,QAASL,GAGbC,EAAcnR,UAAYwR,KAAKC,UAAU1B,GACzCzf,SAAS/H,KAAK8J,YAAY8e,EAC9B,CAEQ,YAAAC,GACJ,IAAI9B,EAAO,GAGX,IAAK,IAAIoC,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAGzBpC,GALe,iEAGKqC,KAAKC,MAAsBC,GAAhBF,KAAKG,WAKxC,OAAOxC,CACX,CAEQ,kBAAAJ,GACJ,MAAM6C,EAASzhB,SAASyC,cAAc,UAEtCgf,EAAOlB,aAAa,UAAW,kBAC/BkB,EAAOC,IAAM,kCACb1hB,SAAS/H,KAAK8J,YAAY0f,EAC9B,CAEc,oBAAAjT,CACV7Z,kDAEMhE,KAAKmX,qBACLnX,KAAK4U,WAAW5Q,EAC1B,GAQc,0BAAA8Y,CACVlU,EACAsU,EACAC,EACA7R,kDAEM,IAAIoL,QAAc,CAACU,EAASN,KAC9B,MAAMsG,EAAUC,WAAWjG,EAASpX,KAAK8b,iBAEzC9b,KAAKic,YAAc,KACfqB,aAAaF,GACbpd,KAAK4Y,wBAAuB,GAErB9B,OAIf,IACI9W,KAAKgc,cAAgBhc,KAAK8b,gBAE1B,MAAMyB,QAAoBvd,KAAK4tB,sBAAsBjjB,eACjD,mCACA,CACI4T,OAAQ,CACJyS,aAAa,KAKnBxT,EAAkBD,IAAgBjV,EAAkB2oB,YACpDvT,EAAiBH,IAAgBjV,EAAkBqV,aAEzD,GAAIH,EAGA,OAFAxd,KAAK4d,+BAEEV,IAGX,GAAIQ,EACA,OAAOP,IAGX,IAAKK,GAAmBxd,KAAKgc,aAAehc,KAAK+b,uBAC7C,aAAa/b,KAAK8c,2BACdlU,EACAsU,EACAC,EACA7R,SAIFtL,KAAK6d,qBAAqB,CAC5BjV,WACA0C,YACAuiB,sBAAuB7tB,KAAK6tB,wBAGhC7tB,KAAKiX,YAAY,IAAIkE,GACzB,CAAE,MAAOxR,GACL3J,KAAKiX,YAAYtN,GACjBwT,GACJ,CACJ,GAEQ,4BAAAS,GACJ5d,KAAKic,cACLjc,KAAKgc,aAAe,CACxB,CAEQ,qBAAAiB,GACJjd,KAAK4d,8BACT,CAOQ,sBAAAhF,CAAuBY,GACvBA,GAAaxZ,KAAKqV,0BAClBrV,KAAK2U,iBAAiBtD,KAAKrR,KAAKqV,2BAEhCrV,KAAK2U,iBAAiBjD,MAE9B,ECzXJ,MAWAwf,GAAe7xB,EATVoJ,GACD,IAAIklB,GACAllB,EACA0H,EAA+B1H,GAC/B,IAAImI,EAAiB,CACjBE,gBAAetR,OAAAC,OAAAD,OAAAC,OAAA,GAAOgC,GAAwB,CAAEyQ,SAAU,aAIQ,CAC1E,CAAEkN,QAAS,mCAAoC1a,GAAI,oTCPxC,MAAMysB,GACjB,WAAAvxB,CAAoBiQ,GAAA7P,KAAA6P,cAAAA,CAA+B,CAE7C,WAAAjG,CACFC,EACAC,4CAEA,MAAMgG,EAAM,2BAA2BjG,IACjCvC,EAAOwC,EACPvC,EAAO/H,OAAAC,OAAA,CACT,iBAAkB+P,EAClB,eAAgBE,EAAYK,MACzBJ,GAKP,aAFkB3P,KAAK6P,cAAcG,KAAsBF,EAAK,CAAEvI,UAASD,UAEhEA,IACf,GAEM,WAAA6C,CACFL,4CAEA,MACMxC,EAAOwC,EACPvC,EAAO/H,OAAAC,OAAA,CACT,iBAAkB+P,EAClB,eAAgBE,EAAYK,MACzBJ,GAKP,aAFkB3P,KAAK6P,cAAcI,IARzB,gDAQ6D,CAAE1I,UAASD,UAEzEA,IACf,GAEM,cAAAqD,6CACF/B,EAAW,iBACX5E,GAEA,MAAM8L,EAAM,kCAAkClH,IACxCrB,EAAO/H,OAAAC,OAAA,CACT,iBAAkB+P,EAClB,eAAgBE,EAAYK,MACzBJ,GAQP,aALkB3P,KAAK6P,cAAcK,IAA2BJ,EAAGtQ,OAAAC,OAAA,CAC/D8H,WACGvD,KAGIsD,IACf,IClEJ,SAAS8pB,GAAqBC,GAC1B,MAA8B,iBAAhBA,CAClB,CAEe,SAASC,GACpBC,EACAC,GAEA,GAAKA,GAAaD,EAIlB,OA+DJ,SAA+B1gB,WAC3B,MAAM4gB,EAA6C,GAE7CrQ,EAAOpS,EAAO6B,EAAOuQ,KAAMgQ,IAC3BzE,EAAQ3d,EAAO6B,EAAO8b,MAAOyE,IAC7BM,EAAS1iB,EAAO6B,EAAO6gB,OAAQN,IAC/BO,EAAW3iB,EAAkB,QAAXjL,EAAA8M,EAAOyD,YAAI,IAAAvQ,OAAA,EAAAA,EAAEuD,KAAM8pB,IACrCQ,EAAc5iB,EAAkB,QAAXhB,EAAA6C,EAAOyD,YAAI,IAAAtG,OAAA,EAAAA,EAAE6jB,QAAST,IAC3CU,EAAWjhB,EAAOihB,SA8BxB,OA5BItyB,OAAOmH,KAAKya,GAAMhb,SAClBqrB,EAAerQ,KAAOA,GAGtB5hB,OAAOmH,KAAKgmB,GAAOvmB,SACnBqrB,EAAe9E,MAAQA,GAGvBntB,OAAOmH,KAAK+qB,GAAQtrB,SACpBqrB,EAAeC,OAASA,GAGxBlyB,OAAOmH,KAAKgrB,GAAUvrB,SACtBqrB,EAAend,KAAO,GACtBmd,EAAend,KAAKhN,KAAOqqB,GAG3BnyB,OAAOmH,KAAKirB,GAAaxrB,SACzBqrB,EAAend,KAAI9U,OAAAC,OAAA,GACZgyB,EAAend,MAEtBmd,EAAend,KAAKud,QAAUD,GAG9BE,IACAL,EAAeK,SAAWA,GAGvBL,CACX,CAtGWM,CAGX,SACIR,EACAC,mDAEA,MAAO,CACHpQ,KAAM,CACFC,wBACIkQ,aAAa,EAAbA,EAAeS,uCACD,QAAdjuB,EAAAytB,aAAQ,EAARA,EAAUpQ,YAAI,IAAArd,OAAA,EAAAA,EAAEsd,wBACpB4Q,YAAYV,aAAa,EAAbA,EAAeW,kCAAgD,QAAdlkB,EAAAwjB,aAAQ,EAARA,EAAUpQ,YAAI,IAAApT,OAAA,EAAAA,EAAEikB,YAC7E1F,YAAYgF,aAAa,EAAbA,EAAeY,kCAAgD,QAAdpY,EAAAyX,aAAQ,EAARA,EAAUpQ,YAAI,IAAArH,OAAA,EAAAA,EAAEwS,YAC7E6F,cACIb,aAAa,EAAbA,EAAec,gCAA8C,QAAdlK,EAAAqJ,aAAQ,EAARA,EAAUpQ,YAAI,IAAA+G,OAAA,EAAAA,EAAEiK,cACnE1F,SAAS6E,aAAa,EAAbA,EAAee,+BAA6C,QAAdC,EAAAf,aAAQ,EAARA,EAAUpQ,YAAI,IAAAmR,OAAA,EAAAA,EAAE7F,SACvE8F,cACIjB,aAAa,EAAbA,EAAekB,oCAAkD,QAAdC,EAAAlB,aAAQ,EAARA,EAAUpQ,YAAI,IAAAsR,OAAA,EAAAA,EAAEF,eAE3E7F,MAAO,CACHpa,cACIgf,aAAa,EAAbA,EAAeoB,qCAAoD,QAAfC,EAAApB,aAAQ,EAARA,EAAU7E,aAAK,IAAAiG,OAAA,EAAAA,EAAErgB,cACzEE,aACI8e,aAAa,EAAbA,EAAesB,oCAAmD,QAAfC,EAAAtB,aAAQ,EAARA,EAAU7E,aAAK,IAAAmG,OAAA,EAAAA,EAAErgB,aACxEsgB,kBACIxB,aAAa,EAAbA,EAAeyB,wCACA,QAAfC,EAAAzB,aAAQ,EAARA,EAAU7E,aAAK,IAAAsG,OAAA,EAAAA,EAAEF,kBACrBriB,iBACI6gB,aAAa,EAAbA,EAAe2B,wCACA,QAAfC,EAAA3B,aAAQ,EAARA,EAAU7E,aAAK,IAAAwG,OAAA,EAAAA,EAAEziB,iBACrB0iB,aACI7B,aAAa,EAAbA,EAAe8B,oCAAmD,QAAfC,EAAA9B,aAAQ,EAARA,EAAU7E,aAAK,IAAA2G,OAAA,EAAAA,EAAEF,aACxEG,eACIhC,aAAa,EAAbA,EAAeiC,sCAAqD,QAAfC,EAAAjC,aAAQ,EAARA,EAAU7E,aAAK,IAAA8G,OAAA,EAAAA,EAAEF,gBAE9E7B,OAAQ,CACJgC,cACInC,aAAa,EAAbA,EAAeoC,sCAAsD,QAAhBC,EAAApC,aAAQ,EAARA,EAAUE,cAAM,IAAAkC,OAAA,EAAAA,EAAEF,cAC3EG,gBACItC,aAAa,EAAbA,EAAeuC,wCACC,QAAhBC,EAAAvC,aAAQ,EAARA,EAAUE,cAAM,IAAAqC,OAAA,EAAAA,EAAEF,iBAE1Bvf,KAAM,CACFhN,KAAM,CACFoH,OAAO6iB,aAAa,EAAbA,EAAeyC,iCAAqD,QAApBC,EAAc,QAAdC,EAAA1C,aAAQ,EAARA,EAAUld,YAAI,IAAA4f,OAAA,EAAAA,EAAE5sB,YAAI,IAAA2sB,OAAA,EAAAA,EAAEvlB,OAC7E4d,UACIiF,aAAa,EAAbA,EAAe4C,oCACK,QAApBC,EAAc,QAAdC,EAAA7C,aAAQ,EAARA,EAAUld,YAAI,IAAA+f,OAAA,EAAAA,EAAE/sB,YAAI,IAAA8sB,OAAA,EAAAA,EAAE9H,WAE9BuF,QAAS,CACLnjB,OACI6iB,aAAa,EAAbA,EAAe+C,oCACQ,QAAvBC,EAAc,QAAdC,EAAAhD,aAAQ,EAARA,EAAUld,YAAI,IAAAkgB,OAAA,EAAAA,EAAE3C,eAAO,IAAA0C,OAAA,EAAAA,EAAE7lB,OAC7B4d,UACIiF,aAAa,EAAbA,EAAekD,uCACQ,QAAvBC,EAAc,QAAdC,EAAAnD,aAAQ,EAARA,EAAUld,YAAI,IAAAqgB,OAAA,EAAAA,EAAE9C,eAAO,IAAA6C,OAAA,EAAAA,EAAEpI,YAGrCwF,UAAUP,aAAa,EAAbA,EAAeqD,4BAA4BpD,aAAQ,EAARA,EAAUM,UAEvE,CA7DiC+C,CAAoBtD,EAAeC,GACpE,CCXe,SAASsD,GACpBzH,GAEA,QAAKA,IAKD,wBAAyBA,GAAY,cAAeA,GAAY,gBAAiBA,EAEzF,wSCyBe,MAAM0H,GAQjB,WAAAn1B,CACY6I,EACAusB,EACAnZ,EACA8K,GAHA3mB,KAAAyI,0BAAAA,EACAzI,KAAAg1B,4BAAAA,EACAh1B,KAAA6b,sBAAAA,EACA7b,KAAA2mB,oBAAAA,CACT,CAOG,UAAA/R,CACF5Q,oDAEA,MAAM4E,SAAEA,EAAQqsB,uBAAEA,GAA2BjxB,EAM7C,GAJAhE,KAAK4I,SAAWA,EAEhB5I,KAAKi1B,uBAAyBA,GAEzBrsB,EACD,MAAM,IAAIyK,EACN,qFAIR,IAAK4hB,EACD,MAAM,IAAI5hB,EACN,mGAIR,IAAK4hB,EAAuB3f,QAAmD,mBAAlC2f,EAAuB3f,OAChE,MAAM,IAAIjC,EACN,kIAIR,IACK4hB,EAAuB/L,UACmB,mBAApC+L,EAAuB/L,SAE9B,MAAM,IAAI7V,EACN,0IAIFrT,KAAKyI,0BAA0BqM,kBAAkBlM,GAEvD,MAAME,EAAQ9I,KAAKyI,0BAA0BM,WACvCsB,EAAOvB,EAAME,iBACbxG,EAAgBsG,EAAMI,wBAAkDN,IACxEvD,0BAAEA,EAAyB6vB,yBAAEA,GAC/B1yB,EAAcoC,oBAAsB,GAExC5E,KAAKm1B,0BAC+B,QAAhCpxB,EAAAvB,EAAcoC,0BAAkB,IAAAb,OAAA,EAAAA,EAAEoxB,0BAEtCn1B,KAAKkD,wBAA0BlD,KAAK6b,sBAAsB7Y,qBACtDR,EACA6H,EAAK/D,SAAS2C,KACdoB,EAAK3F,GACLoE,EAAMK,aAGV,MAIMsoB,EAAiBH,GAJO4D,EACS,QAAjClnB,EAAAxL,aAAa,EAAbA,EAAeoC,0BAAkB,IAAAoJ,OAAA,EAAAA,EAAEyjB,eACnC,GAIFwD,aAAsB,EAAtBA,EAAwBpkB,cAGtB7Q,KAAK2mB,oBAAoB7F,yBAC3B9gB,KAAKkD,oBACHmC,EACFosB,GAGAzxB,KAAKo1B,sCACCp1B,KAAKq1B,mCAAmCzsB,UAG5C5I,KAAKs1B,mCAEXL,EAAuB3f,OAAQtE,GAC3BhR,KAAKu1B,6BAA6BvkB,IAEtCikB,EAAuB/L,SAAS,IAAMlpB,KAAKw1B,mCAAmC5sB,GAClF,GAEM,OAAA6M,CAAQggB,EAAgCzxB,4CAC1C,MAAM2R,QAAEA,GAAsB8f,EAAV7f,2UAAK8f,CAAKD,EAAxB,aAEN,IAAK9f,EACD,MAAM,IAAIrC,EAA4B,CAAC,YAG3C,MAAM/H,YAAEA,EAAW3C,SAAEA,GAAa+M,EAE5BggB,EAAgBpqB,GAAeuI,EAAoBvI,GAEzD,UACUvL,KAAKyI,0BAA0B0N,YAAYP,EAAO5R,GAExD,MAAMgS,EAAiB2f,QACX31B,KAAKiW,uCAAuCrN,EAAU2C,SACtDvL,KAAKkW,sBAAsBtN,EAAU2C,SAE3CvL,KAAKyI,0BAA0B4C,cACjC2K,GAGJhW,KAAK2mB,oBAAoBzE,wBAC7B,CAAE,MAAOvY,GACL,GC5JG,SACXA,GAEA,MACqB,iBAAVA,GACG,OAAVA,GACA,YAAaA,GACb,aAAcA,GACd,SAAWA,EAAqCjC,UAChD,SAAWiC,EAAqCjC,SAASJ,IAEjE,CDkJgBsuB,CAA6BjsB,IACA,oBAA7BA,EAAMjC,SAASJ,KAAKrH,KACtB,CACE,MAAM41B,EAAsB,CACxBC,eAAgB,wCAKpB,OAFA91B,KAAKiX,YAAY4e,GAEVnf,QAAQI,QACnB,CAEA,GAAInN,aAAiBhK,OAAwB,kBAAfgK,EAAM1J,KAChC,MAAM0J,EAGV,OAAO+M,QAAQI,QACnB,CACJ,GAEA,QAAAI,GACI,OAAOR,QAAQI,OAAO,IAAIrD,EAC9B,CAEM,YAAA0D,4CACF,OAAOT,QAAQU,SACnB,GAOQ,2BAAAge,GACJ,MAAMtsB,EAAQ9I,KAAKyI,0BAA0BM,WACvCsB,EAAOvB,EAAME,iBACbqkB,EAAWvkB,EAAMitB,qBACjB7I,EAA0BpkB,EAAMqkB,6BAChC6I,EAAyBlB,GAAyB5H,GAClDA,EACA,GAEA+I,EAA0Bj2B,KAAK2mB,oBAAoBxE,sBAEzD,SACKkL,EAAS6I,UACVF,aAAsB,EAAtBA,EAAwB1T,uBACpBla,EAAkC+tB,WAKlCH,aAAsB,EAAtBA,EAAwB1T,sBAAuB2T,IAA4B5rB,EAAK3F,GAC5F,CAEc,kCAAA2wB,CAAmCzsB,4CAC7C,IACI,MAAME,EAAQ9I,KAAKyI,0BAA0BM,WACvCsB,EAAOvB,EAAME,iBACbqkB,EAAWvkB,EAAMstB,cACjBzT,EAAiB7Z,EAAMutB,oBACvBC,GAAgBjJ,aAAQ,EAARA,EAAU3gB,SAASiW,aAAc,EAAdA,EAAgBjW,QAAS,IAE5DkV,kBAAEA,SAA4B5hB,KAAK2mB,oBAAoBnF,sBACzD8U,GAGEjU,QACIriB,KAAK2mB,oBAAoBhF,iCAAiCC,IAE9DU,oBAAEA,EAAmBa,UAAEA,EAAShK,YAAEA,GACpCnZ,KAAK2mB,oBAAoBvE,yCACrBxZ,EACAyZ,SAGFriB,KAAKyI,0BAA0B8tB,8BAA8B,CAC/DjU,sBACAa,YACAhK,gBAIAkJ,EAAqBC,sBACrBla,EAAkC+tB,SAGlCn2B,KAAK2mB,oBAAoBzE,yBAEzBliB,KAAK2mB,oBAAoB7E,uBAAuBzX,EAAK3F,GAE7D,CAAE,MAAOiF,GAET,CACJ,GAOc,gCAAA2rB,4CACV,MACM3S,EADQ3iB,KAAKyI,0BAA0BM,WAChB2V,2BACvB/R,EAAQgW,EAAehW,MACvB4X,EAAW,GAAG5B,EAAenW,aAAamW,EAAelW,WAAW+pB,OAEpEtV,EAAiBlhB,KAAK2mB,oBAAoBpF,2BAE1CkV,EAA2D,CAC7DxX,OAAMzf,OAAAC,OAAA,CACFi3B,eAAgB,CACZC,QAASpS,EACTqS,SAAS,IAETjqB,GAAS,CACTsW,YAAa,CACT0T,QAAShqB,MAMzB3M,KAAK62B,6BAA+B3V,EAAe4V,sBAC/CL,EAER,GAEQ,4BAAAlB,CAA6BvkB,GACjC,MAAM6lB,EAAyB72B,KAAK+2B,mCAEpC,IAAK/lB,EACD,MAAM,IAAIqC,EACN,iFAIRwjB,EAAuB9d,OAAO/H,EAClC,CAEQ,gCAAA+lB,GACJ,IAAK/2B,KAAK62B,uBACN,MAAM,IAAIt2B,EAGd,OAAOP,KAAK62B,sBAChB,CAOc,sCAAA5gB,CACVrN,EACA2C,4CAEA,MAAMyI,aAAEA,GAAiBzI,EAKnB8c,EAJQroB,KAAKyI,0BAA0BM,WACjBG,wBAAkDN,GAC3CzF,OAAO6zB,mBAEPh3B,KAAKi3B,YAAYjjB,GAAgBA,EAIpE,aAFMhU,KAAK4J,YAAYye,GAEhB,CACHzf,WACA2C,YAAa,CACTC,iBAAkB,CACd0rB,sBAAuB,CACnBjsB,SAAUjL,KAAKgK,QACfyN,MAAO4Q,KAK3B,GAEc,qBAAAnS,CACVtN,EACA2C,4CAEA,MAAMzC,EAAQ9I,KAAKyI,0BAA0BM,WACvC4Z,EAAiB7Z,EAAM4V,2BACvBlc,EAAgBsG,EAAMI,wBAAkDN,GAExE2b,EAAW,GAAG5B,EAAenW,aAAamW,EAAelW,WAAW+pB,QAEpEW,gBAAEA,GAAoBn3B,KAAK+2B,oCAE3BryB,GAAEA,SAAayyB,EAAgB,CACjCl3B,KAAM,CAAEskB,YACR5B,eAAgB3iB,KAAK2mB,oBAAoB1C,qBAAqBtB,KAK5D0F,EAFe7lB,EAAcW,OAAO6zB,mBAEPh3B,KAAKi3B,YAAYvyB,GAAMA,QAEpD1E,KAAK4J,YAAYye,GAEvB,MAAMzU,qBAAEA,GAAuB,EAAKC,6BAAEA,GAA+B,GACjEH,EAAuBnI,GAAeA,EAAc,GAExD,MAAO,CACH3C,WACA2C,YAAW/L,OAAAC,OAAAD,OAAAC,OAAA,GACJ8L,GAAW,CACdqI,uBACAC,+BACArI,iBAAkB,CACd0rB,sBAAuB,CACnBjsB,SAAUjL,KAAKgK,QACfyN,MAAO4Q,MAK3B,GAEc,WAAAze,CAAYlF,4CACtB,MACMqF,EADQ/J,KAAKyI,0BAA0BM,WACxBC,iBAAiBtE,GAEtC,GAAI1E,KAAK4I,SAAU,CACf,MAAMoB,QAAEA,SAAkBhK,KAAKg1B,4BAA4BprB,YAAY5J,KAAK4I,SAAU,CAClFmB,SACAqtB,cAAe1yB,IAGnB1E,KAAKgK,QAAUA,CACnB,CACJ,GAOc,WAAAitB,CAAY5O,kDACtB,MAAMvf,EAAQ9I,KAAKyI,0BAA0BM,WACvCsB,EAAOvB,EAAME,iBACb4M,EAAQ9M,EAAMuuB,kBACdC,EAAcxuB,EAAMyT,wBAAwBgb,MAAMC,aAElDC,EAAmD,QAAtB1zB,EAAA/D,KAAKkD,yBAAiB,IAAAa,OAAA,EAAAA,EAAE2zB,wBAE3D,IAAKD,EACD,MAAM,IAAIl3B,EAGd,MAAMo3B,EAA8B,CAChCje,OAAQ9D,EAAMgiB,YAAYC,QAAQ,GAClCvxB,SAAU+D,EAAK/D,SAAS2C,KACxBof,QACAyP,iBAAkB93B,KAAKm1B,4BAA8BrtB,EAA2BiwB,OAChFC,mBAAoB,CAChBC,mBAAoB,CAChBp2B,OAAQ,QACRq2B,WAAYZ,EACZa,WAAYb,KAKlBc,QAAoCX,EAA2B3e,WACjE6e,GAGJ,GACI33B,KAAKm1B,4BAA8BrtB,EAA2BiwB,SAC7DK,EAED,MAAM,IAAI5kB,EAGd,GAAI4kB,EAA6B,CAC7B,MAAMtP,eACFA,EAAcxG,oBACdA,EACA+F,MAAOgQ,SACDZ,EAA2BpmB,OAErC,GACIyX,IAAmB1N,GAAmB2N,IACtCD,IAAmB1N,GAAmB4N,SACtC1G,IAAwBva,EAA4BuwB,SACpDhW,IAAwBva,EAA4BwwB,UAEpD,MAAM,IAAI/kB,EAGd,GACI8O,IAAwBva,EAA4BywB,WACpD,CAACpd,GAAmBqd,IAAKrd,GAAmBsd,UAAU52B,SAASgnB,GAE/D,OAAOuP,EAGX,MAAM,IAAI7kB,CACd,CAEA,OAAO6U,CACX,GAOc,kCAAAmN,CACV5sB,4CAEA,MAAM+vB,EAAe34B,KAAK2mB,oBAAoBpF,4BAExCqX,iBAAEA,EAAgBC,aAAEA,SAAuBF,EAAaG,QAAQC,mBAEtE,GAAIH,EAAkB,CAClB,MACM1L,EADQltB,KAAKyI,0BAA0BM,WACPokB,6BAChC6I,EAAyBlB,GAAyB5H,GAClDA,EACA,GAEA8L,EAAqBh5B,KAAK2mB,oBAAoBzD,wBAChDta,EACAiwB,GACF,GAOF,aALM74B,KAAKyI,0BAA0B8tB,8BAA6B/2B,OAAAC,OAAAD,OAAAC,OAAA,GAC3Du2B,GAAsB,CACzB7c,YAAa,CAAC6f,MAGXA,CACX,CAGJ,GAEQ,WAAA/hB,CAAYtN,UAEe,QAA3B5F,EAAA/D,KAAKi1B,8BAAsB,IAAAlxB,OAAA,EAAAA,EAAE+R,UACkB,mBAAxC9V,KAAKi1B,uBAAuBnf,SAEnC9V,KAAKi1B,uBAAuBnf,QAAQnM,EAE5C,EEpfJ,MAaAsvB,GAAe55B,EAXVoJ,IACD,MAAM2H,QAAEA,GAAY3H,EAA0BM,WAE9C,OAAO,IAAIgsB,GACPtsB,EACA,IAAI0oB,GAA4B7gB,EAAoB,CAAEC,KAAMH,OAC5DlJ,IACAoe,OAIuE,CAC3E,CAAE5gB,GAAI,8UCiLV,MAAAw0B,GA5LA,MAGI,WAAAt5B,CACY6I,EACAgM,GADAzU,KAAAyI,0BAAAA,EACAzI,KAAAyU,yBAAAA,CACT,CAEH,kBAAA0kB,CACItvB,EACAjB,EACAqP,EACA1O,GAEA,MAAMkF,MACFA,EAAKyJ,cACLA,EAAa/S,wBACbA,EAAuBiF,qCACvBA,EAAoCiO,QACpCA,EAAOM,SACPA,EAAQygB,kBACRA,EAAiBtjB,QACjBA,GACAmC,EAEJjY,KAAK8V,QAAUA,EAEf,MAAM1M,EAAYpJ,KAAKyU,yBAAyBpL,sBAGhD,IAFiC7J,OAAOotB,OAAOxjB,EAAU+O,SAASrW,SAASoW,GAGvE,MAAM,IAAI7E,EACN,oGAIR,MAAMgmB,EAAuB75B,OAAAC,OAAAD,OAAAC,OAAA,IACpB2K,GAAwC,CACzCkvB,wBAA0B9iB,GACtBxW,KAAKs5B,wBAAwB9iB,EAAM3M,GACvC0vB,wBAA0B/iB,GACtBxW,KAAKu5B,wBAAwB/iB,EAAM3M,KACzC,CACF4O,UAAW,CAACjC,EAA8B+B,IACtCvY,KAAKw5B,wBACDhjB,EACA+B,EACA3P,EACAiB,EACAuvB,EACAhvB,KAIZ,OAAOhB,EAAUyP,QAAOrZ,OAAAC,OAAAD,OAAAC,OAAAD,OAAAC,OAAA,CACpByY,gBACAzJ,MAAOzO,KAAKyU,yBAAyBjG,oBAAoBC,GACzD7E,YAAa,IAAY6vB,GAAAz5B,UAAA,qBACrB,GAAIuJ,EAAyB,CACzB,MAAMmwB,QAAmB15B,KAAKyU,yBAAyBnL,wBACnDC,SAGEvJ,KAAKyI,0BAA0BkxB,aAAaD,EAAWh1B,GACjE,CAEA,OAAO1E,KAAKyU,yBAAyB7K,YAAYC,EACrD,GACA4O,UAAW,EAAGO,aACVhZ,KAAKyU,yBAAyB7J,gBAAgBhC,EAAUoQ,IACxDX,EAAU,CAAEA,WAAY,IACxBM,EAAW,CAAEA,YAAa,IAC1BxT,GAA2Bk0B,GAEvC,CAEc,uBAAAG,CACVhjB,EACA+B,EACA3P,EACAiB,EACA+vB,EACAxvB,4CAEA,IAAKoM,EAAKwC,QACN,MAAM,IAAIvY,EAAiBD,EAAqBW,gBAGpD,MACMkJ,EADQrK,KAAKyI,0BAA0BM,WAC1BC,iBAEnB,IACI,MAAM6wB,EAAmBxvB,EAAKyvB,UAAUC,cAAc3zB,OAAS,EAE/D,IAAKgE,EAAsC,CACvC,MAAMgE,QAAqBmK,EAAQ3C,MAAM1F,MAEnCyS,EACF3iB,KAAKyU,yBAAyBpH,kCAAkCe,GAIpE,SAFMpO,KAAKyI,0BAA0BuxB,qBAAqBrX,GAEtDkX,EAAkB,CAClB,MAAMhX,EACF7iB,KAAKyU,yBAAyBtG,mCAC1BC,SAGFpO,KAAKyI,0BAA0BwxB,sBAAsBpX,EAC/D,CACJ,CAEIgX,UACM75B,KAAKyU,yBAAyBtK,YAChCN,OACA1H,OACAA,EACAiI,IAIJA,UACMpK,KAAKyI,0BAA0BkxB,sBAGnC35B,KAAKyI,0BAA0B0N,YAAY,GAAI,CAAEoI,OAAQ,CAAE3V,oBAE3D5I,KAAKyU,yBAAyBpJ,cAAczC,EAAU4N,EAAKwC,SAE7D4gB,GAAoC,mBAAfA,GACrBA,GAER,CAAE,MAAOjwB,GACL3J,KAAKiX,YAAYtN,EACrB,CACJ,GAEc,uBAAA2vB,CACV9iB,EACA3M,4CAEA,MAAM0C,EAAUvM,KAAKyU,yBAAyBnI,WAAW,CACrDS,KAAMyJ,EAAKqM,gBAAgB9V,KAC3BC,YAAawJ,EAAKqM,gBAAgB7V,YAClCC,WAAYuJ,EAAKqM,gBAAgB5V,WACjCE,oBAAqBqJ,EAAKqM,gBAAgB/Z,QAG9C,UAGU9I,KAAKyI,0BAA0BuxB,qBAAqBztB,SACpDvM,KAAKyI,0BAA0BwxB,sBAAsB1tB,GAE3D,MAAM2tB,EAAiBl6B,KAAKyU,yBAAyB3I,iCAE/C9L,KAAKyI,0BAA0B0xB,qBAAqBD,EAAex1B,UACnE1E,KAAKyU,yBAAyBtK,YAAYN,EACpD,CAAE,MAAOF,GACL3J,KAAKiX,YAAYtN,EACrB,CACJ,GAEc,uBAAA4vB,CACV/iB,EACA3M,4CAEA,MAAMqwB,EAAiBl6B,KAAKyU,yBAAyB3I,yBACjD0K,EAAK/L,uBAAuB/F,IAGhC,UACU1E,KAAKyI,0BAA0B0xB,qBAAqBD,EAAex1B,UACnE1E,KAAKyU,yBAAyBtK,YAAYN,EACpD,CAAE,MAAOF,GACL3J,KAAKiX,YAAYtN,EACrB,CACJ,GAEQ,WAAAsN,CAAYtN,GAChB,GAA4B,mBAAjB3J,KAAK8V,QAGZ,MAAMnM,EAFN3J,KAAK8V,QAAQnM,EAIrB,0SCtLW,MAAMywB,GACjB,WAAAx6B,CACY6I,EACAgM,EACA4lB,GAFAr6B,KAAAyI,0BAAAA,EACAzI,KAAAyU,yBAAAA,EACAzU,KAAAq6B,4BAAAA,CACT,CAEG,UAAAzlB,CACF5Q,4CAEA,MAAM6Q,eAAEA,EAAcjM,SAAEA,GAAa5E,EAErC,IAAK4E,EACD,MAAM,IAAIyK,EACN,qFAIR,IAAKwB,EACD,MAAM,IAAIxB,EACN,2FAIR,IAAKwB,EAAe7D,UAChB,MAAM,IAAIqC,EACN,qGAIR,GAAIwB,EAAewD,SAA6C,mBAA3BxD,EAAewD,QAChD,MAAM,IAAIhF,EACN,qGAIMrT,KAAKyI,0BAA0BM,WACjBuxB,iBAAiB1xB,WAGnC5I,KAAKyI,0BAA0BqM,kBAAkBlM,IAG3D,MAAMQ,QAAkBpJ,KAAKyU,yBAAyB1R,cAAc6F,GAE/DQ,GAAcA,EAAUyP,SAAwC,mBAAtBzP,EAAUyP,QASzD7Y,KAAKuV,aAAa3M,EAAUiM,GAPxBI,QAAQtL,MACJ,0FAOZ,GAEA,YAAAwN,GACI,OAAOT,QAAQU,SACnB,CAEM,MAAAmjB,CAAOC,EAAkCx2B,4CAG3C,aAFMhE,KAAKyI,0BAA0BgyB,eAAeD,EAAax2B,GAE1D0S,QAAQU,SACnB,GAEM,OAAAsjB,CAAQ12B,4CAGV,aAFMhE,KAAKyI,0BAA0BkyB,gBAAgB32B,GAE9C0S,QAAQU,SACnB,GAEA,4BAAAwjB,CAA6B52B,SAGzB,OAFqC,QAArCD,EAAAC,aAAO,EAAPA,EAAS62B,oCAA4B,IAAA92B,GAAAA,EAAA2nB,KAAA1nB,GAE9B0S,QAAQU,SACnB,CAEQ,YAAA7B,CACJ3M,EACAiM,GAEA,MAAM7D,UAAEA,EAASqH,QAAEA,EAAOuhB,WAAEA,EAAU9jB,QAAEA,GAAYjB,EAE9CzL,EAAYpJ,KAAKyU,yBAAyBpL,sBAE1C7G,EADQxC,KAAKyI,0BAA0BM,WACjBG,wBAAkDN,IACxEzD,wBACFA,EAAuBuS,oBACvBA,EAAmBtN,qCACnBA,GACA5H,EAAcoC,oBAAsB,IAClCk2B,wBAAEA,GAA4BpjB,GAAuB,GAErDO,EAAazY,OAAAC,OAAAD,OAAAC,OAAAD,OAAAC,OAAA,CACfyY,cAAe9O,EAAU+O,QAAQC,OACjChO,uCACAjF,0BACAsJ,MAAKjP,OAAAC,OAAAD,OAAAC,OAAA,GACEq7B,GAAuB,CAC1BnsB,OC1HoB,MD4HpB0J,GAAW,CAAEA,QAAS,IAAMA,MAC5BlT,GAA2By0B,GAAc,CAAER,kBAAmB,IAAMQ,MAAe,CACvF9jB,YAGEiB,EAAe/W,KAAKq6B,4BAA4BlB,mBAClD,iBACAvwB,EACAqP,GAGAlB,EAAa+B,aACb/B,EAAagC,OAAO,IAAI/H,KAExBhR,KAAKyU,yBAAyBvF,cAAc8B,EAEpD,EEjIJ,MAgBA+pB,GAAe17B,EAdVoJ,IACD,MAAMgM,EAA2BtE,EAA+B1H,GAC1D4xB,EAA8B,IAAInB,GACpCzwB,EACAgM,GAGJ,OAAO,IAAI2lB,GACP3xB,EACAgM,EACA4lB,IAIgE,CAAC,CAAE31B,GAAI,2TCMhE,MAAMs2B,GAGjB,WAAAp7B,CACY4I,EACAC,EACAusB,EACAiG,GAHAj7B,KAAAwI,WAAAA,EACAxI,KAAAyI,0BAAAA,EACAzI,KAAAg1B,4BAAAA,EACAh1B,KAAAi7B,2BAAAA,CACT,CAOG,aAAAl4B,CACF6F,EACAC,EACAnG,EACAC,4CAEA,MAAMmG,EAAQ9I,KAAKyI,0BAA0BM,WACvCtG,EAAeoG,GAAwBC,EAAME,iBAAiB1C,SAAS2C,KACvEzG,EACFsG,EAAMI,wBAA0DN,GAUpE,OARA5I,KAAKoJ,gBAAkBpJ,KAAKi7B,2BAA2B14B,aACnDC,EACAC,EACAqG,EAAMK,YACNzG,EACAC,GAGG3C,KAAKoJ,SAChB,GAEA,mBAAAC,GACI,IAAKrJ,KAAKoJ,UACN,MAAM,IAAI7I,EAGd,OAAOP,KAAKoJ,SAChB,CAOM,uBAAAE,CACFC,4CAEA,MAAMC,EAAkBD,EAAwBE,2BAEhD,IAAKD,EACD,MAAM,IAAI/I,EAAiBD,EAAqBI,aAGpD,IACI,aAAaZ,KAAKyI,0BAA0BiB,iBAAiBF,EACjE,CAAE,MAAOG,GACL,MAAM,IAAIvC,CACd,CACJ,GAOM,WAAAwC,CACFC,EACAC,4CAEA,MAAMC,EAAS/J,KAAKyI,0BAA0BM,WAAWC,iBAAiBtE,IAEpEsF,QAAEA,SAAkBhK,KAAKg1B,4BAA4BprB,YAAYC,EAAUrK,OAAAC,OAAA,CAC7EsK,UACGD,IAGP,OAAOE,CACX,GAEM,qBAAAC,CACFJ,EACAC,4CAEA,MAAMC,EAAS/J,KAAKyI,0BAA0BM,WAAWC,iBAAiBtE,IAEpEsF,QAAEA,EAAOE,WAAEA,SAAqBlK,KAAKg1B,4BAA4BprB,YACnEC,EAAUrK,OAAAC,OAAA,CAENsK,UACGD,IAIX,OAAAtK,OAAAC,OAAA,CAASuK,WAAaE,EAAa,CAAEA,cAAe,GACxD,GAEM,WAAAC,CAAYC,4CACd,MAAMtB,EAAQ9I,KAAKyI,0BAA0BM,WACvCsB,EAAOvB,EAAME,iBACbsB,EAAcxB,EAAMyB,yBAAyB,GAEnD,UACUvK,KAAKg1B,4BAA4B7qB,YAAY,CAC/CK,yBAA0BJ,EACpB,GACAE,EAAYE,yBAClBT,OAAQM,EAAK3F,GACb+F,uBAAwBL,EAClB,KACAE,EAAYG,wBAE1B,CAAE,MAAOC,GACL,MAAM,IAAIjD,CACd,CACJ,GAEM,cAAAkD,CAAe/B,EAAmB5E,4CACpC,IACI,MAAMwD,OAAEA,SAAiBxH,KAAKg1B,4BAA4BrqB,eACtD/B,EACA5E,GAGJ,OAAOwD,CACX,CAAE,MAAOkD,GACL,MAAM,IAAIjD,CACd,CACJ,GAOA,eAAAmD,CAAgBhC,EAAkBoB,GAC9B,MAAMK,EAAOrK,KAAKyI,0BAA0BM,WAAWC,iBAEvD,IAAKgB,EACD,MAAM,IAAIvJ,EAAiBD,EAAqBW,gBAGpD,OAAOnB,KAAKwI,WAAWqC,SAAS,gBAAerL,OAAAC,OAAA,CAC3CqL,aAAc,SACdC,OAAQ,wBACRC,SAAUpC,EACVqC,SAAUjB,GACNK,EAAKa,SAAWtD,EAAWuD,QAAU,CAAEC,QAASf,EAAK3F,KAEjE,CAEM,aAAA2G,CAAczC,EAAkBoB,EAAiBsB,4CACnD,MAAMC,EAAc,CAChBC,iBAAkB,CACdC,yBAA0B,KAC1BC,iCAAkC,KAClCC,YAAa,KACbC,UAAWhD,EACXiD,eAAgB,CACZZ,SAAUjB,WAKhBhK,KAAKyI,0BAA0B4C,cAAa7L,OAAAC,OAAA,CAC9CmJ,WACA2C,eACID,EAAY,CAAEA,aAAc,IAExC,GAOA,wBAAAQ,CAAyBC,GACrB,MACMzB,EADQtK,KAAKyI,0BAA0BM,WACnBwB,yBAAyB,GAE7CC,EAA2BF,EAAYE,0BAA4B,GAEnEwB,EAA4BxB,EAAyByB,KACtDC,GAAWA,EAAOC,eASjBC,GANyBL,EACzBvB,EAAyByB,KAAMC,GAAWA,EAAOxH,KAAOqH,GACxDvB,EAAyByB,KACpBC,IAAU,IAAAnI,EAAC,OAAAmI,EAAOxH,MAAyC,QAAlCX,EAAAuG,EAAYG,8BAAsB,IAAA1G,OAAA,EAAAA,EAAEW,QAI1CsH,GAA6BxB,EAAyB,GAEpF,IAAK4B,EACD,MAAM,IAAIzM,MAAM,+CAGpB,OAAOyM,CACX,CAOA,UAAAE,CAAWC,GACP,MAAO,CACHC,WAAWD,aAAO,EAAPA,EAASC,YAAa,GACjCC,UAAUF,aAAO,EAAPA,EAASE,WAAY,GAC/BC,OAAOH,aAAO,EAAPA,EAASG,QAAS,GACzBC,OAAOJ,aAAO,EAAPA,EAASI,QAAS,GACzBC,QAAS,GACTC,UAAUN,aAAO,EAAPA,EAASM,WAAY,GAC/BC,UAAUP,aAAO,EAAPA,EAASO,WAAY,GAC/BC,MAAMR,aAAO,EAAPA,EAASQ,OAAQ,GACvBC,aAAaT,aAAO,EAAPA,EAASS,cAAe,GACrCC,YAAYV,aAAO,EAAPA,EAASU,aAAc,GACnCC,gBAAiB,GACjBC,qBAAqBZ,aAAO,EAAPA,EAASY,sBAAuB,GACrDC,aAAc,GAEtB,CAEA,iCAAAC,EAAkCC,MAAEA,YAChC,OAAOtN,KAAKsM,WAAW,CACnBE,UAAWc,EAAMrN,KAAKsN,WACtBd,SAAUa,EAAMrN,KAAKuN,QACrBd,MAAOY,EAAMG,cACbZ,SAAUS,EAAMf,QAAQmB,eACxBZ,SAAUQ,EAAMf,QAAQoB,eACxBZ,KAAMO,EAAMf,QAAQqB,aACpBZ,YAAaM,EAAMf,QAAQsB,aAC3BZ,WAAYK,EAAMf,QAAQuB,YAC1BX,oBAAqBG,EAAMf,QAAQwB,aACnCpB,MAAgC,QAAzBqB,EAAW,QAAXjK,EAAAuJ,EAAMX,aAAK,IAAA5I,OAAA,EAAAA,EAAEkK,oBAAY,IAAAD,OAAA,EAAAA,EAAEE,iBAE1C,CAEA,kCAAAC,CACIC,GAEA,MAAMd,MAAEA,EAAKe,eAAEA,GAAmBD,GAC5B7B,QACFA,EACAtM,MAAMqO,UAAEA,IACRD,EAAe,GAAGE,UAEf/B,KAAcC,GAAY6B,EAAUrM,MAAM,KAEjD,OAAOjC,KAAKsM,WAAW,CACnBE,YACAC,SAAUA,EAASxF,KAAK,KACxByF,MAAOY,EAAMG,cACbZ,SAAUN,EAAQmB,eAClBZ,SAAUP,EAAQoB,eAClBZ,KAAMR,EAAQqB,aACdZ,YAAaT,EAAQsB,aACrBZ,WAAYV,EAAQuB,YACpBX,oBAAqBZ,EAAQwB,cAErC,CAOA,mBAAAS,CAAoBC,GAChB,MAAMC,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,MAAEA,GAAUJ,GAAS,GAE3CK,EAAc,CAChBJ,MAAOA,GAAS6M,GAAiB7M,GAASA,OAAQvM,EAClDwM,OAAQ3O,KAAK+O,eAAeJ,GAC5BC,MAAOA,GAAS0M,GAAiB1M,GAASA,OAAQzM,EAClD0M,MAAOA,GAAS2M,GAAiB3M,GAASA,OAAQ1M,GAGtD,OAAO6M,EAAOF,EAAaG,EAC/B,CAEA,cAAAF,CAAeJ,GAKX,OAAKA,GAA4B,iBAAXA,EAIlBA,EANc,MAUdA,EAXc,MAeXA,EAhBe,EAiB1B,CAOA,aAAAO,CAAcC,GACV,MAAMC,EAAUD,GAAaE,SAASC,eAAeH,GAEjDC,IAEAA,EAAQX,MAAMc,QAAU,OAEhC,ySC7UW,MAAM2rB,GAGjB,WAAAt7B,CAAoByC,GAAArC,KAAAqC,aAAAA,EAChBrC,KAAKsC,OAASA,MAClB,CAEM,YAAAC,CACFC,EACAC,EACAb,EACAc,EACAC,4CAEA,MAAME,EAAwB7C,KAAK8C,gCAC/BN,EACAC,EACAb,EACAc,GAGJ,OAAO1C,KAAKm7B,cAAct4B,EAAuBF,EACrD,GAEc,aAAAw4B,CAAaC,6CACvBv4B,EACAF,GAAY,GAEZ,IAAK3C,KAAKsC,OAAOM,QAAUD,EAAW,CAClC,MAAMqB,EAAUhE,KAAKmE,gBACjBtB,EAAsBmB,SAEpBC,EAAajE,KAAKmE,gBACpBtB,EAAsBoB,YAKpBI,EAAY,iCADE,IAAIC,gBAAgBN,GAASO,mBAG3CvE,KAAKqC,aAAamC,WAAWH,EAAW,CAAEI,OAAO,EAAMR,cACjE,CAEA,IAAKjE,KAAKsC,OAAOM,OACb,MAAM,IAAIrC,EAGd,OAAOP,KAAKsC,OAAOM,MACvB,GAEQ,+BAAAE,CACJN,EACAC,EACAb,EACAc,GAA4B,GAE5B,MAAMgC,GAAEA,EAAEC,YAAEA,EAAWC,mBAAEA,GAAuBpC,EAEhD,KAAKoC,aAAkB,EAAlBA,EAAoBC,UACrB,MAAM,IAAIpE,EAAiBD,EAAqBc,sBAGpD,MAAMwD,OACFA,EAAMD,SACNA,EAAQE,WACRA,EAAUC,aACVA,EAAYC,cACZA,EAAaC,eACbA,EAAcC,wBACdA,EAAuBC,wBACvBA,EAAuBC,0BACvBA,EAAyBC,mCACzBA,EAAqC,GAAEC,iCACvCA,EAAmC,GAAEC,mBACrCA,GACAZ,EAEEa,EAASN,GAA2BzC,EAEpCgD,EAA0B,8BAAPhB,EACnBiB,EAAoBD,EAAmB,CAAC,QAAU,GAGlDE,EAAsBR,EAA0B,CAAC,SAAU,YAAc,GAGzES,EAAqBX,EAAiB,CAAC,SAAW,GAKlDY,EAA2CN,EAAqB,CAAC,aAAe,GAChFO,EAA4CrD,EAC5C,CAAC,eACD,GACAsD,EAA8B,IAdRN,EAA8B,GAAX,CAAC,WAGlBN,EAAmD,GAAzB,CAAC,SAAU,eAGtCF,EAA6B,GAAZ,CAAC,YACpBI,EAAmCW,OACzDC,IAAiBX,EAAiCzD,SAASoE,KAY1DC,EAA6B,IAC5BR,KACAC,KACAC,KACAN,GAGD1D,EAASF,EAA8BC,GAE7C,MAAO,CACHoC,QAAOxE,OAAAC,OAAAD,OAAAC,OAAA,CACH,YAAaoF,EACb,cAAeE,EACf,iBAAkBoB,EAAcC,OAAS,EAAID,OAAgBhE,EAC7D,kBAAmB6D,EAAeI,OAAS,EAAIJ,OAAiB7D,EAChEsD,SACAY,WAAY,CACR,UACA,gBACA,iBACA,WACGP,KACAC,GAEPO,SAAU7D,EACVqC,UACIO,GAA6B,CAAE,gBAAiBL,IAChDnD,GAAU,CAAEA,WAEpBoC,WAAY,CACR,8BAA+BgB,EAC/B,oBAAqBN,GAGjC,CAEQ,eAAAR,CAAmDhB,GACvD,IAAIuD,EAAoB,GAsBxB,OApBalH,OAAOmH,KAAKxD,GAEpByD,QAASC,IACV,MAAMC,EAAQ3D,EAAO0D,GAGjBC,SAEU,KAAVA,GACCC,MAAMC,QAAQF,IAA2B,IAAjBA,EAAMV,SAKnCM,EAAiBlH,OAAAC,OAAAD,OAAAC,OAAA,GACViH,GAAiB,CACpBG,CAACA,GAAME,MAAMC,QAAQF,GAASA,EAAMG,KAAK,KAAOH,OAIjDJ,CACX,ECxKJ,MAaA20B,GAZI5yB,IAEA,MAAM2H,QAAEA,GAAY3H,EAA0BM,WAE9C,OAAO,IAAIiyB,GACP3qB,IACA5H,EACA,IAAI0oB,GAA4B7gB,EAAoB,CAAEC,KAAMH,OAC5D,IAAI8qB,GAA2B/zB,8SCQxB,MAAMm0B,GAGjB,WAAA17B,CACY6I,EACAmT,GADA5b,KAAAyI,0BAAAA,EACAzI,KAAA4b,iCAAAA,EAJJ5b,KAAA8V,QAAUoG,CAKf,CAEG,UAAAtH,CACF5Q,4CAEA,MAAMqW,qBAAEA,EAAoBzR,SAAEA,GAAa5E,EAE3C,IAAK4E,EACD,MAAM,IAAIyK,EACN,qFAIR,IAAKgH,EACD,MAAM,IAAIhH,EACN,iGAIR,IAAKgH,EAAqBrJ,UACtB,MAAM,IAAIqC,EACN,2GAIR,GAAIgH,EAAqBhC,SAAmD,mBAAjCgC,EAAqBhC,QAC5D,MAAM,IAAIhF,EACN,2GAIRrT,KAAK8V,QAAUuE,EAAqBvE,SAAWoG,EAEjClc,KAAKyI,0BAA0BM,WACjBuxB,iBAAiB1xB,WAGnC5I,KAAKyI,0BAA0BqM,kBAAkBlM,IAG3D,MAAMQ,QAAkBpJ,KAAK4b,iCAAiC7Y,cAAc6F,GAEvEQ,GAAcA,EAAUyP,SAAwC,mBAAtBzP,EAAUyP,QASzD7Y,KAAKuV,aAAa3M,EAAUyR,GAPxBpF,QAAQtL,MACJ,0FAOZ,GAEA,YAAAwN,GACI,OAAOT,QAAQU,SACnB,CAEM,MAAAmjB,CAAOC,EAAkCx2B,kDACrChE,KAAKyI,0BAA0BgyB,eAAeD,EAAax2B,EACrE,GAEM,OAAA02B,CAAQ12B,kDACJhE,KAAKyI,0BAA0BkyB,gBAAgB32B,EACzD,GAEA,4BAAA42B,CAA6B52B,SAGzB,OAFqC,QAArCD,EAAAC,aAAO,EAAPA,EAAS62B,oCAA4B,IAAA92B,GAAAA,EAAA2nB,KAAA1nB,GAE9B0S,QAAQU,SACnB,CAEQ,YAAA7B,CACJ3M,EACA2yB,GAEA,MAAMvqB,UAAEA,EAAS4oB,WAAEA,EAAUvhB,QAAEA,GAAYkjB,EAErCnyB,EAAYpJ,KAAK4b,iCAAiCvS,sBAElD7G,EADQxC,KAAKyI,0BAA0BM,WAEnCG,wBAA0DN,IAC9DzD,wBACFA,EAAuBuS,oBACvBA,EAAmBtN,qCACnBA,GACA5H,EAAcoC,oBAAsB,IAClCk2B,wBAAEA,GAA4BpjB,GAAuB,GAErD8jB,EAAgBh8B,OAAAC,OAAA,CAClBmK,YAAa,IACT5J,KAAK4b,iCAAiChS,YAAY,wBACtD6O,UAAW,EAAGO,aACVhZ,KAAK4b,iCAAiChR,gBAAgBhC,EAAUoQ,IAChEX,GAAW,CAAEA,QAAS,IAAMA,MAG9BghB,EAAuB75B,OAAAC,OAAAD,OAAAC,OAAA,IACpB2K,GAAwC,CACzCkvB,wBAA0B9iB,GACtBxW,KAAKs5B,wBAAwB9iB,GACjC+iB,wBAA0B/iB,GACtBxW,KAAKu5B,wBAAwB/iB,KACnC,CACFiC,UAAW,CAACjC,EAA8B+B,IACtCvY,KAAKw5B,wBACDhjB,EACA+B,EACA3P,EACAgxB,EACAxvB,KAINoQ,EAAiB,CAACpR,EAAU+O,QAAQsC,SAAUrR,EAAU+O,QAAQuC,QACtE,IAAIC,GAAyB,EAE7BH,EAAe5T,QAASsR,IACpB,IAAKyC,EAAwB,CACzB,MAAM8gB,EAAmBj8B,OAAAC,OAAAD,OAAAC,OAAA,CACrByY,gBACAzJ,MAAOzO,KAAK4b,iCAAiCpN,oBAAmBhP,OAAAC,OAAAD,OAAAC,OAAA,GACzDq7B,GAAuB,CAC1BnsB,OL9JY,OKgKb6sB,GACCr2B,GAA2Bk0B,GAG7BtiB,EAAe3N,EAAUyP,QAAQ4iB,GAEnC1kB,EAAa+B,eACb/B,EAAagC,OAAO,IAAI/H,KACxB2J,GAAyB,EAEjC,IAGCA,GACD3a,KAAK4b,iCAAiC1M,cAAc8B,EAE5D,CAEc,uBAAAwoB,CACVhjB,EACA+B,EACA3P,EACAgxB,EACAxvB,4CAEA,IAAKoM,EAAKwC,QACN,MAAM,IAAIvY,EAAiBD,EAAqBW,gBAGpD,MAAMkJ,EAAOrK,KAAKyI,0BAA0BM,WAAWC,iBAEvD,IACI,MAAM6wB,EAAmBxvB,EAAKyvB,UAAUC,cAAc3zB,OAAS,EAE/D,IAAKgE,EAAsC,CACvC,MAAMgE,QAAqBmK,EAAQ3C,MAAM1F,MAEnCyS,EACF3iB,KAAK4b,iCAAiCvO,kCAClCe,GAKR,SAFMpO,KAAKyI,0BAA0BuxB,qBAAqBrX,GAEtDkX,EAAkB,CAClB,MAAMhX,EACF7iB,KAAK4b,iCAAiCzN,mCAClCC,SAGFpO,KAAKyI,0BAA0BwxB,sBAAsBpX,EAC/D,CACJ,CAEIgX,UACM75B,KAAK4b,iCAAiCzR,YACxCC,IAIJA,UACMpK,KAAKyI,0BAA0BkxB,sBAGnC35B,KAAKyI,0BAA0B0N,YAAY,GAAI,CAAEoI,OAAQ,CAAE3V,oBAC3D5I,KAAK4b,iCAAiCvQ,cAAczC,EAAU4N,EAAKwC,SAErE4gB,GAAoC,mBAAfA,GACrBA,GAER,CAAE,MAAOjwB,GACL3J,KAAKiX,YAAYtN,EACrB,CACJ,GAEc,uBAAA2vB,CACV9iB,4CAEA,MAAMjK,EAAUvM,KAAK4b,iCAAiCtP,WAAW,CAC7DS,KAAMyJ,EAAKqM,gBAAgB9V,KAC3BC,YAAawJ,EAAKqM,gBAAgB7V,YAClCC,WAAYuJ,EAAKqM,gBAAgB5V,WACjCE,oBAAqBqJ,EAAKqM,gBAAgB/Z,QAG9C,UAGU9I,KAAKyI,0BAA0BuxB,qBAAqBztB,SACpDvM,KAAKyI,0BAA0BwxB,sBAAsB1tB,GAE3D,MAAM2tB,EAAiBl6B,KAAK4b,iCAAiC9P,iCAEvD9L,KAAKyI,0BAA0B0xB,qBAAqBD,EAAex1B,UACnE1E,KAAK4b,iCAAiCzR,aAChD,CAAE,MAAOR,GACL3J,KAAKiX,YAAYtN,EACrB,CACJ,GAEc,uBAAA4vB,CACV/iB,4CAEA,MAAM0jB,EAAiBl6B,KAAK4b,iCAAiC9P,yBACzD0K,EAAK/L,uBAAuB/F,IAGhC,UACU1E,KAAKyI,0BAA0B0xB,qBAAqBD,EAAex1B,UACnE1E,KAAK4b,iCAAiCzR,aAChD,CAAE,MAAOR,GACL3J,KAAKiX,YAAYtN,EACrB,CACJ,GAEQ,WAAAsN,CAAYtN,GAChB,GAA4B,mBAAjB3J,KAAK8V,QAGZ,MAAMnM,EAFN3J,KAAK8V,QAAQnM,EAIrB,EChRJ,MAQA+xB,GAAer8B,EANVoJ,GACD,IAAI6yB,GACA7yB,EACA4yB,GAAuC5yB,IAG+B,CAC1E,CAAE/D,GAAI,iUCIK,MAAMi3B,GACjB,WAAA/7B,CACY6I,EACAmT,GADA5b,KAAAyI,0BAAAA,EACAzI,KAAA4b,iCAAAA,CACT,CAEG,UAAAhH,CACF5Q,4CAEA,MAAM8W,oBAAEA,EAAmBlS,SAAEA,GAAa5E,EAE1C,IAAK4E,EACD,MAAM,IAAIyK,EACN,qFAIR,IAAKyH,EACD,MAAM,IAAIzH,EACN,gGAIR,IAAKyH,EAAoB9J,UACrB,MAAM,IAAIqC,EACN,0GAIR,GAAIyH,EAAoBzC,SAAkD,mBAAhCyC,EAAoBzC,QAC1D,MAAM,IAAIhF,EACN,0GAIMrT,KAAKyI,0BAA0BM,WACjBuxB,iBAAiB1xB,WAGnC5I,KAAKyI,0BAA0BqM,kBAAkBlM,IAG3D,MAAMQ,QAAkBpJ,KAAK4b,iCAAiC7Y,cAAc6F,GAEvEQ,GAAcA,EAAUyP,SAAwC,mBAAtBzP,EAAUyP,QASzD7Y,KAAKuV,aAAa3M,EAAUkS,GAPxB7F,QAAQtL,MACJ,0FAOZ,GAEA,YAAAwN,GACI,OAAOT,QAAQU,SACnB,CAEM,MAAAmjB,CAAOC,EAAkCx2B,kDACrChE,KAAKyI,0BAA0BgyB,eAAeD,EAAax2B,EACrE,GAEM,OAAA02B,CAAQ12B,kDACJhE,KAAKyI,0BAA0BkyB,gBAAgB32B,EACzD,GAEA,4BAAA42B,CAA6B52B,SAGzB,OAFqC,QAArCD,EAAAC,aAAO,EAAPA,EAAS62B,oCAA4B,IAAA92B,GAAAA,EAAA2nB,KAAA1nB,GAE9B0S,QAAQU,SACnB,CAEQ,YAAA7B,CACJ3M,EACAkS,GAEA,MAAM9J,UAAEA,EAASqH,QAAEA,GAAYyC,EAEzB1R,EAAYpJ,KAAK4b,iCAAiCvS,sBAElD7G,EADQxC,KAAKyI,0BAA0BM,WAEnCG,wBAA0DN,IAC9D8O,oBAAEA,GAAwBlV,EAAcoC,oBAAsB,IAC9Dk2B,wBAAEA,GAA4BpjB,GAAuB,GAErD+jB,EAAmBj8B,OAAAC,OAAA,CACrByY,cAAe9O,EAAU+O,QAAQ6C,MACjCvM,MAAOzO,KAAK4b,iCAAiCpN,oBAAmBhP,OAAAC,OAAAD,OAAAC,OAAA,GACzDq7B,GAAuB,CAC1BnsB,OPjHoB,MOmHxB/E,YAAa,IACT5J,KAAK4b,iCAAiChS,YAAY,uBACtD6O,UAAW,EAAGO,aACVhZ,KAAK4b,iCAAiChR,gBAAgBhC,EAAUoQ,IAChEX,GAAW,CAAEA,QAAS,IAAMA,MAG9BujB,EAAqBxyB,EAAUyP,QAAQ4iB,GAEzCG,EAAmB9iB,aACnB8iB,EAAmB7iB,OAAO,IAAI/H,KAE9BhR,KAAK4b,iCAAiC1M,cAAc8B,EAE5D,ECxHJ,MAQA6qB,GAAex8B,EANVoJ,GACD,IAAIkzB,GACAlzB,EACA4yB,GAAuC5yB,IAG8B,CACzE,CAAE/D,GAAI,gUCKK,MAAMo3B,GACjB,WAAAl8B,CACY6I,EACAoT,EACA8K,GAFA3mB,KAAAyI,0BAAAA,EACAzI,KAAA6b,sBAAAA,EACA7b,KAAA2mB,oBAAAA,CACT,CAEG,UAAA/R,CACF5Q,kDAEA,MAAM4E,SAAEA,EAAQqsB,uBAAEA,GAA2BjxB,EAE7C,IAAK4E,EACD,MAAM,IAAIyK,EACN,kEAIR,UACUrT,KAAKyI,0BAA0BqM,kBAAkBlM,GAEvD,MAAME,EAAQ9I,KAAKyI,0BAA0BM,WACvCsB,EAAOvB,EAAME,iBACbxG,EAAgBsG,EAAMI,wBAAkDN,GAExEmY,KAAsD,QAAhChd,EAAAvB,EAAcoC,0BAAkB,IAAAb,OAAA,EAAAA,EAAEsB,2BAExDnC,QAA0BlD,KAAK6b,sBAAsB7Y,qBACvDR,EACA6H,EAAK/D,SAAS2C,KACdoB,EAAK3F,GACLoE,EAAMK,mBAGJnJ,KAAK2mB,oBAAoB7F,yBAC3B5d,EACA6d,EACA/gB,KAAKsxB,kBAAkB1oB,EAAUqsB,GAEzC,CAAE,MAAO3c,GAGT,CAEA,OAAO5B,QAAQU,SACnB,GAEM,YAAAD,4CACF,OAAOT,QAAQU,SACnB,GAEM,MAAAmjB,CAAOC,EAAkCx2B,kDACrChE,KAAKyI,0BAA0BgyB,eAAeD,EAAax2B,SAE3DhE,KAAKyI,0BAA0B8tB,8BAA8B,CAC/DjU,yBAAqBngB,EACrBghB,eAAWhhB,EACXgX,iBAAahX,IAGjBnC,KAAK2mB,oBAAoBzE,wBAC7B,GAEM,OAAAwY,CAAQ12B,kDACJhE,KAAKyI,0BAA0BkyB,gBAAgB32B,EACzD,GAEM,4BAAA42B,CACF52B,4CAEA,MAAM+3B,8BAAEA,EAA6BlB,6BAAEA,EAA4BjyB,SAAEA,GACjE5E,GAAW,GAEf,IAAK4E,EACD,MAAM,IAAIyK,EACN,kEAIR,GAA4C,mBAAjCwnB,EACP,MAAM,IAAIxnB,EACN,gHAOR,GAHcrT,KAAKyI,0BAA0BM,WACtBgtB,qBAEVG,QAAS,CAEd6F,GACyC,mBAAlCA,GAEPA,IAGJ,UACU/7B,KAAKq1B,mCAAmCzsB,EAClD,CAAE,MAAO0P,GAGT,CACJ,CAEAuiB,GACJ,GAOc,kCAAAxF,CAAmCzsB,4CAC7C,MAAME,EAAQ9I,KAAKyI,0BAA0BM,WACvCgB,EAASjB,EAAME,iBAAiBtE,GAChC2oB,EAAWvkB,EAAMstB,cACjBzT,EAAiB7Z,EAAMutB,oBACvBC,GAAgBjJ,aAAQ,EAARA,EAAU3gB,SAASiW,aAAc,EAAdA,EAAgBjW,QAAS,IAE5DkV,kBAAEA,SAA4B5hB,KAAK2mB,oBAAoBnF,sBACzD8U,GAGEjU,QACIriB,KAAK2mB,oBAAoBhF,iCAAiCC,GAE9Doa,EACF3Z,EAAqBC,sBAAwBla,EAAkC+tB,eAE7En2B,KAAKi8B,wBAAwBrzB,EAAUyZ,GAEzC2Z,EACAh8B,KAAK2mB,oBAAoBzE,yBAEzBliB,KAAK2mB,oBAAoB7E,uBAAuB/X,EAExD,GAEc,uBAAAkyB,CACVrzB,EACAyZ,kDAEA,MACMhY,EADQrK,KAAKyI,0BAA0BM,WAC1BC,kBAEbsZ,oBAAEA,EAAmBa,UAAEA,EAASR,eAAEA,EAAcE,gBAAEA,EAAe1J,YAAEA,GACrEnZ,KAAK2mB,oBAAoBvE,yCACrBxZ,EACAyZ,GAaR,SAVMriB,KAAKyI,0BAA0B8tB,8BAA8B,CAC/DjU,sBACAa,YACAhK,gBAGAwJ,UACM3iB,KAAKyI,0BAA0BuxB,qBAAqBrX,IAG1DE,GAAmBxY,EAAKyvB,UAAUC,cAAc3zB,OAAS,EAAG,CAC5D,MAAM81B,QAAqBl8B,KAAKyI,0BAA0BwxB,sBACtDpX,GAGErgB,EACF05B,EAAahzB,wBAAkDN,IAC7DuzB,0CAAEA,GACJ35B,EAAcoC,oBAAsB,GAElC4F,GAA0C,QAAfzG,GADZm4B,EAAaE,mBAAqB,IACT,UAAE,IAAAr4B,OAAA,EAAAA,EAAEyG,2BAA4B,GACxE6xB,EAAsB7xB,EAAyB,GAC/CwB,EAA4BxB,EAAyByB,KACtDC,GAAWA,EAAOC,eAGvB,IACKH,GAA6BqwB,IAC9BF,EACF,CACE,MAAM9vB,GAAmBL,aAAyB,EAAzBA,EAA2BtH,KAAM23B,EAAoB33B,SAExE1E,KAAKyI,0BAA0B0xB,qBAAqB9tB,EAC9D,CACJ,CACJ,GAOQ,iBAAAilB,CACJ1oB,EACAqsB,GAEA,MACMzyB,EADQxC,KAAKyI,0BAA0BM,WACjBG,wBAAkDN,IAExE6oB,eAAEA,EAAcyD,yBAAEA,GAA6B1yB,EAAcoC,oBAAsB,GAEzF,OAAO0sB,GACH4D,EAA2BzD,EAAiB,GAC5CwD,aAAsB,EAAtBA,EAAwBpkB,OAEhC,EC1NJ,MASAyrB,GAAej9B,EAPVoJ,GACD,IAAIqzB,GACArzB,EACAvB,IACAoe,MAGwE,CAC5E,CAAE5gB,GAAI,qCACN,CAAEA,GAAI,+BCLK,MAAM63B,GACjB,WAAA38B,CACY6I,EACAgM,EACA4lB,GAFAr6B,KAAAyI,0BAAAA,EACAzI,KAAAyU,yBAAAA,EACAzU,KAAAq6B,4BAAAA,CACT,CAEG,UAAAzlB,CACF5Q,8CAEA,MAAM6Q,eAAEA,EAAckD,YAAEA,EAAWnP,SAAEA,GAAa5E,EAE5Cw4B,EAAezoB,QAAQc,aAAc,EAAdA,EAAgBtL,yBAE7C,IAAKX,EACD,MAAM,IAAIyK,EACN,qFAIR,IAAK0E,EACD,MAAM,IAAI1E,EACN,wFAIR,IAAKwB,EACD,MAAM,IAAIxB,EACN,2FAIR,GAAImpB,IAAiB3nB,EAAepS,aAChC,MAAM,IAAI4Q,EACN,wGAIR,GACImpB,GAC4E,mBAA/B,QAAtCz4B,EAAA8Q,EAAetL,+BAAuB,IAAAxF,OAAA,EAAAA,EAAE0F,0BAE/C,MAAM,IAAI4J,EACN,oKAIHmpB,UAGKx8B,KAAKyI,0BAA0Bg0B,uBAMzC,MAAMh6B,EAAe+5B,EACf3nB,EAAepS,aACfzC,KAAKyI,0BAA0BM,WAAWC,iBAAiB1C,SAAS2C,WAEpEjJ,KAAKyU,yBAAyB1R,cAAc6F,EAAUnG,GAAc,GAE1EzC,KAAKuV,aAAawC,EAAanP,EAAUiM,EAC7C,6RAEA,YAAAsC,GACI,OAAOT,QAAQU,SACnB,CAEQ,YAAA7B,CACJwC,EACAnP,EACAiM,GAEA,MAAMtL,wBAAEA,EAAuBkF,MAAEA,EAAKmrB,WAAEA,EAAU8C,qBAAEA,GAAyB7nB,EAEvEzL,EAAYpJ,KAAKyU,yBAAyBpL,sBAE1C7G,EADQxC,KAAKyI,0BAA0BM,WACjBG,wBAAkDN,IACxEzD,wBAAEA,EAAuBiF,qCAAEA,GAC7B5H,EAAcoC,oBAAsB,GAElC+3B,EAAsB,CACxBhkB,SAAU,IAAM3Y,KAAKyI,0BAA0Bg0B,uBAG7CxkB,EAAazY,OAAAC,OAAAD,OAAAC,OAAA,CACfyY,cAAe9O,EAAU+O,QAAQC,OACjC3J,MAAOzO,KAAKyU,yBAAyBjG,oBAAoBC,GACzDrE,uCACAjF,2BACIoE,GAA2BozB,GAC3Bx3B,GAA2By0B,GAAc,CAAER,kBAAmB,IAAMQ,MAGtE7iB,EAAe/W,KAAKq6B,4BAA4BlB,mBAClD,iBACAvwB,EACAqP,EACA1O,GAGAwN,EAAa+B,aACb/B,EAAagC,OAAO,IAAIhB,KACjB2kB,GAAwD,mBAAzBA,EACtCA,IAEA18B,KAAKyU,yBAAyBvF,cAAc6I,EAEpD,ECnHJ,MAgBA6kB,GAAev9B,EAdVoJ,IACD,MAAMgM,EAA2BtE,EAA+B1H,GAC1D4xB,EAA8B,IAAInB,GACpCzwB,EACAgM,GAGJ,OAAO,IAAI8nB,GACP9zB,EACAgM,EACA4lB,IAI8D,CAAC,CAAE31B,GAAI,2TCJ9D,MAAMm4B,GACjB,WAAAj9B,CACY6I,EACAgM,GADAzU,KAAAyI,0BAAAA,EACAzI,KAAAyU,yBAAAA,CACT,CAEG,UAAAG,CACF5Q,4CAEA,MAAMqW,qBAAEA,EAAoBtC,YAAEA,EAAWnP,SAAEA,GAAa5E,GAClDuF,wBAAEA,EAAyB9G,aAAcoG,GAC3CwR,GAAwB,GAEtBmiB,IAAiBjzB,EAEvB,IAAKX,EACD,MAAM,IAAIyK,EACN,qFAIR,IAAK0E,EACD,MAAM,IAAI1E,EACN,wFAIR,IAAKgH,EACD,MAAM,IAAIhH,EACN,iGAIR,GAAImpB,IAAiB3zB,EACjB,MAAM,IAAIwK,EACN,8GAIR,GACImpB,GAC6D,mBAAtDjzB,aAAuB,EAAvBA,EAAyBE,0BAEhC,MAAM,IAAI4J,EACN,0KAIHmpB,UAGKx8B,KAAKyI,0BAA0Bg0B,uBAGzC,MAAM3zB,EAAQ9I,KAAKyI,0BAA0BM,WAKvCtG,EAAe+5B,EACf3zB,EACAC,EAAME,iBAAiB1C,SAAS2C,WAEhCjJ,KAAKyU,yBAAyB1R,cAAc6F,EAAUnG,GAAc,GAE1EzC,KAAKuV,aAAawC,EAAanP,EAAUyR,EAC7C,GAEA,YAAAlD,GACI,OAAOT,QAAQU,SACnB,CAEQ,YAAA7B,CACJwC,EACAnP,EACAyR,GAEA,MAAM9Q,wBAAEA,EAAuBkF,MAAEA,EAAKmrB,WAAEA,EAAU8C,qBAAEA,GAChDriB,EAEEjR,EAAYpJ,KAAKyU,yBAAyBpL,sBAE1C7G,EADQxC,KAAKyI,0BAA0BM,WACjBG,wBAAkDN,IACxEzD,wBAAEA,EAAuBiF,qCAAEA,GAC7B5H,EAAcoC,oBAAsB,GAElC42B,EAAmB,CACrB5xB,YAAa,IAAM5J,KAAKyU,yBAAyB7K,YAAY,wBAC7D6O,UAAW,EAAGO,aACVhZ,KAAKyU,yBAAyB7J,gBAAgBhC,EAAUoQ,IAG1D2jB,EAAsB,CACxBtkB,QAAS,IAAMrY,KAAKwY,YAAYjP,GAChCoP,SAAU,IAAM3Y,KAAKyI,0BAA0Bg0B,uBAG7CpD,EAAuB75B,OAAAC,OAAAD,OAAAC,OAAA,IACpB2K,GAAwC,CACzCkvB,wBAA0B9iB,GACtBxW,KAAKs5B,wBAAwB9iB,GACjC+iB,wBAA0B/iB,GACtBxW,KAAKu5B,wBAAwB/iB,KACnC,CACFiC,UAAW,CAACjC,EAA8B+B,IACtCvY,KAAKw5B,wBACDhjB,EACA+B,EACA3P,EACAgxB,EACAxvB,KAINoQ,EAAiB,CAACpR,EAAU+O,QAAQsC,SAAUrR,EAAU+O,QAAQuC,QACtE,IAAIC,GAAyB,EAE7BH,EAAe5T,QAASsR,IACpB,IAAKyC,EAAwB,CACzB,MAAM8gB,EAAmBj8B,OAAAC,OAAAD,OAAAC,OAAAD,OAAAC,OAAA,CACrByY,gBACAzJ,MAAOzO,KAAKyU,yBAAyBjG,oBAAoBC,IACtD+sB,GACCjyB,GAA2BozB,GAC3Bx3B,GAA2Bk0B,GAG7BtiB,EAAe3N,EAAUyP,QAAQ4iB,GAEnC1kB,EAAa+B,cACb/B,EAAagC,OAAO,IAAIhB,KACxB4C,GAAyB,GAClB+hB,GAAwD,mBAAzBA,GACtCA,GAER,IAGC/hB,GACD3a,KAAKyU,yBAAyBvF,cAAc6I,EAEpD,CAEc,WAAAS,CACVjP,4CAEA,GAAIA,EAAyB,CACzB,MAAMmwB,QAAmB15B,KAAKyU,yBAAyBnL,wBACnDC,SAGEvJ,KAAKyI,0BAA0BkxB,aAAaD,EAAWh1B,GACjE,CACJ,GAEc,uBAAA80B,CACVhjB,EACA+B,EACA3P,EACAgxB,EACAxvB,4CAEA,IAAKoM,EAAKwC,QACN,MAAM,IAAIvY,EAAiBD,EAAqBW,gBAGpD,MACMkJ,EADQrK,KAAKyI,0BAA0BM,WAC1BC,iBAEnB,IACI,MAAM6wB,EAAmBxvB,EAAKyvB,UAAUC,cAAc3zB,OAAS,EAE/D,IAAKgE,EAAsC,CACvC,MAAMgE,QAAqBmK,EAAQ3C,MAAM1F,MAEnCyS,EACF3iB,KAAKyU,yBAAyBpH,kCAAkCe,GAIpE,SAFMpO,KAAKyI,0BAA0BuxB,qBAAqBrX,GAEtDkX,EAAkB,CAClB,MAAMhX,EACF7iB,KAAKyU,yBAAyBtG,mCAC1BC,SAGFpO,KAAKyI,0BAA0BwxB,sBAAsBpX,EAC/D,CACJ,CAuBA,OArBIgX,UACM75B,KAAKyU,yBAAyBtK,YAChC,sBACAhI,OACAA,EACAiI,IAIJA,UACMpK,KAAKyI,0BAA0BkxB,sBAGnC35B,KAAKyI,0BAA0B0N,YAAY,GAAI,CAAEoI,OAAQ,CAAE3V,oBAE3D5I,KAAKyU,yBAAyBpJ,cAAczC,EAAU4N,EAAKwC,SAE7D4gB,GAAoC,mBAAfA,GACrBA,KAGG,CACX,CAAE,MAAOjwB,GACL,GAAqB,iBAAVA,EACP,MAAM,IAAIhK,MAAMgK,GAGpB,MAAMA,CACV,CACJ,GAEc,uBAAA2vB,CACV9iB,4CAEA,MAAMjK,EAAUvM,KAAKyU,yBAAyBnI,WAAW,CACrDS,KAAMyJ,EAAKqM,gBAAgB9V,KAC3BC,YAAawJ,EAAKqM,gBAAgB7V,YAClCC,WAAYuJ,EAAKqM,gBAAgB5V,WACjCE,oBAAqBqJ,EAAKqM,gBAAgB/Z,QAG9C,UAGU9I,KAAKyI,0BAA0BuxB,qBAAqBztB,SACpDvM,KAAKyI,0BAA0BwxB,sBAAsB1tB,GAE3D,MAAM2tB,EAAiBl6B,KAAKyU,yBAAyB3I,iCAE/C9L,KAAKyI,0BAA0B0xB,qBAAqBD,EAAex1B,UACnE1E,KAAKyU,yBAAyBtK,YAAY,iBACpD,CAAE,MAAOR,GACL,GAAqB,iBAAVA,EACP,MAAM,IAAIhK,MAAMgK,GAGpB,MAAMA,CACV,CACJ,GAEc,uBAAA4vB,CACV/iB,4CAEA,MAAM0jB,EAAiBl6B,KAAKyU,yBAAyB3I,yBACjD0K,EAAK/L,uBAAuB/F,IAGhC,UACU1E,KAAKyI,0BAA0B0xB,qBAAqBD,EAAex1B,UACnE1E,KAAKyU,yBAAyBtK,YAAY,iBACpD,CAAE,MAAOR,GACL,GAAqB,iBAAVA,EACP,MAAM,IAAIhK,MAAMgK,GAGpB,MAAMA,CACV,CACJ,IC1RJ,MAQAmzB,GAAez9B,EANVoJ,GACD,IAAIo0B,GACAp0B,EACA0H,EAA+B1H,IAGqC,CACxE,CAAE/D,GAAI,iUCGK,MAAMq4B,GACjB,WAAAn9B,CACY6I,EACAmT,GADA5b,KAAAyI,0BAAAA,EACAzI,KAAA4b,iCAAAA,CACT,CAEG,UAAAhH,CACF5Q,4CAEA,MAAM8W,oBAAEA,EAAmB/C,YAAEA,EAAWnP,SAAEA,GAAa5E,GACjDuF,wBAAEA,EAAyB9G,aAAcoG,GAC3CiS,GAAuB,GAErB0hB,IAAiBjzB,EAEvB,IAAKX,EACD,MAAM,IAAIyK,EACN,qFAIR,IAAK0E,EACD,MAAM,IAAI1E,EACN,wFAIR,IAAKyH,EACD,MAAM,IAAIzH,EACN,gGAIR,GAAImpB,IAAiB3zB,EACjB,MAAM,IAAIwK,EACN,6GAIR,GACImpB,GAC6D,mBAAtDjzB,aAAuB,EAAvBA,EAAyBE,0BAEhC,MAAM,IAAI4J,EACN,yKAIHmpB,UAGKx8B,KAAKyI,0BAA0Bg0B,uBAMzC,MAAMh6B,EAAe+5B,EACf3zB,EACA7I,KAAKyI,0BAA0BM,WAAWC,iBAAiB1C,SAAS2C,WAEpEjJ,KAAK4b,iCAAiC7Y,cAAc6F,EAAUnG,GAAc,GAElFzC,KAAKuV,aAAawC,EAAanP,EAAUkS,EAC7C,GAEA,YAAA3D,GACI,OAAOT,QAAQU,SACnB,CAEQ,YAAA7B,CACJwC,EACAnP,EACAkS,GAEA,MAAMvR,wBAAEA,EAAuBkF,MAAEA,EAAKiuB,qBAAEA,GAAyB5hB,EAE3D1R,EAAYpJ,KAAK4b,iCAAiCvS,sBAClD6O,EAAgB9O,EAAU+O,QAAQ6C,MAElCwgB,EAAmB,CACrB5xB,YAAa,IACT5J,KAAK4b,iCAAiChS,YAAY,uBACtD6O,UAAW,EAAGO,aACVhZ,KAAK4b,iCAAiChR,gBAAgBhC,EAAUoQ,IAGlE2jB,EAAsB,CACxBtkB,QAAS,IAAMrY,KAAKwY,YAAYjP,GAChCoP,SAAU,IAAM3Y,KAAKyI,0BAA0Bg0B,uBAG7ChB,EAAmBj8B,OAAAC,OAAAD,OAAAC,OAAA,CACrByY,gBACAzJ,MAAOzO,KAAKg9B,0BAA0BvuB,IACnC+sB,GACCjyB,GAA2BozB,GAG7Bf,EAAqBxyB,EAAUyP,QAAQ4iB,GAEzCG,EAAmB9iB,aACnB8iB,EAAmB7iB,OAAO,IAAIhB,KACvB2kB,GAAwD,mBAAzBA,EACtCA,IAEA18B,KAAK4b,iCAAiC1M,cAAc6I,EAE5D,CAEQ,yBAAAilB,CAA0BvuB,GAC9B,MAAMwuB,EAAmBj9B,KAAK4b,iCAAiCpN,oBAAoBC,GAEnF,OAAIwuB,EAAiBvuB,QAAU6M,GAAiB2hB,KAC5C19B,OAAAC,OAAAD,OAAAC,OAAA,GACOw9B,GAAgB,CACnBvuB,WAAOvM,IAIR86B,CACX,CAEc,WAAAzkB,CACVjP,4CAEA,GAAIA,EAAyB,CACzB,MAAMmwB,QAAmB15B,KAAK4b,iCAAiCtS,wBAC3DC,SAGEvJ,KAAKyI,0BAA0BkxB,aAAaD,EAAWh1B,GACjE,CACJ,IChJJ,MAQAy4B,GAAe99B,EANVoJ,GACD,IAAIs0B,GACAt0B,EACA4yB,GAAuC5yB,IAG4B,CACvE,CAAE/D,GAAI,gUCQK,MAAM04B,GAGjB,WAAAx9B,CACYy9B,EACApC,GADAj7B,KAAAq9B,+BAAAA,EACAr9B,KAAAi7B,2BAAAA,CACT,CAOG,aAAAl4B,CACFP,EACAqG,EACAnG,EACAC,4CAUA,OARA3C,KAAKoJ,gBAAkBpJ,KAAKi7B,2BAA2B14B,aACnDC,EACAqG,OACA1G,EACAO,EACAC,GAGG3C,KAAKoJ,SAChB,GAEA,mBAAAC,GACI,IAAKrJ,KAAKoJ,UACN,MAAM,IAAI7I,EAGd,OAAOP,KAAKoJ,SAChB,CAOM,wBAAAk0B,CACFvzB,EACAF,EACAjB,EACAoB,kDAEA,IAAKA,EACD,MAAM,IAAIvJ,EAAiBD,EAAqBW,gBAGpD,MAAMo8B,EAAY,CACdC,kBAAmB,CACf3zB,aACA4zB,gBAAiBzzB,GAErB0zB,aAAc3zB,EACd4zB,YAAa,CACT,CAAE92B,IAAK,eAAgBC,MAAO,UAC9B,CAAED,IAAK,SAAUC,MAAO,yBACxB,CAAED,IAAK,WAAYC,MAAO8B,KAI5BlB,QAAiB1H,KAAKq9B,+BAA+BO,yBACvDL,GAGJ,KAA+B,QAA1Bx5B,EAAA2D,EAASJ,KAAKu2B,oBAAY,IAAA95B,OAAA,EAAAA,EAAE+5B,qBAC7B,MAAM,IAAIn+B,MAAM,0CAGpB2C,OAAOqU,SAASlX,OAAOiI,EAASJ,KAAKu2B,aAAaC,oBACtD,GAEM,wBAAAC,CACFl0B,EACAE,EACA/F,4CAEA,MAAMu5B,EAAY,CACdG,aAAc3zB,EACdi0B,sBAAuBn0B,GAO3B,aALuB7J,KAAKq9B,+BAA+BU,yBACvDR,EACAv5B,IAGYsD,KAAK0C,OACzB,GAEM,iBAAAi0B,CACFl0B,EACAwC,EACAvI,4CAEA,OAAOhE,KAAKq9B,+BAA+BY,kBAAkBl0B,EAAQwC,EAASvI,EAClF,GAOA,mBAAAwK,CAAoBC,GAChB,MAAMC,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,MAAEA,GAAUJ,GAAS,GAE3CK,EAAc,CAChBJ,MAAOA,GAAS6M,GAAiB7M,GAASA,OAAQvM,EAClDwM,OAAQ3O,KAAK+O,eAAeJ,GAC5BC,MAAOA,GAAS0M,GAAiB1M,GAASA,OAAQzM,EAClD0M,MAAOA,GAAS2M,GAAiB3M,GAASA,OAAQ1M,GAGtD,OAAO6M,EAAOF,EAAaG,EAC/B,CAEA,cAAAF,CAAeJ,GAKX,OAAKA,GAA4B,iBAAXA,EAIlBA,EANc,MAUdA,EAXc,MAeXA,EAhBe,EAiB1B,CAOA,aAAAO,CAAcC,GACV,MAAMC,EAAUD,GAAaE,SAASC,eAAeH,GAEjDC,IAEAA,EAAQX,MAAMc,QAAU,OAEhC,ySC9JW,MAAM2uB,GACjB,WAAAt+B,CAAoBu+B,GAAAn+B,KAAAm+B,0CAAAA,CAAyE,CAEvF,UAAAvpB,CACF5Q,oDAEA,MAAMo6B,qBAAEA,EAAoBrmB,YAAEA,EAAWnP,SAAEA,GAAa5E,EAExD,IAAK4E,EACD,MAAM,IAAIyK,EACN,qFAIR,IAAK0E,EACD,MAAM,IAAI1E,EACN,wFAIR,IAAK+qB,EACD,MAAM,IAAI/qB,EACN,iGAIR,IAAIgrB,EAEJ,IACIA,EAA2B9N,KAAK+N,MAAMC,KAAKH,EAAqBx5B,oBACpE,CAAE,MAAAmV,GACE,MAAM,IAAI1G,EAAqB,uDACnC,CAEA,MAAM2K,EAC8D,QAAhEhQ,EAA2C,QAA3CjK,EAAAs6B,EAAyBz5B,0BAAkB,IAAAb,OAAA,EAAAA,EAAE2T,2BAAmB,IAAA1J,OAAA,EAAAA,EAAEwwB,uBAEhEx+B,KAAKm+B,0CAA0Cp7B,cACjDs7B,EACAD,EAAqB93B,SAAS2C,MAC9B,GAGJjJ,KAAKuV,aACDwC,EACA,wBACAqmB,EAAqBr0B,OACrBiU,EAER,GAEA,YAAA7G,GACI,OAAOT,QAAQU,SACnB,CAEQ,YAAA7B,CACJwC,EACAlO,EACAE,EACAiU,GAEA,MAAM5U,EAAYpJ,KAAKm+B,0CAA0C90B,sBAE3DmyB,EAAmB,CACrB5xB,YAAa,IACT5J,KAAKm+B,0CAA0CJ,yBAC3Cl0B,EACAE,GAER0O,UAAW,CAAA1U,EAAA06B,IAGNC,GAAA1+B,KAAA,CAAA+D,EAAA06B,QAAA,aAFDzlB,QAAEA,GACFT,GAEA,MAAMnK,QAAqBmK,EAAQ3C,MAAM1F,MACnCyS,EAAiB3iB,KAAK2+B,gCAAgCvwB,SAEtDpO,KAAKm+B,0CAA0CF,kBACjDl0B,EACA4Y,SAEE3iB,KAAKm+B,0CAA0Cb,yBACjDvzB,EACAF,EACA,iBACAmP,EAER,IAGEyiB,EAAmBj8B,OAAAC,OAAA,CACrByY,cAAe9O,EAAU+O,QAAQC,OACjC3J,MAAOzO,KAAKm+B,0CAA0C3vB,oBAAoBwP,IACvEwd,GAGDzkB,EAAe3N,EAAUyP,QAAQ4iB,GAEnC1kB,EAAa+B,aACb/B,EAAagC,OAAO,IAAIhB,KAExB/X,KAAKm+B,0CAA0CjvB,cAAc6I,EAErE,CAEQ,+BAAA4mB,CAAgCvwB,eACpC,MAAMd,MAAEA,GAAUc,EAElB,MAAO,CACH5B,UAAWc,EAAMrN,KAAKsN,WACtBd,SAAUa,EAAMrN,KAAKuN,QACrBZ,QAAS,GACTC,SAAUS,EAAMf,QAAQmB,eACxBZ,SAAUQ,EAAMf,QAAQoB,eACxBZ,KAAMO,EAAMf,QAAQqB,aACpBlB,MAAOY,EAAMG,cACbP,gBAA2C,QAA1BnJ,EAAAuJ,EAAMf,QAAQwB,oBAAY,IAAAhK,EAAAA,EAAI,GAC/CoJ,oBAA+C,QAA1Ba,EAAAV,EAAMf,QAAQwB,oBAAY,IAAAC,EAAAA,EAAI,GACnDhB,YAAaM,EAAMf,QAAQsB,aAC3BZ,WAAYK,EAAMf,QAAQuB,YAC1BnB,MAAgD,QAAzCwb,EAAW,QAAXpO,EAAAzM,EAAMX,aAAK,IAAAoN,OAAA,EAAAA,EAAE9L,aAAaC,uBAAe,IAAAia,EAAAA,EAAI,GACpDyW,mBAAmB,EAE3B,ECpIJ,MAUAC,GAAex/B,EARVg+B,GACD,IAAIa,GACA,IAAId,GACAC,EACA,IAAInC,GAA2B/zB,OAI2B,CAClE,CAAEzC,GAAI,iUCDK,MAAMo6B,GACjB,WAAAl/B,CAAoBu+B,GAAAn+B,KAAAm+B,0CAAAA,CAAyE,CAEvF,UAAAvpB,CACF5Q,oDAEA,MAAM+6B,2BAAEA,EAA0BhnB,YAAEA,EAAWnP,SAAEA,GAAa5E,EAE9D,IAAK4E,EACD,MAAM,IAAIyK,EACN,qFAIR,IAAK0E,EACD,MAAM,IAAI1E,EACN,wFAIR,IAAK0rB,EACD,MAAM,IAAI1rB,EACN,uGAIR,IAAIgrB,EAEJ,IACIA,EAA2B9N,KAAK+N,MAC5BC,KAAKQ,EAA2Bn6B,oBAExC,CAAE,MAAAmV,GACE,MAAM,IAAI1G,EAAqB,uDACnC,OAEMrT,KAAKm+B,0CAA0Cp7B,cACjDs7B,EACAU,EAA2Bz4B,SAAS2C,MACpC,GAGJ,MAAM+U,EAC8D,QAAhEhQ,EAA2C,QAA3CjK,EAAAs6B,EAAyBz5B,0BAAkB,IAAAb,OAAA,EAAAA,EAAE2T,2BAAmB,IAAA1J,OAAA,EAAAA,EAAEwwB,iBAEtEx+B,KAAKuV,aACDwC,EACA,8BACAgnB,EAA2Bh1B,OAC3BiU,EAER,GAEA,YAAA7G,GACI,OAAOT,QAAQU,SACnB,CAEQ,YAAA7B,CACJwC,EACAlO,EACAE,EACAiU,GAEA,MAAM5U,EAAYpJ,KAAKm+B,0CAA0C90B,sBAC3DmR,EAAiB,CAACpR,EAAU+O,QAAQsC,SAAUrR,EAAU+O,QAAQuC,QAEhE8gB,EAAmB,CACrB5xB,YAAa,IACT5J,KAAKm+B,0CAA0CJ,yBAC3Cl0B,EACAE,GAER0O,UAAW,CAAA1U,EAAA06B,IAGNO,GAAAh/B,KAAA,CAAA+D,EAAA06B,QAAA,aAFDzlB,QAAEA,GACFT,GAEA,MAAMnK,QAAqBmK,EAAQ3C,MAAM1F,MACnCyS,EAAiB3iB,KAAK2+B,gCAAgCvwB,SAEtDpO,KAAKm+B,0CAA0CF,kBACjDl0B,EACA4Y,SAGE3iB,KAAKm+B,0CAA0Cb,yBACjDvzB,EACAF,EACA,uBACAmP,EAER,IAGJ,IAAI2B,GAAyB,EAE7BH,EAAe5T,QAASsR,IACpB,IAAKyC,EAAwB,CACzB,MAAM8gB,EAAmBj8B,OAAAC,OAAA,CACrByY,gBACAzJ,MAAOzO,KAAKm+B,0CAA0C3vB,oBAClDwP,IAEDwd,GAGDzkB,EAAe3N,EAAUyP,QAAQ4iB,GAEnC1kB,EAAa+B,eACb/B,EAAagC,OAAO,IAAIhB,KACxB4C,GAAyB,EAEjC,IAGCA,GACD3a,KAAKm+B,0CAA0CjvB,cAAc6I,EAErE,CAEQ,+BAAA4mB,CAAgCvwB,eACpC,MAAMd,MAAEA,GAAUc,EAElB,MAAO,CACH5B,UAAWc,EAAMrN,KAAKsN,WACtBd,SAAUa,EAAMrN,KAAKuN,QACrBZ,QAAS,GACTC,SAAUS,EAAMf,QAAQmB,eACxBZ,SAAUQ,EAAMf,QAAQoB,eACxBZ,KAAMO,EAAMf,QAAQqB,aACpBlB,MAAOY,EAAMG,cACbP,gBAA2C,QAA1BnJ,EAAAuJ,EAAMf,QAAQwB,oBAAY,IAAAhK,EAAAA,EAAI,GAC/CoJ,oBAA+C,QAA1Ba,EAAAV,EAAMf,QAAQwB,oBAAY,IAAAC,EAAAA,EAAI,GACnDhB,YAAaM,EAAMf,QAAQsB,aAC3BZ,WAAYK,EAAMf,QAAQuB,YAC1BnB,MAAgD,QAAzCwb,EAAW,QAAXpO,EAAAzM,EAAMX,aAAK,IAAAoN,OAAA,EAAAA,EAAE9L,aAAaC,uBAAe,IAAAia,EAAAA,EAAI,GACpDyW,mBAAmB,EAE3B,ECnJJ,MAUAK,GAAe5/B,EARVg+B,GACD,IAAIyB,GACA,IAAI1B,GACAC,EACA,IAAInC,GAA2B/zB,OAIiC,CACxE,CAAEzC,GAAI,uUCHK,MAAMw6B,GACjB,WAAAt/B,CAAoBu+B,GAAAn+B,KAAAm+B,0CAAAA,CAAyE,CAEvF,UAAAvpB,CACF5Q,oDAEA,MAAM8W,oBAAEA,EAAmB/C,YAAEA,EAAWnP,SAAEA,GAAa5E,EAEvD,IAAK4E,EACD,MAAM,IAAIyK,EACN,qFAIR,IAAK0E,EACD,MAAM,IAAI1E,EACN,wFAIR,IAAKyH,EACD,MAAM,IAAIzH,EACN,gGAIR,IAAIgrB,EAEJ,IACIA,EAA2B9N,KAAK+N,MAAMC,KAAKzjB,EAAoBlW,oBACnE,CAAE,MAAAmV,GACE,MAAM,IAAI1G,EAAqB,uDACnC,CAEA,MAAM2K,EAC8D,QAAhEhQ,EAA2C,QAA3CjK,EAAAs6B,EAAyBz5B,0BAAkB,IAAAb,OAAA,EAAAA,EAAE2T,2BAAmB,IAAA1J,OAAA,EAAAA,EAAEwwB,uBAEhEx+B,KAAKm+B,0CAA0Cp7B,cACjDs7B,EACAvjB,EAAoBxU,SAAS2C,MAC7B,GAGJjJ,KAAKuV,aACDwC,EACA,uBACA+C,EAAoB/Q,OACpBiU,EAER,GAEA,YAAA7G,GACI,OAAOT,QAAQU,SACnB,CAEQ,YAAA7B,CACJwC,EACAlO,EACAE,EACAiU,GAEA,MAAM5U,EAAYpJ,KAAKm+B,0CAA0C90B,sBAE3DmyB,EAAmB,CACrB5xB,YAAa,IACT5J,KAAKm+B,0CAA0CJ,yBAC3Cl0B,EACAE,GAER0O,UAAW1U,GAA+Co7B,GAAAn/B,KAAA,CAAA+D,QAAA,aAAxCiV,QAAEA,UACVhZ,KAAKm+B,0CAA0Cb,yBACjDvzB,EACAF,EACA,sBACAmP,EAER,IAGEyiB,EAAmBj8B,OAAAC,OAAA,CACrByY,cAAe9O,EAAU+O,QAAQ6C,MACjCvM,MAAOzO,KAAKg9B,0BAA0Bhf,IACnCwd,GAGDzkB,EAAe3N,EAAUyP,QAAQ4iB,GAEnC1kB,EAAa+B,aACb/B,EAAagC,OAAO,IAAIhB,KAExB/X,KAAKm+B,0CAA0CjvB,cAAc6I,EAErE,CAEQ,yBAAAilB,CAA0BvuB,GAC9B,MAAMwuB,EACFj9B,KAAKm+B,0CAA0C3vB,oBAAoBC,GAEvE,OAAIwuB,EAAiBvuB,QAAU6M,GAAiB2hB,KAC5C19B,OAAAC,OAAAD,OAAAC,OAAA,GACOw9B,GAAgB,CACnBvuB,WAAOvM,IAIR86B,CACX,EClHJ,MAUAmC,GAAe//B,EARVg+B,GACD,IAAI6B,GACA,IAAI9B,GACAC,EACA,IAAInC,GAA2B/zB,OAIgC,CACvE,CAAEzC,GAAI","sources":["webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/to-resolvable-module.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/standard-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/set-prototype-of.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-method-client-unavailable-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/missing-data-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/paypal-commerce-constants.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/utils/transform-locale-to-paypal-format.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/paypal-sdk-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/create-paypal-sdk-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/buy-now-cart-creation-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/request-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/cart/cart-source.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/paypal-types.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/paypal-integration-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/common/http-request/internal-api-headers.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/common/http-request/content-type.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/common/http-request/sdk-version-headers.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/paypal-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/create-paypal-integration-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/ui/src/loading-indicator/loading-indicator.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/invalid-argument-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-argument-invalid-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-method-invalid-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/order-finalization-not-required-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/payment/is-hosted-intrument-like.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/payment/is-vaulted-instrument.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/is-request-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/utils/get-paypal-messages-styles-from-bnpl-config.ts","webpack://@bigcommerce/checkout-sdk/./packages/utility/src/is-base-instrument/is-base-instrument.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/utils/is-redirect-action-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/utils/is-paypal-provider-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/create-paypal-commerce-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/not-implemented-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/create-paypal-commerce-credit-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-venmo/create-paypal-commerce-venmo-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-constants.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/timeout-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-types.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-alternative-methods/paypal-commerce-alternative-methods-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/utility/src/is-experiment-enabled/is-experiment-enabled.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-alternative-methods/create-paypal-commerce-alternative-methods-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/payment/instrument.ts","webpack://@bigcommerce/checkout-sdk/./packages/storage/src/cookie-storage.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/hosted-form/hosted-field-type.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/paypal-fastlane-utils.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/create-paypal-fastlane-utils.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/hosted-form/is-credit-card-form-fields.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/hosted-form/is-credit-card-vaulted-form-fields.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-method-failed-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/not-initialized-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-invalid-form-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit-card/paypal-commerce-credit-cards-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-utils/src/utils/is-paypal-commerce-accelerated-checkout-customer.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit-card/create-paypal-commerce-credit-cards-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-ratepay/paypal-commerce-ratepay-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-ratepay/create-paypal-commerce-ratepay-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-request-sender.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/utils/get-fastlane-styles.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/utils/is-paypal-fastlane-customer.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-fastlane/paypal-commerce-fastlane-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/utils/is-paypal-fastlane-request-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-fastlane/create-paypal-commerce-fastlane-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-utils/src/paypal-button-creation-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/checkout-buttons/default-checkout-button-height.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/create-paypal-commerce-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-integration-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/create-paypal-commerce-integration-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/create-paypal-commerce-credit-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-venmo/create-paypal-commerce-venmo-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-fastlane/paypal-commerce-fastlane-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-fastlane/create-paypal-commerce-fastlane-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/create-paypal-commerce-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/create-paypal-commerce-credit-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-venmo/create-paypal-commerce-venmo-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-wallet-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-wallet-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce/create-paypal-commerce-wallet-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-wallet-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-credit/create-paypal-commerce-credit-wallet-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-wallet-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/paypal-commerce-integration/src/paypal-commerce-venmo/create-paypal-commerce-venmo-wallet-strategy.ts"],"sourcesContent":["import ResolvableModule from './resolvable-module';\n\nexport default function toResolvableModule<TModule extends object, TIdentifier>(\n module: TModule,\n resolveIds: TIdentifier[],\n): ResolvableModule<TModule, TIdentifier> {\n return Object.assign(module, { resolveIds });\n}\n","import CustomError from './custom-error';\nimport setPrototypeOf from './set-prototype-of';\n\n/**\n * This error type should not be constructed directly. It is a base class for\n * all custom errors thrown in this library.\n */\nexport default abstract class StandardError extends Error implements CustomError {\n name = 'StandardError';\n type = 'standard';\n\n constructor(message?: string) {\n super(message || 'An unexpected error has occurred.');\n\n setPrototypeOf(this, new.target.prototype);\n\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, new.target);\n } else {\n this.stack = new Error(this.message).stack;\n }\n }\n}\n","export default function setPrototypeOf(object: any, prototype: object) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(object, prototype);\n } else {\n object.__proto__ = prototype;\n }\n\n return object;\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when the client library of a payment method fails\n * to load, or for some reason, it is inaccessible.\n */\nexport default class PaymentMethodClientUnavailableError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Unable to proceed because the client library of a payment method is not loaded or ready to be used.',\n );\n\n this.name = 'PaymentMethodClientUnavailableError';\n this.type = 'payment_method_client_unavailable';\n }\n}\n","import StandardError from './standard-error';\n\nexport enum MissingDataErrorType {\n MissingBillingAddress,\n MissingCart,\n MissingCheckout,\n MissingConsignments,\n MissingCustomer,\n MissingCheckoutConfig,\n MissingOrder,\n MissingOrderConfig,\n MissingOrderId,\n MissingPayment,\n MissingPaymentId,\n MissingPaymentInstrument,\n MissingPaymentMethod,\n MissingPaymentRedirectUrl,\n MissingPaymentStatus,\n MissingPaymentToken,\n MissingShippingAddress,\n}\n\n/**\n * Throw this error when data that is expected to exist is missing. Usually it\n * is due to the fact that certain data has not been retrieved from or saved to\n * the server yet. And such data is required to perform certain actions.\n */\nexport default class MissingDataError extends StandardError {\n constructor(public subtype: MissingDataErrorType) {\n super(getErrorMessage(subtype));\n\n this.name = 'MissingDataError';\n this.type = 'missing_data';\n }\n}\n\nfunction getErrorMessage(type: MissingDataErrorType): string {\n switch (type) {\n case MissingDataErrorType.MissingBillingAddress:\n return 'Unable to proceed because billing address data is unavailable.';\n\n case MissingDataErrorType.MissingCart:\n return 'Unable to proceed because cart data is unavailable.';\n\n case MissingDataErrorType.MissingConsignments:\n return 'Unable to proceed because consignments data is unavailable.';\n\n case MissingDataErrorType.MissingCheckout:\n return 'Unable to proceed because checkout data is unavailable.';\n\n case MissingDataErrorType.MissingCustomer:\n return 'Unable to proceed because customer data is unavailable.';\n\n case MissingDataErrorType.MissingCheckoutConfig:\n case MissingDataErrorType.MissingOrderConfig:\n return 'Unable to proceed because configuration data is unavailable.';\n\n case MissingDataErrorType.MissingOrder:\n return 'Unable to proceed because order data is unavailable.';\n\n case MissingDataErrorType.MissingOrderId:\n return 'Unable to proceed because order ID is unavailable or not generated yet.';\n\n case MissingDataErrorType.MissingPayment:\n return 'Unable to proceed because payment data is unavailable.';\n\n case MissingDataErrorType.MissingPaymentToken:\n return 'Unable to proceed because the token required to submit a payment is missing.';\n\n case MissingDataErrorType.MissingPaymentMethod:\n return 'Unable to proceed because payment method data is unavailable or not properly configured.';\n\n case MissingDataErrorType.MissingShippingAddress:\n return 'Unable to proceed because shipping address data is unavailable.';\n\n default:\n return 'Unable to proceed because the required data is unavailable.';\n }\n}\n","export const LOADING_INDICATOR_STYLES = {\n 'background-color': 'rgba(0, 0, 0, 0.4)',\n 'z-index': '1000',\n};\n\n/**\n * PayPal SDK supported locales\n * https://developer.paypal.com/sdk/js/configuration/#link-locale\n */\nexport const PAYPAL_SDK_SUPPORTED_LOCALES = [\n 'ar_BH',\n 'ar_DZ',\n 'ar_EG',\n 'ar_JO',\n 'ar_KW',\n 'ar_MA',\n 'ar_OM',\n 'ar_QA',\n 'ar_SA',\n 'ar_TN',\n 'ar_YE',\n 'ar_AE',\n 'bg_BG',\n 'cs_CZ',\n 'da_DK',\n 'da_FO',\n 'da_GL',\n 'de_AT',\n 'de_CH',\n 'de_DE',\n 'de_LU',\n 'el_GR',\n 'en_AD',\n 'en_AE',\n 'en_AG',\n 'en_AI',\n 'en_AL',\n 'en_AM',\n 'en_AN',\n 'en_AO',\n 'en_AT',\n 'en_AU',\n 'en_AW',\n 'en_AZ',\n 'en_BB',\n 'en_BE',\n 'en_BH',\n 'en_BJ',\n 'en_BM',\n 'en_BN',\n 'en_BS',\n 'en_BT',\n 'en_BW',\n 'en_BY',\n 'en_BZ',\n 'en_C2',\n 'en_CA',\n 'en_CD',\n 'en_CG',\n 'en_CH',\n 'en_CI',\n 'en_CK',\n 'en_CL',\n 'en_CM',\n 'en_CN',\n 'en_CO',\n 'en_CR',\n 'en_CV',\n 'en_CY',\n 'en_CZ',\n 'en_DE',\n 'en_DJ',\n 'en_DK',\n 'en_DM',\n 'en_DO',\n 'en_DZ',\n 'en_EC',\n 'en_EE',\n 'en_EG',\n 'en_ER',\n 'en_ES',\n 'en_ET',\n 'en_FI',\n 'en_FJ',\n 'en_FK',\n 'en_FM',\n 'en_FO',\n 'en_FR',\n 'en_GA',\n 'en_GB',\n 'en_GD',\n 'en_GE',\n 'en_GF',\n 'en_GI',\n 'en_GL',\n 'en_GM',\n 'en_GN',\n 'en_GP',\n 'en_GR',\n 'en_GT',\n 'en_GW',\n 'en_GY',\n 'en_HK',\n 'en_HN',\n 'en_HR',\n 'en_HU',\n 'en_ID',\n 'en_IE',\n 'en_IL',\n 'en_IN',\n 'en_IS',\n 'en_IT',\n 'en_JM',\n 'en_JO',\n 'en_JP',\n 'en_KE',\n 'en_KG',\n 'en_KH',\n 'en_KI',\n 'en_KM',\n 'en_KN',\n 'en_KR',\n 'en_KW',\n 'en_KY',\n 'en_KZ',\n 'en_LA',\n 'en_LC',\n 'en_LI',\n 'en_LK',\n 'en_LS',\n 'en_LT',\n 'en_LU',\n 'en_LV',\n 'en_MA',\n 'en_MC',\n 'en_MD',\n 'en_ME',\n 'en_MG',\n 'en_MH',\n 'en_MK',\n 'en_ML',\n 'en_MN',\n 'en_MQ',\n 'en_MR',\n 'en_MS',\n 'en_MT',\n 'en_MU',\n 'en_MV',\n 'en_MW',\n 'en_MY',\n 'en_MZ',\n 'en_NA',\n 'en_NC',\n 'en_NE',\n 'en_NF',\n 'en_NG',\n 'en_NI',\n 'en_NL',\n 'en_NO',\n 'en_NP',\n 'en_NR',\n 'en_NU',\n 'en_NZ',\n 'en_OM',\n 'en_PA',\n 'en_PE',\n 'en_PF',\n 'en_PG',\n 'en_PH',\n 'en_PL',\n 'en_PM',\n 'en_PN',\n 'en_PT',\n 'en_PW',\n 'en_PY',\n 'en_QA',\n 'en_RE',\n 'en_RO',\n 'en_RS',\n 'en_RU',\n 'en_RW',\n 'en_SA',\n 'en_SB',\n 'en_SC',\n 'en_SE',\n 'en_SG',\n 'en_SH',\n 'en_SI',\n 'en_SJ',\n 'en_SK',\n 'en_SL',\n 'en_SM',\n 'en_SN',\n 'en_SO',\n 'en_SR',\n 'en_ST',\n 'en_SV',\n 'en_SZ',\n 'en_TC',\n 'en_TD',\n 'en_TG',\n 'en_TH',\n 'en_TJ',\n 'en_TM',\n 'en_TN',\n 'en_TO',\n 'en_TR',\n 'en_TT',\n 'en_TV',\n 'en_TW',\n 'en_TZ',\n 'en_UA',\n 'en_UG',\n 'en_US',\n 'en_UY',\n 'en_VA',\n 'en_VC',\n 'en_VE',\n 'en_VG',\n 'en_VN',\n 'en_VU',\n 'en_WF',\n 'en_WS',\n 'en_YE',\n 'en_YT',\n 'en_ZA',\n 'en_ZM',\n 'en_ZW',\n 'es_AD',\n 'es_AI',\n 'es_AO',\n 'es_AR',\n 'es_AW',\n 'es_BB',\n 'es_BJ',\n 'es_BM',\n 'es_BO',\n 'es_BS',\n 'es_BZ',\n 'es_CD',\n 'es_CG',\n 'es_CK',\n 'es_CL',\n 'es_CO',\n 'es_CR',\n 'es_CV',\n 'es_DJ',\n 'es_DM',\n 'es_DO',\n 'es_DZ',\n 'es_EC',\n 'es_EG',\n 'es_ER',\n 'es_ES',\n 'es_ET',\n 'es_FJ',\n 'es_FK',\n 'es_FO',\n 'es_GA',\n 'es_GD',\n 'es_GE',\n 'es_GI',\n 'es_GL',\n 'es_GM',\n 'es_GN',\n 'es_GT',\n 'es_GW',\n 'es_GY',\n 'es_HN',\n 'es_IE',\n 'es_JM',\n 'es_JO',\n 'es_KE',\n 'es_KG',\n 'es_KI',\n 'es_KM',\n 'es_KN',\n 'es_KW',\n 'es_KY',\n 'es_KZ',\n 'es_LC',\n 'es_LI',\n 'es_LS',\n 'es_LU',\n 'es_MA',\n 'es_MG',\n 'es_MH',\n 'es_ML',\n 'es_MR',\n 'es_MS',\n 'es_MU',\n 'es_MW',\n 'es_MX',\n 'es_MZ',\n 'es_NA',\n 'es_NC',\n 'es_NE',\n 'es_NF',\n 'es_NI',\n 'es_NR',\n 'es_NU',\n 'es_NZ',\n 'es_OM',\n 'es_PA',\n 'es_PE',\n 'es_PF',\n 'es_PG',\n 'es_PM',\n 'es_PN',\n 'es_PW',\n 'es_PY',\n 'es_QA',\n 'es_RS',\n 'es_RW',\n 'es_SA',\n 'es_SB',\n 'es_SC',\n 'es_SH',\n 'es_SJ',\n 'es_SL',\n 'es_SM',\n 'es_SN',\n 'es_SO',\n 'es_SR',\n 'es_ST',\n 'es_SV',\n 'es_SZ',\n 'es_TC',\n 'es_TD',\n 'es_TG',\n 'es_TJ',\n 'es_TM',\n 'es_TN',\n 'es_TT',\n 'es_TV',\n 'es_UA',\n 'es_UG',\n 'es_US',\n 'es_UY',\n 'es_VA',\n 'es_VC',\n 'es_VE',\n 'es_VG',\n 'es_VU',\n 'es_WF',\n 'es_YE',\n 'es_ZM',\n 'et_EE',\n 'fi_FI',\n 'fr_AD',\n 'fr_AE',\n 'fr_AI',\n 'fr_AM',\n 'fr_AO',\n 'fr_AW',\n 'fr_AZ',\n 'fr_BB',\n 'fr_BE',\n 'fr_BF',\n 'fr_BI',\n 'fr_BJ',\n 'fr_BM',\n 'fr_BS',\n 'fr_BZ',\n 'fr_CA',\n 'fr_CD',\n 'fr_CG',\n 'fr_CH',\n 'fr_CI',\n 'fr_CK',\n 'fr_CM',\n 'fr_CV',\n 'fr_DJ',\n 'fr_DM',\n 'fr_DO',\n 'fr_DZ',\n 'fr_EC',\n 'fr_ER',\n 'fr_ET',\n 'fr_FJ',\n 'fr_FK',\n 'fr_FO',\n 'fr_FR',\n 'fr_GA',\n 'fr_GD',\n 'fr_GE',\n 'fr_GF',\n 'fr_GI',\n 'fr_GL',\n 'fr_GM',\n 'fr_GN',\n 'fr_GP',\n 'fr_GT',\n 'fr_GW',\n 'fr_GY',\n 'fr_HN',\n 'fr_IE',\n 'fr_JM',\n 'fr_JO',\n 'fr_KE',\n 'fr_KG',\n 'fr_KI',\n 'fr_KM',\n 'fr_KN',\n 'fr_KW',\n 'fr_KY',\n 'fr_KZ',\n 'fr_LC',\n 'fr_LI',\n 'fr_LS',\n 'fr_LU',\n 'fr_MA',\n 'fr_MC',\n 'fr_MG',\n 'fr_MH',\n 'fr_ML',\n 'fr_MQ',\n 'fr_MR',\n 'fr_MS',\n 'fr_MU',\n 'fr_MW',\n 'fr_MZ',\n 'fr_NA',\n 'fr_NC',\n 'fr_NE',\n 'fr_NF',\n 'fr_NI',\n 'fr_NR',\n 'fr_NU',\n 'fr_NZ',\n 'fr_OM',\n 'fr_PA',\n 'fr_PE',\n 'fr_PF',\n 'fr_PG',\n 'fr_PM',\n 'fr_PN',\n 'fr_PW',\n 'fr_QA',\n 'fr_RE',\n 'fr_RS',\n 'fr_RW',\n 'fr_SA',\n 'fr_SB',\n 'fr_SC',\n 'fr_SH',\n 'fr_SJ',\n 'fr_SL',\n 'fr_SM',\n 'fr_SN',\n 'fr_SO',\n 'fr_SR',\n 'fr_ST',\n 'fr_SV',\n 'fr_SZ',\n 'fr_TC',\n 'fr_TD',\n 'fr_TG',\n 'fr_TJ',\n 'fr_TM',\n 'fr_TN',\n 'fr_TT',\n 'fr_TV',\n 'fr_UA',\n 'fr_UG',\n 'fr_US',\n 'fr_UY',\n 'fr_VA',\n 'fr_VC',\n 'fr_VE',\n 'fr_VG',\n 'fr_VU',\n 'fr_WF',\n 'fr_YE',\n 'fr_YT',\n 'fr_ZA',\n 'fr_ZM',\n 'he_IL',\n 'hu_HU',\n 'id_ID',\n 'it_IT',\n 'ja_JP',\n 'ko_KR',\n 'lv_LV',\n 'lt_LT',\n 'ms_BN',\n 'ms_MY',\n 'nl_BE',\n 'nl_NL',\n 'pl_PL',\n 'pt_BR',\n 'pt_PT',\n 'ro_RO',\n 'ru_EE',\n 'ru_LT',\n 'ru_LV',\n 'ru_RU',\n 'ru_UA',\n 'si_LK',\n 'sk_SK',\n 'sl_SI',\n 'sq_AL',\n 'sv_SE',\n 'tl_PH',\n 'th_TH',\n 'tr_TR',\n 'vi_VN',\n 'zh_C2',\n 'zh_CN',\n 'zh_HK',\n 'zh_TW',\n 'zh_AD',\n 'zh_AE',\n 'zh_AI',\n 'zh_AO',\n 'zh_AW',\n 'zh_BB',\n 'zh_BH',\n 'zh_BJ',\n 'zh_BM',\n 'zh_BS',\n 'zh_BZ',\n 'zh_CD',\n 'zh_CG',\n 'zh_CK',\n 'zh_CL',\n 'zh_CO',\n 'zh_CV',\n 'zh_DJ',\n 'zh_DM',\n 'zh_DO',\n 'zh_DZ',\n 'zh_EC',\n 'zh_EG',\n 'zh_ER',\n 'zh_ET',\n 'zh_FJ',\n 'zh_FK',\n 'zh_FO',\n 'zh_GA',\n 'zh_GD',\n 'zh_GE',\n 'zh_GI',\n 'zh_GL',\n 'zh_GM',\n 'zh_GN',\n 'zh_GT',\n 'zh_GW',\n 'zh_GY',\n 'zh_HN',\n 'zh_IE',\n 'zh_JM',\n 'zh_JO',\n 'zh_KE',\n 'zh_KG',\n 'zh_KI',\n 'zh_KM',\n 'zh_KN',\n 'zh_KW',\n 'zh_KY',\n 'zh_KZ',\n 'zh_LC',\n 'zh_LI',\n 'zh_LS',\n 'zh_LT',\n 'zh_LU',\n 'zh_MA',\n 'zh_MG',\n 'zh_MH',\n 'zh_ML',\n 'zh_MR',\n 'zh_MS',\n 'zh_MU',\n 'zh_MW',\n 'zh_MZ',\n 'zh_NA',\n 'zh_NC',\n 'zh_NE',\n 'zh_NF',\n 'zh_NI',\n 'zh_NR',\n 'zh_NU',\n 'zh_NZ',\n 'zh_OM',\n 'zh_PA',\n 'zh_PE',\n 'zh_PF',\n 'zh_PG',\n 'zh_PM',\n 'zh_PN',\n 'zh_PW',\n 'zh_QA',\n 'zh_RS',\n 'zh_RW',\n 'zh_SA',\n 'zh_SB',\n 'zh_SC',\n 'zh_SH',\n 'zh_SJ',\n 'zh_SL',\n 'zh_SM',\n 'zh_SN',\n 'zh_SO',\n 'zh_SR',\n 'zh_ST',\n 'zh_SV',\n 'zh_SZ',\n 'zh_TC',\n 'zh_TD',\n 'zh_TG',\n 'zh_TJ',\n 'zh_TM',\n 'zh_TN',\n 'zh_TT',\n 'zh_TV',\n 'zh_UA',\n 'zh_UG',\n 'zh_US',\n 'zh_UY',\n 'zh_VA',\n 'zh_VC',\n 'zh_VE',\n 'zh_VG',\n 'zh_VU',\n 'zh_WF',\n 'zh_YE',\n 'zh_ZA',\n 'zh_ZM',\n];\n","import { PAYPAL_SDK_SUPPORTED_LOCALES } from '../paypal-commerce-constants';\n\n/**\n * Transforms store language to PayPal SDK locale format.\n * PayPal SDK expects locale in format 'en_US' (underscore separator).\n * Returns undefined if the locale is not supported by PayPal SDK.\n * Examples: 'fr-CA' -> 'fr_CA', 'fr' -> 'fr_FR'\n */\nexport default function transformLocaleToPayPalFormat(\n storeLanguage: string | undefined,\n): string | undefined {\n if (!storeLanguage) {\n return undefined;\n }\n\n let locale: string;\n\n if (storeLanguage.includes('-')) {\n const [language, region] = storeLanguage.split('-');\n\n locale = `${language}_${region.toUpperCase()}`;\n } else {\n locale = `${storeLanguage}_${storeLanguage.toUpperCase()}`;\n }\n\n return PAYPAL_SDK_SUPPORTED_LOCALES.includes(locale) ? locale : undefined;\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n MissingDataError,\n MissingDataErrorType,\n PaymentMethod,\n PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n FundingType,\n PayPalFastlaneSdk,\n PayPalGooglePaySdk,\n PayPalHostWindow,\n PayPalInitializationData,\n PayPalMessagesSdk,\n PayPalSDK,\n PayPalSdkComponents,\n PayPalSdkConfig,\n} from './paypal-types';\nimport { transformLocaleToPayPalFormat } from './utils';\n\nexport default class PayPalSdkScriptLoader {\n private window: PayPalHostWindow;\n\n constructor(private scriptLoader: ScriptLoader) {\n this.window = window;\n }\n\n async getPayPalSDK(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n initializesOnCheckoutPage?: boolean,\n forceLoad?: boolean,\n ): Promise<PayPalSDK> {\n if (!this.window.paypal || forceLoad) {\n const paypalSdkScriptConfig = this.getPayPalSdkScriptConfigOrThrow(\n paymentMethod,\n currencyCode,\n storeLanguage,\n initializesOnCheckoutPage,\n );\n\n await this.loadPayPalSdk(paypalSdkScriptConfig);\n\n if (!this.window.paypal) {\n throw new PaymentMethodClientUnavailableError();\n }\n }\n\n return this.window.paypal;\n }\n\n async getPayPalFastlaneSdk(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n sessionId: string,\n storeLanguage: string | undefined,\n ): Promise<PayPalFastlaneSdk> {\n if (!this.window.paypalFastlaneSdk) {\n const config = this.getPayPalFastlaneSdkConfiguration(\n paymentMethod,\n currencyCode,\n sessionId,\n storeLanguage,\n );\n\n await this.loadPayPalSdk(config);\n\n if (!this.window.paypalFastlaneSdk) {\n throw new PaymentMethodClientUnavailableError();\n }\n }\n\n return this.window.paypalFastlaneSdk;\n }\n\n async getPayPalGooglePaySdk(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n initializesOnCheckoutPage?: boolean,\n forceLoad?: boolean,\n ): Promise<PayPalGooglePaySdk> {\n if (!this.window.paypalGooglePay || forceLoad) {\n const paypalSdkScriptConfig = this.getPayPalGooglePaySdkScriptConfigOrThrow(\n paymentMethod,\n currencyCode,\n storeLanguage,\n initializesOnCheckoutPage,\n );\n\n await this.loadPayPalSdk(paypalSdkScriptConfig);\n }\n\n if (!this.window.paypalGooglePay) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.window.paypalGooglePay;\n }\n\n async getPayPalApmsSdk(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n ) {\n if (!this.window.paypalApms) {\n const config = this.getPayPalApmSdkConfiguration(\n paymentMethod,\n currencyCode,\n storeLanguage,\n );\n\n await this.loadPayPalSdk(config);\n\n if (!this.window.paypalApms) {\n throw new PaymentMethodClientUnavailableError();\n }\n }\n\n return this.window.paypalApms;\n }\n\n async getPayPalMessages(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n ): Promise<PayPalMessagesSdk> {\n if (!this.window.paypalMessages) {\n const paypalSdkMessagesConfig = this.getPayPalSdkMessagesConfiguration(\n paymentMethod,\n currencyCode,\n storeLanguage,\n );\n\n await this.loadPayPalSdk(paypalSdkMessagesConfig);\n }\n\n if (!this.window.paypalMessages) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.window.paypalMessages;\n }\n\n /**\n *\n * loadPayPalSdk is a paypal sdk script loader\n * which loads paypal sdk based on provided configuration\n *\n */\n private async loadPayPalSdk({ options, attributes }: PayPalSdkConfig): Promise<void> {\n const scriptOptions = this.transformConfig<PayPalSdkConfig['options']>(options);\n const scriptAttributes = this.transformConfig<PayPalSdkConfig['attributes']>(attributes);\n\n const paypalSdkUrl = 'https://www.paypal.com/sdk/js';\n const scriptQuery = new URLSearchParams(scriptOptions).toString();\n const scriptSrc = `${paypalSdkUrl}?${scriptQuery}`;\n\n await this.scriptLoader.loadScript(scriptSrc, {\n async: true,\n attributes: scriptAttributes,\n });\n }\n\n /**\n *\n * Configurations section\n *\n */\n private getPayPalSdkScriptConfigOrThrow(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n initializesOnCheckoutPage = true,\n ): PayPalSdkConfig {\n const { id, clientToken, initializationData } = paymentMethod;\n\n if (!initializationData || !initializationData.clientId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const {\n intent,\n clientId,\n merchantId,\n buyerCountry,\n attributionId,\n isVenmoEnabled,\n isHostedCheckoutEnabled,\n isPayPalCreditAvailable,\n isDeveloperModeApplicable,\n availableAlternativePaymentMethods = [],\n enabledAlternativePaymentMethods = [],\n isGooglePayEnabled,\n } = initializationData;\n\n const commit = isHostedCheckoutEnabled || initializesOnCheckoutPage;\n\n const shouldEnableCard =\n id === 'paypalcommercecreditcards' || id === 'bigcommerce_payments_creditcards';\n const enableCardFunding = shouldEnableCard ? ['card'] : [];\n const disableCardFunding = !shouldEnableCard ? ['card'] : [];\n\n const enableCreditFunding = isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n const disableCreditFunding = !isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n\n const enableVenmoFunding = isVenmoEnabled ? ['venmo'] : [];\n const disableVenmoFunding = !isVenmoEnabled ? ['venmo'] : [];\n const disableAPMsFunding = availableAlternativePaymentMethods.filter(\n (apm: string) => !enabledAlternativePaymentMethods.includes(apm),\n );\n const googlePayComponent: PayPalSdkComponents = isGooglePayEnabled ? ['googlepay'] : [];\n const cardFieldsComponent: PayPalSdkComponents = initializesOnCheckoutPage\n ? ['card-fields']\n : [];\n const disableFunding: FundingType = [\n ...disableCardFunding,\n ...disableCreditFunding,\n ...disableVenmoFunding,\n ...disableAPMsFunding,\n ];\n const enableFunding: FundingType = [\n ...enableCardFunding,\n ...enableCreditFunding,\n ...enableVenmoFunding,\n ...enabledAlternativePaymentMethods,\n ];\n\n const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n return {\n options: {\n 'client-id': clientId,\n 'merchant-id': merchantId,\n 'enable-funding': enableFunding.length > 0 ? enableFunding : undefined,\n 'disable-funding': disableFunding.length > 0 ? disableFunding : undefined,\n commit,\n components: [\n 'buttons',\n 'hosted-fields',\n 'payment-fields',\n 'legal',\n ...googlePayComponent,\n ...cardFieldsComponent,\n ],\n currency: currencyCode,\n intent,\n ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n ...(locale && { locale }),\n },\n attributes: {\n 'data-partner-attribution-id': attributionId,\n 'data-client-token': clientToken,\n },\n };\n }\n\n private getPayPalFastlaneSdkConfiguration(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n sessionId: string,\n storeLanguage: string | undefined,\n ): PayPalSdkConfig {\n const { clientToken, initializationData } = paymentMethod;\n\n if (!initializationData || !initializationData.clientId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const { intent, clientId, merchantId, attributionId } = initializationData;\n\n const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n return {\n options: {\n 'client-id': clientId,\n 'merchant-id': merchantId,\n commit: true,\n components: [\n 'fastlane',\n 'buttons',\n 'payment-fields',\n 'hosted-fields',\n 'three-domain-secure',\n ],\n currency: currencyCode,\n ...(locale && { locale }),\n intent,\n },\n attributes: {\n 'data-client-metadata-id': sessionId.replace(/-/g, ''),\n 'data-namespace': 'paypalFastlaneSdk',\n 'data-partner-attribution-id': attributionId,\n 'data-sdk-client-token': clientToken,\n },\n };\n }\n\n private getPayPalGooglePaySdkScriptConfigOrThrow(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n initializesOnCheckoutPage = true,\n ): PayPalSdkConfig {\n const { clientToken, initializationData } = paymentMethod;\n\n if (!initializationData || !initializationData.clientId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const {\n intent,\n clientId,\n merchantId,\n buyerCountry,\n attributionId,\n isHostedCheckoutEnabled,\n isDeveloperModeApplicable,\n } = initializationData;\n\n const commit = isHostedCheckoutEnabled || initializesOnCheckoutPage;\n\n const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n return {\n options: {\n 'client-id': clientId,\n 'merchant-id': merchantId,\n commit,\n components: ['googlepay'],\n currency: currencyCode,\n intent,\n ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n ...(locale && { locale }),\n },\n attributes: {\n 'data-partner-attribution-id': attributionId,\n 'data-client-token': clientToken,\n 'data-namespace': 'paypalGooglePay',\n },\n };\n }\n\n private getPayPalApmSdkConfiguration(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n ): PayPalSdkConfig {\n const { initializationData } = paymentMethod;\n\n if (!initializationData || !initializationData.clientId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const {\n intent,\n clientId,\n merchantId,\n buyerCountry,\n attributionId,\n isDeveloperModeApplicable,\n availableAlternativePaymentMethods = [],\n enabledAlternativePaymentMethods = [],\n } = initializationData;\n\n const enableAPMsFunding = enabledAlternativePaymentMethods;\n const disableAPMsFunding = availableAlternativePaymentMethods.filter(\n (apm: string) => !enabledAlternativePaymentMethods.includes(apm),\n );\n\n const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n return {\n options: {\n 'client-id': clientId,\n 'merchant-id': merchantId,\n 'enable-funding': enableAPMsFunding.length > 0 ? enableAPMsFunding : undefined,\n 'disable-funding': disableAPMsFunding.length > 0 ? disableAPMsFunding : undefined,\n commit: true,\n components: ['buttons', 'payment-fields'],\n currency: currencyCode,\n intent,\n ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n ...(locale && { locale }),\n },\n attributes: {\n 'data-partner-attribution-id': attributionId,\n 'data-namespace': 'paypalApms',\n },\n };\n }\n\n private getPayPalSdkMessagesConfiguration(\n paymentMethod: PaymentMethod<PayPalInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n ): PayPalSdkConfig {\n const { initializationData } = paymentMethod;\n\n if (!initializationData || !initializationData.clientId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const { clientId, merchantId, attributionId, isDeveloperModeApplicable, buyerCountry } =\n initializationData;\n\n const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n return {\n options: {\n 'client-id': clientId,\n 'merchant-id': merchantId,\n components: ['messages'],\n currency: currencyCode,\n ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n ...(locale && { locale }),\n },\n attributes: {\n 'data-namespace': 'paypalMessages',\n 'data-partner-attribution-id': attributionId,\n },\n };\n }\n\n /**\n *\n * Utils methods\n *\n */\n private transformConfig<T extends Record<string, unknown>>(config: T): Record<string, string> {\n let transformedConfig = {};\n\n const keys = Object.keys(config) as Array<keyof T>;\n\n keys.forEach((key) => {\n const value = config[key];\n\n if (\n value === undefined ||\n value === null ||\n value === '' ||\n (Array.isArray(value) && value.length === 0)\n ) {\n return;\n }\n\n transformedConfig = {\n ...transformedConfig,\n [key]: Array.isArray(value) ? value.join(',') : value,\n };\n });\n\n return transformedConfig;\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport PayPalSdkScriptLoader from './paypal-sdk-script-loader';\n\nexport default function createPayPalSdkScriptLoader(): PayPalSdkScriptLoader {\n return new PayPalSdkScriptLoader(getScriptLoader());\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when a shopper tries to sign in as a guest but\n * they are already signed in as a registered customer.\n */\nexport default class BuyNowCartCreationError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'An unexpected error has occurred during buy now cart creation process. Please try again later.',\n );\n\n this.name = 'BuyNowCartCreationError';\n this.type = 'buy_now_cart_creation_error';\n }\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport StandardError from './standard-error';\n\nconst DEFAULT_RESPONSE = {\n body: {},\n headers: {},\n status: 0,\n};\n\n/**\n * Throw this error if we are unable to make a request to the server. It wraps\n * any server response into a JS error object.\n */\nexport default class RequestError<TBody = any> extends StandardError {\n body: TBody | object;\n headers: { [key: string]: any };\n errors: Array<{ code: string; message?: string }>;\n status: number;\n\n constructor(\n response?: Response<TBody | object>,\n {\n message,\n errors,\n }: {\n message?: string;\n errors?: Array<{ code: string; message?: string }>;\n } = {},\n ) {\n const { body, headers, status } = response || DEFAULT_RESPONSE;\n\n super(message || 'An unexpected error has occurred.');\n\n this.name = 'RequestError';\n this.type = 'request';\n this.body = body;\n this.headers = headers;\n this.status = status;\n this.errors = errors || [];\n }\n}\n","export enum CartSource {\n BuyNow = 'BUY_NOW',\n INVOICE = 'B2B_INVOICE',\n}\n","import {\n BuyNowCartRequestBody,\n CardInstrument,\n CustomerAddress,\n HostedInstrument,\n ShippingOption,\n VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n *\n * PayPal Funding sources\n *\n */\nexport type FundingType = string[];\nexport type EnableFundingType = FundingType | string;\n\nexport interface PayPalCommerceSDKFunding {\n CARD: string;\n PAYPAL: string;\n CREDIT: string;\n PAYLATER: string;\n OXXO: string;\n SEPA: string;\n VENMO: string;\n}\n\n/**\n *\n * PayPal BuyNow\n *\n */\nexport interface PayPalBuyNowInitializeOptions {\n getBuyNowCartRequestBody(): BuyNowCartRequestBody;\n}\n\n/**\n *\n * PayPal Initialization Data\n *\n */\nexport interface PayPalInitializationData {\n attributionId?: string;\n availableAlternativePaymentMethods: FundingType;\n buttonStyle?: PayPalButtonStyleOptions;\n buyerCountry?: string;\n clientId: string;\n clientToken?: string;\n fastlaneStyles?: FastlaneStylesSettings;\n connectClientToken?: string; // TODO: remove when PPCP Fastlane A/B test will be finished\n enabledAlternativePaymentMethods: FundingType;\n isDeveloperModeApplicable?: boolean;\n intent?: PayPalIntent;\n isAcceleratedCheckoutEnabled?: boolean; // PayPal Fastlane related\n isFastlaneShippingOptionAutoSelectEnabled?: boolean; // PayPal Fastlane related\n isFastlaneStylingEnabled?: boolean;\n isHostedCheckoutEnabled?: boolean;\n isPayPalAnalyticsV2Enabled?: boolean; // PayPal Fastlane related\n isPayPalCreditAvailable?: boolean;\n isPayPalCommerceAnalyticsV2Enabled?: boolean; // PayPal Fastlane related\n isVenmoEnabled?: boolean;\n isGooglePayEnabled?: boolean;\n merchantId?: string;\n orderId?: string;\n shouldRenderFields?: boolean;\n shouldRunAcceleratedCheckout?: boolean; // TODO: remove when PPCP Fastlane A/B test will be finished\n paymentButtonStyles?: Record<string, PayPalButtonStyleOptions>;\n paypalBNPLConfiguration?: PayPalBNPLConfigurationItem[];\n threeDSVerificationMethod?: string;\n isServerSideShippingCallbacksEnabled?: boolean;\n}\n\n/**\n *\n * PayPalHostWindow contains different\n * PayPal Sdk instances for different purposes\n *\n */\nexport interface PayPalHostWindow extends Window {\n paypal?: PayPalSDK;\n paypalFastlane?: PayPalFastlane;\n paypalFastlaneSdk?: PayPalFastlaneSdk;\n paypalMessages?: PayPalMessagesSdk;\n paypalApms?: PayPalApmSdk;\n paypalGooglePay?: PayPalGooglePaySdk;\n}\n\n/**\n *\n * PayPal SDK config\n *\n */\nexport interface PayPalSdkConfig {\n options: {\n 'client-id'?: string;\n 'merchant-id'?: string;\n 'buyer-country'?: string;\n 'enable-funding'?: EnableFundingType;\n 'disable-funding'?: FundingType;\n currency?: string;\n commit?: boolean;\n intent?: PayPalIntent;\n components?: PayPalSdkComponents;\n locale?: string;\n };\n attributes: {\n 'data-client-metadata-id'?: string;\n 'data-partner-attribution-id'?: string;\n 'data-sdk-client-token'?: string;\n 'data-namespace'?: string;\n 'data-client-token'?: string;\n };\n}\n\nexport enum PayPalIntent {\n AUTHORIZE = 'authorize',\n CAPTURE = 'capture',\n}\n\nexport type PayPalSdkComponents = Array<\n | 'fastlane'\n | 'three-domain-secure'\n | 'buttons'\n | 'funding-eligibility'\n | 'hosted-fields'\n | 'messages'\n | 'payment-fields'\n | 'legal'\n | 'googlepay'\n | 'connect'\n | 'card-fields'\n>;\n\nexport type PayPalLegal = (params: { fundingSource: string }) => {\n render(container: string): void;\n};\n\nexport interface LegalFunding {\n FUNDING: {\n PAY_UPON_INVOICE: string;\n };\n}\n\nexport interface BirthDate {\n getFullYear(): number;\n getDate(): number;\n getMonth(): number;\n}\n\n/**\n *\n * PayPal Sdk instances\n *\n */\nexport interface PayPalSDK {\n CardFields: (data: PaypalCardFieldsConfig) => Promise<PayPalCardFields>;\n Googlepay: () => {\n config: () => Promise<GooglePayConfig>;\n confirmOrder: (arg0: {\n orderId: string;\n paymentMethodData: ConfirmOrderData;\n }) => Promise<{ status: string }>;\n initiatePayerAction: () => void;\n };\n FUNDING: PayPalCommerceSDKFunding;\n HostedFields: {\n isEligible(): boolean;\n render(data: PayPalHostedFieldsRenderOptions): Promise<PayPalHostedFields>;\n };\n Legal: PayPalLegal & LegalFunding;\n Buttons(options: PayPalButtonsOptions): PayPalButtons;\n PaymentFields(options: PayPalPaymentFieldsOptions): PayPalPaymentFields;\n Messages(options: PayPalMessagesOptions): PayPalMessages;\n}\n\nexport interface PaypalCardFieldsConfig {\n inputEvents: {\n onChange(data: PayPalCardFieldsState): void;\n onFocus(data: PayPalCardFieldsState): void;\n onBlur(data: PayPalCardFieldsState): void;\n onInputSubmitRequest(data: PayPalCardFieldsState): void;\n };\n createVaultSetupToken?: (data: PayPalCardFieldsState) => void;\n createOrder?: () => Promise<string>;\n style: PayPalHostedFieldsRenderOptions['styles'];\n onApprove(data: PayPalCardFieldsOnApproveData): void;\n onError(): void;\n}\n\ninterface PayPalFieldsInitializationData {\n placeholder?: string;\n}\n\nexport interface PayPalCardFields {\n isEligible(): boolean;\n CVVField(config?: PayPalFieldsInitializationData): PayPalFields;\n ExpiryField(config?: PayPalFieldsInitializationData): PayPalFields;\n NameField(config?: PayPalFieldsInitializationData): PayPalFields;\n NumberField(config?: PayPalFieldsInitializationData): PayPalFields;\n submit(config?: PayPalCardFieldsSubmitConfig): Promise<void>;\n getState(): Promise<PayPalCardFieldsState>;\n}\n\nexport interface PayPalCardFieldsSubmitConfig {\n billingAddress: {\n company?: string;\n addressLine1: string;\n addressLine2?: string;\n adminArea1: string; // State\n adminArea2: string; // City\n postalCode: string;\n countryCode?: string;\n };\n}\n\nexport interface PayPalCardFieldsOnApproveData {\n vaultSetupToken?: string;\n orderID: string;\n liabilityShift?: LiabilityShiftEnum;\n}\n\ninterface PayPalCardFieldsFieldData {\n isFocused: boolean;\n isEmpty: boolean;\n isValid: boolean;\n isPotentiallyValid: boolean;\n}\n\ntype PayPalCardFieldsCard = PayPalHostedFieldsCard;\n\nexport interface PayPalCardFieldsState {\n cards: PayPalCardFieldsCard[];\n emittedBy: string;\n isFormValid: boolean;\n errors: string[];\n fields: {\n cardCvvField: PayPalCardFieldsFieldData;\n cardNumberField: PayPalCardFieldsFieldData;\n cardNameField?: PayPalCardFieldsFieldData;\n cardExpiryField: PayPalCardFieldsFieldData;\n };\n}\n\nexport interface PayPalFields {\n render(container: HTMLElement | string): Promise<void>;\n clear(): void;\n removeClass(className: string): Promise<void>;\n close(): Promise<void>;\n}\n\nexport interface PayPalFastlaneSdk {\n ThreeDomainSecureClient: {\n isEligible(params: threeDSecureParameters): Promise<boolean>;\n show(): Promise<ThreeDomainSecureClientShowResponse>;\n };\n Fastlane(options?: PayPalFastlaneOptions): Promise<PayPalFastlane>;\n}\n\ninterface ThreeDomainSecureClientShowResponse {\n liabilityShift: LiabilityShiftEnum;\n authenticationState: TDSecureAuthenticationState;\n nonce: string; // Enriched nonce or the original nonce\n}\n\nexport enum TDSecureVerificationMethod {\n Always = 'SCA_ALWAYS',\n}\n\nexport enum TDSecureAuthenticationState {\n Succeeded = 'succeeded',\n Cancelled = 'cancelled',\n Errored = 'errored',\n}\n\nexport enum LiabilityShiftEnum {\n Possible = 'POSSIBLE',\n No = 'NO',\n Unknown = 'UNKNOWN',\n Yes = 'YES',\n}\n\nexport interface threeDSecureParameters {\n amount: string;\n currency: string;\n nonce: string;\n threeDSRequested: boolean;\n transactionContext: {\n experience_context: {\n brand_name?: string;\n locale: string;\n return_url: string;\n cancel_url: string;\n };\n };\n}\n\nexport interface PayPalMessagesSdk {\n Messages(options: MessagingOptions): MessagingRender;\n}\n\nexport interface PayPalApmSdk {\n Buttons(options: PayPalButtonsOptions): PayPalButtons;\n PaymentFields(options: PayPalPaymentFieldsOptions): PayPalPaymentFields;\n}\n\nexport interface PayPalGooglePaySdk {\n Googlepay(): GooglePay;\n}\n\n/**\n *\n * PayPal Payments Hosted Fields\n *\n */\nexport interface PayPalHostedFieldsRenderOptions {\n fields?: {\n number?: PayPalHostedFieldOption;\n cvv?: PayPalHostedFieldOption;\n expirationDate?: PayPalHostedFieldOption;\n };\n paymentsSDK?: boolean;\n styles?: {\n input?: { [key: string]: string };\n '.invalid'?: { [key: string]: string };\n '.valid'?: { [key: string]: string };\n ':focus'?: { [key: string]: string };\n };\n createOrder(): Promise<string>;\n}\n\nexport interface PayPalHostedFieldOption {\n selector: string;\n placeholder?: string;\n}\n\nexport interface PayPalHostedFields {\n submit(options?: PayPalHostedFieldsSubmitOptions): Promise<PayPalHostedFieldsApprove>;\n getState(): PayPalHostedFieldsState;\n on(eventName: string, callback: (event: PayPalHostedFieldsState) => void): void;\n}\n\nexport interface PayPalHostedFieldsSubmitOptions {\n contingencies?: Array<'3D_SECURE'>;\n cardholderName?: string;\n}\n\nexport interface PayPalHostedFieldsApprove {\n orderId: string;\n liabilityShift?: 'POSSIBLE' | 'NO' | 'UNKNOWN';\n}\n\nexport interface PayPalHostedFieldsState {\n cards: PayPalHostedFieldsCard[];\n emittedBy: string;\n fields: {\n number?: PayPalHostedFieldsFieldData;\n expirationDate?: PayPalHostedFieldsFieldData;\n expirationMonth?: PayPalHostedFieldsFieldData;\n expirationYear?: PayPalHostedFieldsFieldData;\n cvv?: PayPalHostedFieldsFieldData;\n postalCode?: PayPalHostedFieldsFieldData;\n };\n}\n\nexport interface PayPalHostedFieldsCard {\n type: string;\n niceType: string;\n code: {\n name: string;\n size: number;\n };\n}\n\nexport interface PayPalHostedFieldsFieldData {\n container: HTMLElement;\n isFocused: boolean;\n isEmpty: boolean;\n isPotentiallyValid: boolean;\n isValid: boolean;\n}\n\n/**\n *\n * PayPal Buttons\n *\n */\nexport interface PayPalButtons {\n render(id: string): void;\n close(): void;\n isEligible(): boolean;\n hasReturned?(): boolean;\n resume?(): void;\n}\n\nexport interface PayPalButtonsOptions {\n experience?: string;\n style?: PayPalButtonStyleOptions;\n fundingSource: string;\n createOrder(): Promise<string>;\n onApprove(\n data: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n ): Promise<boolean | void> | void;\n onInit?(data: InitCallbackPayload, actions: InitCallbackActions): Promise<void>;\n onComplete?(data: CompleteCallbackDataPayload): Promise<void>;\n onClick?(data: ClickCallbackPayload, actions: ClickCallbackActions): Promise<void> | void;\n onError?(error: Error): void;\n onCancel?(): void;\n onShippingAddressChange?(data: ShippingAddressChangeCallbackPayload): Promise<void>;\n onShippingOptionsChange?(data: ShippingOptionChangeCallbackPayload): Promise<void>;\n}\n\nexport interface ShippingOptionChangeCallbackPayload {\n orderId: string;\n selectedShippingOption: PayPalSelectedShippingOption;\n}\n\nexport interface ShippingAddressChangeCallbackPayload {\n orderId: string;\n shippingAddress: PayPalAddress;\n}\n\nexport interface ClickCallbackPayload {\n fundingSource: string;\n}\n\nexport interface ClickCallbackActions {\n reject(): void;\n resolve(): void;\n}\n\nexport interface InitCallbackPayload {\n correlationID: string;\n}\n\nexport interface InitCallbackActions {\n disable(): void;\n enable(): void;\n}\n\nexport interface PayPalAddress {\n city: string;\n countryCode: string;\n postalCode: string;\n state: string;\n}\n\nexport interface PaypalAddressCallbackData {\n city: string;\n country_code: string;\n postal_code: string;\n state: string;\n}\n\nexport interface PayPalSelectedShippingOption {\n amount: {\n currency_code: string;\n value: string;\n };\n id: string;\n label: string;\n selected: boolean;\n type: string;\n}\n\nexport interface ApproveCallbackPayload {\n orderID?: string;\n}\n\nexport interface ApproveCallbackActions {\n order: {\n get: () => Promise<PayPalOrderDetails>;\n };\n}\n\nexport interface PayPalOrderDetails {\n payer: {\n name: {\n given_name: string;\n surname: string;\n };\n email_address: string;\n address: PayPalOrderAddress;\n phone?: {\n phone_number: {\n national_number: string;\n };\n };\n };\n purchase_units: Array<{\n shipping: {\n address: PayPalOrderAddress;\n name: {\n full_name: string;\n };\n };\n }>;\n}\n\nexport interface PayPalOrderAddress {\n address_line_1: string;\n address_line_2: string;\n admin_area_2: string;\n admin_area_1?: string;\n postal_code: string;\n country_code: string;\n}\n\nexport interface CompleteCallbackDataPayload {\n intent: string;\n orderID: string;\n}\n\nexport enum StyleButtonLabel {\n paypal = 'paypal',\n checkout = 'checkout',\n buynow = 'buynow',\n pay = 'pay',\n installment = 'installment',\n}\n\nexport enum StyleButtonColor {\n gold = 'gold',\n blue = 'blue',\n silver = 'silver',\n black = 'black',\n white = 'white',\n}\n\nexport enum StyleButtonShape {\n pill = 'pill',\n rect = 'rect',\n}\n\nexport interface PayPalButtonStyleOptions {\n color?: StyleButtonColor;\n shape?: StyleButtonShape;\n height?: number;\n label?: StyleButtonLabel;\n}\n\nexport interface PayPalButtonOptions {\n fundingSource: string;\n style?: PayPalButtonStyleOptions;\n isServerSideShippingCallbacksEnabled?: boolean;\n isHostedCheckoutEnabled?: boolean;\n onClick?: () => void;\n onCancel?: () => void;\n onPaymentComplete?: () => void;\n onError?(error?: Error | unknown): void;\n}\n\n/**\n *\n * PayPal Messages\n */\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalMessages {\n render(id: string): void;\n}\n\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalMessagesOptions {\n amount: number;\n placement: string;\n style?: PayPalMessagesStyleOptions;\n fundingSource?: string;\n}\n\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalMessagesStyleOptions {\n layout?: string;\n}\n\n/**\n *\n * Google Pay related types\n *\n */\n\ninterface GooglePay {\n config: () => Promise<GooglePayConfig>;\n confirmOrder: (confirmOrderConfig: ConfirmOrderConfig) => Promise<{ status: string }>;\n initiatePayerAction: (payerActionConfig: PayerActionConfig) => Promise<void>;\n}\n\ninterface ConfirmOrderConfig {\n orderId: string;\n paymentMethodData: ConfirmOrderData;\n}\n\nexport interface ConfirmOrderData {\n tokenizationData: {\n type: string;\n token: string;\n };\n info: {\n cardNetwork: string;\n cardDetails: string;\n };\n type: string;\n}\n\ninterface PayerActionConfig {\n orderId: string;\n}\n\nexport interface GooglePayConfig {\n allowedPaymentMethods: AllowedPaymentMethods[];\n apiVersion: number;\n apiVersionMinor: number;\n countryCode: string;\n isEligible: boolean;\n merchantInfo: {\n merchantId: string;\n merchantOrigin: string;\n };\n}\n\nexport interface AllowedPaymentMethods {\n type: string;\n parameters: {\n allowedAuthMethods: string[];\n allowedCardNetworks: string[];\n billingAddressRequired: boolean;\n assuranceDetailsRequired: boolean;\n billingAddressParameters: {\n format: string;\n };\n };\n tokenizationSpecification: {\n type: string;\n parameters: {\n gateway: string;\n gatewayMerchantId: string;\n };\n };\n}\n\n/**\n *\n * PayPal Payment fields\n *\n */\nexport interface PayPalPaymentFields {\n render(id: string): void;\n}\n\nexport interface PayPalPaymentFieldsOptions {\n style?: PayPalFieldsStyleOptions;\n fundingSource: string;\n fields: {\n name?: {\n value?: string;\n };\n email?: {\n value?: string;\n };\n };\n}\n\nexport interface PayPalFieldsStyleOptions {\n variables?: {\n fontFamily?: string;\n fontSizeBase?: string;\n fontSizeSm?: string;\n fontSizeM?: string;\n fontSizeLg?: string;\n textColor?: string;\n colorTextPlaceholder?: string;\n colorBackground?: string;\n colorInfo?: string;\n colorDanger?: string;\n borderRadius?: string;\n borderColor?: string;\n borderWidth?: string;\n borderFocusColor?: string;\n spacingUnit?: string;\n };\n rules?: {\n [key: string]: any;\n };\n}\n\n/**\n *\n * PayLater Messages related types\n * doc: https://developer.paypal.com/docs/checkout/pay-later/us/integrate/reference\n */\nexport interface MessagingRender {\n render(container: string): void;\n}\n\nexport interface MessagesStyleOptions {\n color?: string; // 'blue' | 'black' | 'white' | 'white-no-border' | 'gray' | 'monochrome' | 'grayscale'\n layout?: string; // 'text' | 'flex'\n logo?: {\n type?: string; // 'primary' | 'alternative' | 'inline' | 'none'\n position?: string; // 'left' | 'right' | 'top'\n };\n ratio?: string; // '1x1' | '1x4' | '8x1' | '20x1'\n text?: {\n align?: string; // 'left' | 'right' | 'center'\n color?: string; // 'black' | 'white' | 'monochrome' | 'grayscale'\n size?: number; // from 10 to 16\n };\n}\n\nexport interface MessagingOptions {\n amount: number;\n placement: string;\n style?: MessagesStyleOptions;\n}\n\nexport interface PayPalBNPLConfigurationItem {\n id: string;\n name: string;\n status: boolean;\n styles: Record<string, string>;\n}\n\n/**\n *\n * PayPal Fastlane related types\n *\n */\nexport interface PayPalFastlane {\n identity: PayPalFastlaneIdentity;\n events: PayPalFastlaneEvents;\n profile: PayPalFastlaneProfile;\n FastlaneCardComponent(\n options: PayPalFastlaneCardComponentOptions,\n ): Promise<PayPalFastlaneCardComponentMethods>;\n}\n\nexport interface PayPalFastlaneOptions {\n styles?: PayPalFastlaneStylesOption;\n}\n\nexport interface PayPalFastlaneIdentity {\n lookupCustomerByEmail(email: string): Promise<PayPalFastlaneLookupCustomerByEmailResult>;\n triggerAuthenticationFlow(\n customerContextId: string,\n ): Promise<PayPalFastlaneAuthenticationResult>;\n}\n\nexport interface PayPalFastlaneLookupCustomerByEmailResult {\n customerContextId?: string;\n}\n\nexport interface PayPalFastlaneAuthenticationResult {\n authenticationState?: PayPalFastlaneAuthenticationState;\n profileData?: PayPalFastlaneProfileData;\n}\n\nexport enum PayPalFastlaneAuthenticationState {\n SUCCEEDED = 'succeeded',\n FAILED = 'failed',\n CANCELED = 'canceled',\n UNRECOGNIZED = 'unrecognized',\n}\n\nexport interface PayPalFastlaneProfileData {\n name: PayPalFastlaneProfileName;\n shippingAddress: PayPalFastlaneShippingAddress;\n card: PayPalFastlaneProfileCard;\n}\n\nexport interface PayPalFastlaneProfileName {\n fullName: string;\n firstName?: string;\n lastName?: string;\n}\n\nexport interface PayPalFastlaneProfilePhone {\n countryCode: string;\n nationalNumber: string;\n}\n\nexport interface PayPalFastlaneShippingAddress {\n name: PayPalFastlaneProfileName;\n phoneNumber: PayPalFastlaneProfilePhone;\n address: PayPalFastlaneAddress;\n}\n\nexport interface PayPalFastlaneProfileCard {\n id: string; // nonce / token\n paymentSource: PayPalFastlanePaymentSource;\n}\n\nexport interface PayPalFastlanePaymentSource {\n card: PayPalFastlaneCardSource;\n}\n\nexport interface PayPalFastlaneCardSource {\n brand: string;\n expiry: string; // \"YYYY-MM\"\n lastDigits: string; // \"1111\"\n name: string;\n billingAddress: PayPalFastlaneAddress;\n}\n\nexport interface PayPalFastlaneAddress {\n company?: string;\n addressLine1: string;\n addressLine2?: string;\n adminArea1: string; // State\n adminArea2: string; // City\n postalCode: string;\n countryCode?: string;\n}\n\nexport interface PayPalFastlaneProfileToBcCustomerDataMappingResult {\n authenticationState: PayPalFastlaneAuthenticationState;\n addresses: CustomerAddress[];\n billingAddress?: CustomerAddress;\n shippingAddress?: CustomerAddress;\n instruments: CardInstrument[];\n}\n\nexport interface PayPalFastlaneStylesOption {\n root?: {\n backgroundColorPrimary?: string;\n errorColor?: string;\n fontFamily?: string;\n fontSizeBase?: string;\n padding?: string;\n primaryColor?: string;\n };\n input?: {\n borderRadius?: string;\n borderColor?: string;\n focusBorderColor?: string;\n backgroundColor?: string;\n borderWidth?: string;\n textColorBase?: string;\n };\n toggle?: {\n colorPrimary?: string;\n colorSecondary?: string;\n };\n text?: {\n body?: {\n color?: string;\n fontSize?: string;\n };\n caption?: {\n color?: string;\n fontSize?: string;\n };\n };\n branding?: string; // 'light' | 'dark'\n}\n\nexport interface PayPalFastlaneProfile {\n showCardSelector(): Promise<PayPalFastlaneCardSelectorResponse>;\n showShippingAddressSelector(): Promise<PayPalFastlaneShippingAddressSelectorResponse>;\n}\n\nexport interface PayPalFastlaneShippingAddressSelectorResponse {\n selectionChanged: boolean;\n selectedAddress: PayPalFastlaneShippingAddress;\n}\n\nexport interface PayPalFastlaneCardSelectorResponse {\n selectionChanged: boolean;\n selectedCard: PayPalFastlaneProfileCard;\n}\n\nexport interface PayPalFastlaneCardComponentMethods {\n getPaymentToken(\n options: PayPalFastlaneGetPaymentTokenOptions,\n ): Promise<PayPalFastlaneProfileCard>;\n render(element: string): void;\n}\n\nexport interface PayPalFastlaneGetPaymentTokenOptions {\n name?: PayPalFastlaneProfileName;\n billingAddress?: PayPalFastlaneAddress;\n}\n\nexport interface PayPalFastlaneCardComponentOptions {\n fields?: PayPalFastlaneCardComponentFields;\n}\n\nexport interface PayPalFastlaneCardComponentFields {\n cardholderName?: {\n enabled?: boolean;\n prefill?: string;\n };\n phoneNumber?: {\n placeholder?: string;\n prefill?: string;\n };\n}\n\nexport interface PayPalFastlaneEvents {\n apmSelected: (options: PayPalFastlaneApmSelectedEventOptions) => void;\n emailSubmitted: (options: PayPalFastlaneEmailEnteredEventOptions) => void;\n orderPlaced: (options: PayPalFastlaneOrderPlacedEventOptions) => void;\n}\n\nexport interface PayPalFastlaneEventCommonOptions {\n context_type: 'cs_id';\n context_id: string; // checkout session id\n page_type: 'checkout_page';\n page_name: string; // title of the checkout initiation page\n partner_name: 'bigc';\n user_type: 'store_member' | 'store_guest'; // type of the user on the merchant site\n store_id: string;\n merchant_name: string;\n experiment: string; // stringify JSON object \"[{ treatment_group: 'test' | 'control' }]\"\n}\n\nexport interface PayPalFastlaneApmSelectedEventOptions extends PayPalFastlaneEventCommonOptions {\n apm_shown: '0' | '1'; // alternate payment shown on the checkout page\n apm_list: string; // list of alternate payment shown on checkout page\n apm_selected: string; // alternate payment method selected / methodId\n apm_location: 'pre-email section' | 'payment section'; // placement of APM, whether it be above the email entry or in the radio buttons\n}\n\nexport interface PayPalFastlaneEmailEnteredEventOptions extends PayPalFastlaneEventCommonOptions {\n user_email_saved: boolean; // shows whether checkout was loaded with or without a saved email\n apm_shown: '0' | '1'; // alternate payment shown on the checkout page\n apm_list: string; // list of alternate payment shown on checkout page 'applepay,googlepay,paypal'\n}\n\nexport interface PayPalFastlaneOrderPlacedEventOptions extends PayPalFastlaneEventCommonOptions {\n selected_payment_method: string;\n currency_code: string;\n}\n\nexport interface PayPalFastlanePaymentFormattedPayload {\n paypal_connect_token?: {\n order_id?: string;\n token: string;\n };\n paypal_fastlane_token?: {\n order_id?: string;\n token: string;\n };\n}\n\nexport interface FastlaneStylesSettings {\n fastlaneRootSettingsBackgroundColor?: string;\n fastlaneRootSettingsErrorColor?: string;\n fastlaneRootSettingsFontFamily?: string;\n fastlaneRootSettingsPadding?: string;\n fastlaneRootSettingsPrimaryColor?: string;\n fastlaneRootSettingsFontSize?: string;\n fastlaneInputSettingsBackgroundColor?: string;\n fastlaneInputSettingsBorderRadius?: string;\n fastlaneInputSettingsBorderWidth?: string;\n fastlaneInputSettingsTextColorBase?: string;\n fastlaneInputSettingsBorderColor?: string;\n fastlaneInputSettingsFocusBorderBase?: string;\n fastlaneToggleSettingsColorPrimary?: string;\n fastlaneToggleSettingsColorSecondary?: string;\n fastlaneTextBodySettingsColor?: string;\n fastlaneTextBodySettingsFontSize?: string;\n fastlaneTextCaptionSettingsFontSize?: string;\n fastlaneTextCaptionSettingsColor?: string;\n fastlaneBrandingSettings?: string;\n}\n\n/**\n *\n * Other\n *\n */\nexport enum NonInstantAlternativePaymentMethods {\n OXXO = 'oxxo',\n}\n\nexport interface PayPalOrderData {\n orderId: string;\n setupToken?: string;\n approveUrl: string;\n}\n\nexport interface PayPalUpdateOrderRequestBody {\n availableShippingOptions?: ShippingOption[];\n cartId: string;\n selectedShippingOption?: ShippingOption | null;\n methodId?: string;\n orderId?: number;\n}\n\nexport interface PayPalUpdateOrderResponse {\n statusCode: number;\n}\n\nexport interface PayPalCreateOrderRequestBody extends HostedInstrument, VaultedInstrument {\n cartId: string;\n metadataId?: string;\n setupToken?: boolean;\n fastlaneToken?: string;\n}\n\nexport enum PayPalOrderStatus {\n Approved = 'APPROVED',\n Created = 'CREATED',\n PayerActionRequired = 'PAYER_ACTION_REQUIRED',\n PollingStop = 'POLLING_STOP',\n PollingError = 'POLLING_ERROR',\n}\n\nexport interface PayPalOrderStatusData {\n status: PayPalOrderStatus;\n}\n\nexport interface PayPalCreateOrderCardFieldsResponse {\n orderId: string;\n setupToken?: string;\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { isNil, omitBy } from 'lodash';\n\nimport {\n BillingAddressRequestBody,\n BuyNowCartCreationError,\n Cart,\n CartSource,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethodClientUnavailableError,\n RequestError,\n RequestOptions,\n ShippingOption,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalRequestSender from './paypal-request-sender';\nimport PayPalSdkScriptLoader from './paypal-sdk-script-loader';\nimport {\n PayPalButtonStyleOptions,\n PayPalBuyNowInitializeOptions,\n PayPalCreateOrderCardFieldsResponse,\n PayPalCreateOrderRequestBody,\n PayPalInitializationData,\n PayPalOrderDetails,\n PayPalOrderStatus,\n PayPalSDK,\n StyleButtonColor,\n StyleButtonLabel,\n StyleButtonShape,\n} from './paypal-types';\n\nexport default class PayPalIntegrationService {\n private paypalSdk?: PayPalSDK;\n\n constructor(\n private formPoster: FormPoster,\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalRequestSender: PayPalRequestSender,\n private paypalSdkLoader: PayPalSdkScriptLoader,\n ) {}\n\n /**\n *\n * PayPalSDK methods\n *\n */\n async loadPayPalSdk(\n methodId: string,\n providedCurrencyCode?: string,\n initializesOnCheckoutPage?: boolean,\n forceLoad?: boolean,\n ): Promise<PayPalSDK | undefined> {\n const state = this.paymentIntegrationService.getState();\n const currencyCode = providedCurrencyCode || state.getCartOrThrow().currency.code;\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const storeLanguage = state.getLocale();\n\n this.paypalSdk = await this.paypalSdkLoader.getPayPalSDK(\n paymentMethod,\n currencyCode,\n storeLanguage,\n initializesOnCheckoutPage,\n forceLoad,\n );\n\n return this.paypalSdk;\n }\n\n getPayPalSdkOrThrow(): PayPalSDK {\n if (!this.paypalSdk) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.paypalSdk;\n }\n\n /**\n *\n * Buy Now cart creation methods\n *\n */\n async createBuyNowCartOrThrow(\n buyNowInitializeOptions: PayPalBuyNowInitializeOptions,\n ): Promise<Cart> {\n const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n return await this.paymentIntegrationService.createBuyNowCart(cartRequestBody);\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n\n /**\n *\n * Order methods\n *\n */\n async createOrder(\n providerId: string,\n requestBody?: Partial<PayPalCreateOrderRequestBody>,\n ): Promise<string> {\n const cartId = this.paymentIntegrationService.getState().getCartOrThrow().id;\n\n const { orderId } = await this.paypalRequestSender.createOrder(providerId, {\n cartId,\n ...requestBody,\n });\n\n return orderId;\n }\n\n async createOrderCardFields(\n providerId: string,\n requestBody?: Partial<PayPalCreateOrderRequestBody>,\n ): Promise<PayPalCreateOrderCardFieldsResponse> {\n const cartId = this.paymentIntegrationService.getState().getCartOrThrow().id;\n\n const { orderId, setupToken } = await this.paypalRequestSender.createOrder(providerId, {\n cartId,\n ...requestBody,\n });\n\n return { orderId, ...(setupToken ? { setupToken } : {}) };\n }\n\n async updateOrder(\n providerId: string,\n methodId?: string,\n orderId?: number,\n isServerSideShippingCallbacksEnabled?: boolean,\n ): Promise<void> {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n let consignment;\n\n if (!isServerSideShippingCallbacksEnabled) {\n consignment = state.getConsignmentsOrThrow()[0];\n }\n\n try {\n await this.paypalRequestSender.updateOrder(providerId, {\n availableShippingOptions: isServerSideShippingCallbacksEnabled\n ? []\n : consignment?.availableShippingOptions,\n cartId: cart.id,\n selectedShippingOption: isServerSideShippingCallbacksEnabled\n ? null\n : consignment?.selectedShippingOption,\n ...(methodId ? { methodId } : {}),\n ...(orderId ? { orderId } : {}),\n });\n } catch (_error) {\n throw new RequestError();\n }\n }\n\n async getOrderStatus(methodId: string, options?: RequestOptions): Promise<PayPalOrderStatus> {\n try {\n const { status } = await this.paypalRequestSender.getOrderStatus(methodId, options);\n\n return status;\n } catch (_error) {\n throw new RequestError();\n }\n }\n\n /**\n *\n * Payment submitting and tokenizing methods\n *\n */\n tokenizePayment(methodId: string, orderId?: string): void {\n const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n\n if (!orderId) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n return this.formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n action: 'set_external_checkout',\n provider: methodId,\n order_id: orderId,\n ...(cart.source === CartSource.BuyNow && { cart_id: cart.id }),\n });\n }\n\n async submitPayment(methodId: string, orderId: string, gatewayId?: string): Promise<void> {\n const paymentData = {\n formattedPayload: {\n vault_payment_instrument: null,\n set_as_default_stored_instrument: null,\n device_info: null,\n method_id: methodId,\n paypal_account: {\n order_id: orderId,\n },\n },\n };\n\n await this.paymentIntegrationService.submitPayment({\n methodId,\n paymentData,\n ...(gatewayId ? { gatewayId } : {}),\n });\n }\n\n /**\n *\n * Shipping options methods\n *\n */\n getShippingOptionOrThrow(selectedShippingOptionId?: string): ShippingOption {\n const state = this.paymentIntegrationService.getState();\n const consignment = state.getConsignmentsOrThrow()[0];\n\n const availableShippingOptions = consignment.availableShippingOptions || [];\n\n const recommendedShippingOption = availableShippingOptions.find(\n (option) => option.isRecommended,\n );\n\n const selectedShippingOption = selectedShippingOptionId\n ? availableShippingOptions.find((option) => option.id === selectedShippingOptionId)\n : availableShippingOptions.find((option) => {\n if (consignment.selectedShippingOption) {\n const shippingOptionId = consignment.selectedShippingOption.id;\n\n return option.id === shippingOptionId;\n }\n\n return false;\n });\n\n const shippingOptionToSelect =\n selectedShippingOption || recommendedShippingOption || availableShippingOptions[0];\n\n if (!shippingOptionToSelect) {\n throw new Error(\"Your order can't be shipped to this address\");\n }\n\n return shippingOptionToSelect;\n }\n\n /**\n *\n * Address transforming methods\n *\n */\n getAddress(address?: Partial<BillingAddressRequestBody>): BillingAddressRequestBody {\n return {\n firstName: address?.firstName || '',\n lastName: address?.lastName || '',\n email: address?.email || '',\n phone: address?.phone || '',\n company: '',\n address1: address?.address1 || '',\n address2: address?.address2 || '',\n city: address?.city || '',\n countryCode: address?.countryCode || '',\n postalCode: address?.postalCode || '',\n stateOrProvince: '',\n stateOrProvinceCode: address?.stateOrProvinceCode || '',\n customFields: [],\n };\n }\n\n getBillingAddressFromOrderDetails({ payer }: PayPalOrderDetails): BillingAddressRequestBody {\n return this.getAddress({\n firstName: payer.name.given_name,\n lastName: payer.name.surname,\n email: payer.email_address,\n address1: payer.address.address_line_1,\n address2: payer.address.address_line_2,\n city: payer.address.admin_area_2,\n countryCode: payer.address.country_code,\n postalCode: payer.address.postal_code,\n stateOrProvinceCode: payer.address.admin_area_1,\n phone: payer.phone?.phone_number?.national_number,\n });\n }\n\n getShippingAddressFromOrderDetails(\n orderDetails: PayPalOrderDetails,\n ): BillingAddressRequestBody {\n const { payer, purchase_units } = orderDetails;\n const {\n address,\n name: { full_name },\n } = purchase_units[0].shipping;\n\n const [firstName, ...lastName] = full_name.split(' ');\n\n return this.getAddress({\n firstName,\n lastName: lastName.join(' '),\n email: payer.email_address,\n address1: address.address_line_1,\n address2: address.address_line_2,\n city: address.admin_area_2,\n countryCode: address.country_code,\n postalCode: address.postal_code,\n stateOrProvinceCode: address.admin_area_1,\n });\n }\n\n /**\n *\n * Buttons style methods\n *\n */\n getValidButtonStyle(style: PayPalButtonStyleOptions = {}): PayPalButtonStyleOptions {\n const { color, height, label, shape } = style;\n\n const validStyles = {\n color: color && StyleButtonColor[color] ? color : undefined,\n height: this.getValidHeight(height),\n label: label && StyleButtonLabel[label] ? label : undefined,\n shape: shape && StyleButtonShape[shape] ? shape : undefined,\n };\n\n return omitBy(validStyles, isNil);\n }\n\n getValidHeight(height?: number): number {\n const defaultHeight = 40;\n const minHeight = 25;\n const maxHeight = 55;\n\n if (!height || typeof height !== 'number') {\n return defaultHeight;\n }\n\n if (height > maxHeight) {\n return maxHeight;\n }\n\n if (height < minHeight) {\n return minHeight;\n }\n\n return height;\n }\n\n /**\n *\n * Utils methods\n *\n */\n removeElement(elementId?: string): void {\n const element = elementId && document.getElementById(elementId);\n\n if (element) {\n // For now this is a temporary solution, further removeElement method will be removed\n element.style.display = 'none';\n }\n }\n}\n","export const INTERNAL_USE_ONLY =\n 'This API endpoint is for internal use only and may change in the future';\n","enum ContentType {\n Json = 'application/json',\n JsonV1 = 'application/vnd.bc.v1+json',\n}\n\nexport default ContentType;\n","export const SDK_VERSION_HEADERS = { 'X-Checkout-SDK-Version': LIBRARY_VERSION };\n","import { RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n ContentType,\n INTERNAL_USE_ONLY,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n PayPalCreateOrderRequestBody,\n PayPalOrderData,\n PayPalOrderStatusData,\n PayPalUpdateOrderRequestBody,\n PayPalUpdateOrderResponse,\n} from './paypal-types';\n\nexport default class PayPalRequestSender {\n constructor(private requestSender: RequestSender) {}\n\n async createOrder(\n providerId: string,\n requestBody: Partial<PayPalCreateOrderRequestBody>,\n ): Promise<PayPalOrderData> {\n const url = `/api/storefront/payment/${providerId}`;\n const body = requestBody;\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.post<PayPalOrderData>(url, { headers, body });\n\n return res.body;\n }\n\n async updateOrder(\n methodId: string,\n requestBody: PayPalUpdateOrderRequestBody,\n ): Promise<PayPalUpdateOrderResponse> {\n const url = `/api/storefront/initialization/${methodId}`;\n const body = requestBody;\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.put<PayPalUpdateOrderResponse>(url, { headers, body });\n\n return res.body;\n }\n\n async getOrderStatus(\n methodId: string,\n options?: RequestOptions,\n ): Promise<PayPalOrderStatusData> {\n const url = `/api/storefront/initialization/${methodId}`;\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.get<PayPalOrderStatusData>(url, {\n headers,\n ...options,\n });\n\n return res.body;\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalSdkScriptLoader from './create-paypal-sdk-script-loader';\nimport PaypalIntegrationService from './paypal-integration-service';\nimport PaypalRequestSender from './paypal-request-sender';\n\nconst createPayPalIntegrationService = (paymentIntegrationService: PaymentIntegrationService) => {\n const { getHost } = paymentIntegrationService.getState();\n\n return new PaypalIntegrationService(\n createFormPoster(),\n paymentIntegrationService,\n new PaypalRequestSender(createRequestSender({ host: getHost() })),\n createPayPalSdkScriptLoader(),\n );\n};\n\nexport default createPayPalIntegrationService;\n","import {\n LoadingIndicatorContainerStyles,\n LoadingIndicatorStyles,\n} from './loading-indicator-styles';\n\nconst DEFAULT_STYLES: LoadingIndicatorStyles = {\n size: 70,\n color: '#d9d9d9',\n backgroundColor: '#ffffff',\n};\n\nexport const DEFAULT_CONTAINER_STYLES = {\n position: 'fixed',\n 'background-color': 'rgba(0, 0, 0, 0.4)',\n 'z-index': '1000',\n};\n\nconst ROTATION_ANIMATION = 'embedded-checkout-loading-indicator-rotation';\n\ninterface LoadingIndicatorOptions {\n styles?: LoadingIndicatorStyles;\n containerStyles?: LoadingIndicatorContainerStyles;\n}\n\nexport default class LoadingIndicator {\n private container: HTMLElement;\n private indicator: HTMLElement;\n private styles: LoadingIndicatorStyles;\n private containerStyles: LoadingIndicatorContainerStyles;\n\n constructor(options?: LoadingIndicatorOptions) {\n this.styles = { ...DEFAULT_STYLES, ...(options && options.styles) };\n this.containerStyles = { ...(options && options.containerStyles) };\n\n this.defineAnimation();\n\n this.container = this.buildContainer();\n this.indicator = this.buildIndicator();\n\n this.container.appendChild(this.indicator);\n }\n\n show(parentId?: string): void {\n if (parentId) {\n const parent = document.getElementById(parentId);\n\n if (!parent) {\n throw new Error(\n 'Unable to attach the loading indicator because the parent ID is not valid.',\n );\n }\n\n parent.appendChild(this.container);\n }\n\n this.container.style.visibility = 'visible';\n this.container.style.opacity = '1';\n }\n\n hide(): void {\n const handleTransitionEnd = () => {\n this.container.style.visibility = 'hidden';\n\n this.container.removeEventListener('transitionend', handleTransitionEnd);\n };\n\n this.container.addEventListener('transitionend', handleTransitionEnd);\n\n this.container.style.opacity = '0';\n }\n\n private buildContainer(): HTMLElement {\n const container = document.createElement('div');\n\n container.style.display = 'block';\n container.style.bottom = '0';\n container.style.left = '0';\n container.style.height = '100%';\n container.style.width = '100%';\n container.style.position = 'absolute';\n container.style.right = '0';\n container.style.top = '0';\n container.style.transition = 'all 250ms ease-out';\n container.style.opacity = '0';\n\n this.setStyleAttribute(container, this.containerStyles);\n\n return container;\n }\n\n private buildIndicator(): HTMLElement {\n const indicator = document.createElement('div');\n\n indicator.style.display = 'block';\n indicator.style.width = `${this.styles.size}px`;\n indicator.style.height = `${this.styles.size}px`;\n indicator.style.borderRadius = `${this.styles.size}px`;\n indicator.style.border = 'solid 1px';\n indicator.style.borderColor = `${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`;\n indicator.style.margin = '0 auto';\n indicator.style.position = 'absolute';\n indicator.style.left = '0';\n indicator.style.right = '0';\n indicator.style.top = '50%';\n indicator.style.transform = 'translateY(-50%) rotate(0deg)';\n indicator.style.transformStyle = 'preserve-3d';\n indicator.style.animation = `${ROTATION_ANIMATION} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`;\n\n return indicator;\n }\n\n private setStyleAttribute(element: HTMLElement, attrs: { [key: string]: string }): void {\n Object.keys(attrs).forEach((k) => {\n element.style.setProperty(k, attrs[k]);\n });\n }\n\n private defineAnimation(): void {\n // In order to define CSS animation, we need to insert a stylesheet into the host frame.\n // We only have to do it once.\n if (document.getElementById(ROTATION_ANIMATION)) {\n return;\n }\n\n const style = document.createElement('style');\n\n style.id = ROTATION_ANIMATION;\n\n document.head?.appendChild(style);\n\n if (style.sheet instanceof CSSStyleSheet) {\n // We need to provide the 2nd parameter for IE11, even though it is\n // 0 by default for all other browsers.\n style.sheet.insertRule(\n `\n @keyframes ${ROTATION_ANIMATION} {\n 0% { transform: translateY(-50%) rotate(0deg); }\n 100% { transform: translateY(-50%) rotate(360deg); }\n }\n `,\n 0,\n );\n }\n }\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when a method is unable to proceed because the\n * caller has not provided all the arguments according to their requirements,\n * i.e.: if an argument is missing or it is not the expected data type.\n */\nexport default class InvalidArgumentError extends StandardError {\n constructor(message?: string) {\n super(message || 'Invalid arguments have been provided.');\n\n this.name = 'InvalidArgumentError';\n this.type = 'invalid_argument';\n }\n}\n","import InvalidArgumentError from './invalid-argument-error';\n\n/**\n * This error should be thrown when we are unable to submit a payment because\n * the caller has not provided all the required fields, i.e.: if an argument is\n * missing or it is not the expected data type.\n */\nexport default class PaymentArgumentInvalidError extends InvalidArgumentError {\n constructor(invalidFields?: string[]) {\n let message = 'Unable to submit payment for the order because the payload is invalid.';\n\n if (invalidFields) {\n message = `${message} Make sure the following fields are provided correctly: ${invalidFields.join(\n ', ',\n )}.`;\n }\n\n super(message);\n\n this.name = 'PaymentArgumentInvalidError';\n }\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport RequestError from './request-error';\n\n/**\n * Throw this error if we are unable to successfully submit a server request\n * using a payment method because the method has invalid configuration or is in\n * an invalid state.\n */\nexport default class PaymentMethodInvalidError<T = any> extends RequestError<T> {\n constructor(response?: Response<T>) {\n super(response, {\n message: 'There is a problem processing your payment. Please try again later.',\n });\n\n this.name = 'PaymentMethodInvalidError';\n this.type = 'payment_method_invalid';\n }\n}\n","import StandardError from './standard-error';\n\n/**\n * Throw this error if we are trying to make an order finalization request for a\n * payment method that does not require such procedure.\n */\nexport default class OrderFinalizationNotRequiredError extends StandardError {\n constructor() {\n super('The current order does not need to be finalized at this stage.');\n\n this.name = 'OrderFinalizationNotRequiredError';\n this.type = 'order_finalization_not_required';\n }\n}\n","import { HostedInstrument } from './payment';\n\nexport default function isHostedInstrumentLike(\n instrument: unknown,\n): instrument is HostedInstrument {\n return (\n typeof instrument === 'object' &&\n instrument !== null &&\n (typeof (instrument as HostedInstrument).shouldSaveInstrument === 'undefined' ||\n typeof (instrument as HostedInstrument).shouldSaveInstrument === 'boolean') &&\n (typeof (instrument as HostedInstrument).shouldSetAsDefaultInstrument === 'undefined' ||\n typeof (instrument as HostedInstrument).shouldSetAsDefaultInstrument === 'boolean')\n );\n}\n","import {\n FormattedPayload,\n FormattedVaultedInstrument,\n HostedVaultedInstrument,\n PaymentInstrumentPayload,\n VaultedInstrument,\n} from './payment';\n\nexport default function isVaultedInstrument(\n instrument: PaymentInstrumentPayload,\n): instrument is VaultedInstrument {\n return Boolean((instrument as VaultedInstrument).instrumentId);\n}\n\nexport function isHostedVaultedInstrument(\n instrument: PaymentInstrumentPayload,\n): instrument is HostedVaultedInstrument {\n return (\n Boolean((instrument as HostedVaultedInstrument).instrumentId) &&\n !Object.prototype.hasOwnProperty.call(instrument, 'ccNumber') &&\n !Object.prototype.hasOwnProperty.call(instrument, 'ccCvv')\n );\n}\n\nexport function isFormattedVaultedInstrument(\n instrument: PaymentInstrumentPayload,\n): instrument is FormattedPayload<FormattedVaultedInstrument> {\n const formattedInstrument = (instrument as FormattedPayload<FormattedVaultedInstrument>)\n .formattedPayload;\n\n if (!formattedInstrument) {\n return false;\n }\n\n return (\n typeof formattedInstrument.bigpay_token === 'string' ||\n Boolean(formattedInstrument.bigpay_token && formattedInstrument.bigpay_token.token)\n );\n}\n","import RequestError from './request-error';\n\n// Have to use `as` https://stackoverflow.com/questions/73987044/typeguarding-an-unknown-nested-object should be fixed in 4.8+\nconst isRequestError = (error: unknown): error is RequestError => {\n return typeof error === 'object' && error !== null && 'body' in error;\n};\n\nexport default isRequestError;\n","import { MessagesStyleOptions, PayPalBNPLConfigurationItem } from '../paypal-types';\n\nfunction getPaypalMessagesStylesFromBNPLConfig({\n styles,\n}: PayPalBNPLConfigurationItem): MessagesStyleOptions {\n const messagesStyles: MessagesStyleOptions = {};\n\n if (styles.color) {\n messagesStyles.color = styles.color;\n }\n\n if (styles.layout) {\n messagesStyles.layout = styles.layout;\n }\n\n if (styles['logo-type'] || styles['logo-position']) {\n messagesStyles.logo = {};\n\n if (styles['logo-type']) {\n messagesStyles.logo.type = styles['logo-type'];\n }\n\n if (styles['logo-position']) {\n messagesStyles.logo.position = styles['logo-position'];\n }\n }\n\n if (styles.ratio) {\n messagesStyles.ratio = styles.ratio;\n }\n\n if (styles['text-color'] || styles['text-size']) {\n messagesStyles.text = {};\n\n if (styles['text-color']) {\n messagesStyles.text.color = styles['text-color'];\n }\n\n if (styles['text-size']) {\n messagesStyles.text.size = +styles['text-size'];\n }\n }\n\n return messagesStyles;\n}\n\nexport default getPaypalMessagesStylesFromBNPLConfig;\n","export interface BaseInstrument {\n bigpayToken: string;\n defaultInstrument: boolean;\n provider: string;\n trustedShippingAddress: boolean;\n method: string;\n type: string;\n}\n\nexport function isBaseInstrument(instrument: unknown): instrument is BaseInstrument {\n if (typeof instrument !== 'object' || instrument === null) {\n return false;\n }\n\n return (\n 'bigpayToken' in instrument &&\n 'defaultInstrument' in instrument &&\n 'provider' in instrument &&\n 'trustedShippingAddress' in instrument &&\n 'method' in instrument &&\n 'type' in instrument\n );\n}\n","import {\n HostedInstrument,\n InvalidArgumentError,\n isHostedInstrumentLike,\n isVaultedInstrument,\n OrderFinalizationNotRequiredError,\n OrderPaymentRequestBody,\n OrderRequestBody,\n Payment,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentInstrumentPayload,\n PaymentIntegrationService,\n PaymentMethodInvalidError,\n PaymentRequestOptions,\n PaymentStrategy,\n VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n ApproveCallbackPayload,\n ClickCallbackActions,\n getPaypalMessagesStylesFromBNPLConfig,\n isPaypalProviderError,\n isRedirectActionError,\n MessagingOptions,\n PayPalBNPLConfigurationItem,\n PayPalButtons,\n PayPalButtonsOptions,\n PayPalInitializationData,\n PayPalIntegrationService,\n PayPalMessagesSdk,\n PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\nimport { isBaseInstrument } from '@bigcommerce/checkout-sdk/utility';\n\nimport PayPalCommercePaymentInitializeOptions, {\n WithPayPalCommercePaymentInitializeOptions,\n} from './paypal-commerce-payment-initialize-options';\n\nexport default class PayPalCommercePaymentStrategy implements PaymentStrategy {\n private loadingIndicatorContainer?: string;\n private orderId?: string;\n private paypalButton?: PayPalButtons;\n private paypalcommerce?: PayPalCommercePaymentInitializeOptions;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalIntegrationService: PayPalIntegrationService,\n private payPalSdkScriptLoader: PayPalSdkScriptLoader,\n private loadingIndicator: LoadingIndicator,\n ) {}\n\n async initialize(\n options?: PaymentInitializeOptions & WithPayPalCommercePaymentInitializeOptions,\n ): Promise<void> {\n const { methodId, paypalcommerce } = options || {};\n\n this.paypalcommerce = paypalcommerce;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!paypalcommerce) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.`,\n );\n }\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n const { container, bannerContainerId } = paypalcommerce;\n\n const {\n orderId,\n paypalBNPLConfiguration = [],\n isPayPalCreditAvailable,\n } = paymentMethod.initializationData || {};\n\n if (bannerContainerId !== undefined) {\n if (!document.getElementById(bannerContainerId)) {\n // eslint-disable-next-line no-console\n console.error('Unable to create banner without valid banner container ID.');\n\n return;\n }\n\n const bannerConfiguration = paypalBNPLConfiguration?.find(\n ({ id }) => id === 'checkout',\n );\n\n if (isPayPalCreditAvailable || !bannerConfiguration?.status) {\n return;\n }\n\n const paypalMessages = await this.payPalSdkScriptLoader.getPayPalMessages(\n paymentMethod,\n state.getCartOrThrow().currency.code,\n state.getLocale(),\n );\n\n if (!paypalMessages || typeof paypalMessages?.Messages !== 'function') {\n // eslint-disable-next-line no-console\n console.error(\n '[BC PayPalCommerce PayLater]: banner could not be rendered, due to issues with loading PayPal SDK',\n );\n\n return;\n }\n\n return this.renderMessages(paypalMessages, bannerContainerId, bannerConfiguration);\n }\n\n // Info:\n // The PayPal button and fields should not be rendered when shopper was redirected to Checkout page\n // after using smart payment button on PDP or Cart page. In this case backend returns order id if\n // it is available in checkout session. Therefore, it is not necessary to render PayPal button.\n if (orderId) {\n this.orderId = paymentMethod.initializationData?.orderId;\n\n return;\n }\n\n this.loadingIndicatorContainer = container?.split('#')[1];\n\n await this.paypalIntegrationService.loadPayPalSdk(methodId);\n\n if (paypalcommerce.onInit && typeof paypalcommerce.onInit === 'function') {\n paypalcommerce.onInit(() => this.renderButton(methodId, paypalcommerce));\n }\n\n if (\n paypalcommerce.shouldRenderPayPalButtonOnInitialization === undefined ||\n paypalcommerce.shouldRenderPayPalButtonOnInitialization\n ) {\n this.renderButton(methodId, paypalcommerce);\n }\n }\n\n async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n const { payment, ...order } = payload;\n const { onError } = this.paypalcommerce || {};\n\n if (!payment) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n const { methodId, paymentData } = payment;\n\n if (this.isPayPalVaultedInstrumentPaymentData(paymentData) && !this.orderId) {\n this.orderId = await this.createOrder();\n }\n\n if (!this.orderId) {\n throw new PaymentMethodInvalidError();\n }\n\n const paymentPayload = this.isPayPalVaultedInstrumentPaymentData(paymentData)\n ? this.prepareVaultedInstrumentPaymentPayload(methodId, this.orderId, paymentData)\n : this.preparePaymentPayload(methodId, this.orderId, paymentData);\n\n try {\n await this.paymentIntegrationService.submitOrder(order, options);\n await this.paymentIntegrationService.submitPayment(paymentPayload);\n } catch (error: unknown) {\n if (isRedirectActionError(error)) {\n const redirectUrl = error.body.additional_action_required?.data?.redirect_url;\n\n return new Promise(() => window.location.replace(redirectUrl));\n }\n\n if (this.isProviderError(error)) {\n await this.paypalIntegrationService.loadPayPalSdk(payment.methodId);\n\n await new Promise((_resolve, reject) => {\n if (this.paypalcommerce) {\n this.paypalButton?.close();\n this.renderButton(payment.methodId, this.paypalcommerce);\n this.handleError(new Error('INSTRUMENT_DECLINED'), onError);\n }\n\n reject();\n });\n }\n\n this.handleError(error, onError);\n\n return Promise.reject();\n }\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n deinitialize(): Promise<void> {\n this.orderId = undefined;\n\n this.paypalButton?.close();\n\n return Promise.resolve();\n }\n\n private prepareVaultedInstrumentPaymentPayload(\n methodId: string,\n paypalOrderId: string,\n paymentData: VaultedInstrument & HostedInstrument,\n ): Payment {\n const { instrumentId, shouldSetAsDefaultInstrument } = paymentData;\n\n const shouldConfirmInstrument = !this.isTrustedVaultingFlow(paymentData);\n\n if (shouldConfirmInstrument) {\n return {\n methodId,\n paymentData: {\n shouldSaveInstrument: shouldConfirmInstrument,\n shouldSetAsDefaultInstrument,\n formattedPayload: {\n paypal_account: {\n order_id: paypalOrderId,\n },\n },\n },\n };\n }\n\n return {\n methodId,\n paymentData: {\n instrumentId,\n shouldSetAsDefaultInstrument,\n formattedPayload: {\n paypal_account: {\n order_id: paypalOrderId,\n },\n bigpay_token: {\n token: instrumentId,\n },\n },\n },\n };\n }\n\n private preparePaymentPayload(\n methodId: string,\n paypalOrderId: string,\n paymentData: OrderPaymentRequestBody['paymentData'],\n ): Payment {\n const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n return {\n methodId,\n paymentData: {\n shouldSaveInstrument,\n shouldSetAsDefaultInstrument,\n formattedPayload: {\n paypal_account: {\n order_id: paypalOrderId,\n },\n },\n },\n };\n }\n\n /**\n *\n * Button methods/callbacks\n *\n * */\n private renderButton(\n methodId: string,\n paypalcommerce: PayPalCommercePaymentInitializeOptions,\n ): void {\n const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const { paymentButtonStyles } = paymentMethod.initializationData || {};\n const { checkoutPaymentButtonStyles } = paymentButtonStyles || {};\n const { container, onError, onRenderButton, onValidate, submitForm } = paypalcommerce;\n\n if (!container) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"container\" argument is not provided.',\n );\n }\n\n const containerId = this.getSmartButtonContainerId(container);\n const smartButtonContainer = document.getElementById(containerId);\n\n if (!smartButtonContainer) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because element with id ${containerId} does not exist.`,\n );\n }\n\n const buttonOptions: PayPalButtonsOptions = {\n fundingSource: paypalSdk.FUNDING.PAYPAL,\n style: this.paypalIntegrationService.getValidButtonStyle(checkoutPaymentButtonStyles),\n createOrder: () => this.createOrder(),\n onClick: (_, actions) => this.handleClick(actions, onValidate),\n onApprove: (data) => this.handleApprove(data, submitForm),\n onError: (error) => this.handleError(error, onError),\n onCancel: () => this.toggleLoadingIndicator(false),\n };\n\n this.paypalButton = paypalSdk.Buttons(buttonOptions);\n\n if (!this.paypalButton.isEligible()) {\n return;\n }\n\n if (onRenderButton && typeof onRenderButton === 'function') {\n onRenderButton();\n }\n\n this.paypalButton.render(container);\n }\n\n private async handleClick(\n actions: ClickCallbackActions,\n onValidate: PayPalCommercePaymentInitializeOptions['onValidate'],\n ): Promise<void> {\n const { resolve, reject } = actions;\n\n const onValidationPassed = () => {\n this.toggleLoadingIndicator(true);\n\n return resolve();\n };\n\n return onValidate?.(onValidationPassed, reject);\n }\n\n private handleApprove(\n { orderID }: ApproveCallbackPayload,\n submitForm: PayPalCommercePaymentInitializeOptions['submitForm'],\n ): void {\n this.orderId = orderID;\n\n submitForm?.();\n }\n\n private handleError(\n error: unknown,\n onError: PayPalCommercePaymentInitializeOptions['onError'],\n ): void {\n this.toggleLoadingIndicator(false);\n\n if (onError && typeof onError === 'function') {\n onError(error);\n }\n }\n\n private async createOrder(): Promise<string> {\n const fieldsValues = this.getFieldsValues();\n\n return this.paypalIntegrationService.createOrder('paypalcommercecheckout', {\n shouldSaveInstrument: fieldsValues?.shouldSaveInstrument || false,\n });\n }\n\n /**\n *\n * Vaulting flow methods\n *\n * */\n private getFieldsValues(): HostedInstrument | undefined {\n const { getFieldsValues } = this.paypalcommerce || {};\n\n return typeof getFieldsValues === 'function' ? getFieldsValues() : undefined;\n }\n\n private isTrustedVaultingFlow(paymentData?: PaymentInstrumentPayload): boolean {\n if (paymentData && isVaultedInstrument(paymentData)) {\n const state = this.paymentIntegrationService.getState();\n\n const instruments = state.getInstruments();\n const findInstrument = instruments?.find(\n (instrument) =>\n isBaseInstrument(instrument) &&\n instrument.bigpayToken === paymentData.instrumentId,\n );\n const trustedShippingAddress = isBaseInstrument(findInstrument)\n ? findInstrument.trustedShippingAddress\n : {};\n\n return !!trustedShippingAddress;\n }\n\n return false;\n }\n\n /**\n *\n * Loading Indicator methods\n *\n * */\n private toggleLoadingIndicator(isLoading: boolean): void {\n if (isLoading && this.loadingIndicatorContainer) {\n this.loadingIndicator.show(this.loadingIndicatorContainer);\n } else {\n this.loadingIndicator.hide();\n }\n }\n\n /**\n *\n * Guards\n *\n */\n private isPayPalVaultedInstrumentPaymentData(\n paymentData?: PaymentInstrumentPayload,\n ): paymentData is VaultedInstrument & HostedInstrument {\n return (\n !!paymentData && isVaultedInstrument(paymentData) && isHostedInstrumentLike(paymentData)\n );\n }\n\n /**\n *\n * Render Pay Later Messages\n *\n * */\n private renderMessages(\n paypalMessages: PayPalMessagesSdk,\n bannerContainerId: string,\n bannerConfiguration: PayPalBNPLConfigurationItem,\n ): void {\n const checkout = this.paymentIntegrationService.getState().getCheckoutOrThrow();\n\n const paypalMessagesOptions: MessagingOptions = {\n amount: checkout.outstandingBalance,\n placement: 'payment',\n style: getPaypalMessagesStylesFromBNPLConfig(bannerConfiguration),\n };\n\n paypalMessages.Messages(paypalMessagesOptions).render(`#${bannerContainerId}`);\n }\n\n /**\n *\n * Error handling\n *\n */\n private isProviderError(error: unknown): boolean {\n if (isPaypalProviderError(error)) {\n const paypalProviderError = error?.errors?.filter((e) => e.provider_error) || [];\n\n return paypalProviderError[0]?.provider_error?.code === 'INSTRUMENT_DECLINED';\n }\n\n return false;\n }\n\n private getSmartButtonContainerId(container: string) {\n return container.split('#')[1] ?? container;\n }\n}\n","import { isRequestError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ProviderError } from './is-paypal-provider-error';\n\nexport interface RedirectActionError extends ProviderError {\n body: {\n additional_action_required: {\n type: 'offsite_redirect';\n data: {\n redirect_url: string;\n };\n };\n };\n}\n\nexport default function isRedirectActionError(error: unknown): error is RedirectActionError {\n return (\n isRequestError(error) && error.body.additional_action_required?.type === 'offsite_redirect'\n );\n}\n","export interface ProviderError extends Error {\n errors?: ErrorElement[];\n status?: string;\n three_ds_result?: {\n acs_url: unknown;\n payer_auth_request: unknown;\n merchant_data: unknown;\n callback_url: unknown;\n };\n}\n\nexport interface ErrorElement {\n code: string;\n message: string;\n provider_error?: {\n code: string;\n };\n}\n\nexport default function isPaypalProviderError(error: unknown): error is ProviderError {\n return typeof error === 'object' && error !== null && 'errors' in error;\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalIntegrationService,\n LOADING_INDICATOR_STYLES,\n PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommercePaymentStrategy from './paypal-commerce-payment-strategy';\n\nconst createPayPalCommercePaymentStrategy: PaymentStrategyFactory<PayPalCommercePaymentStrategy> = (\n paymentIntegrationService,\n) =>\n new PayPalCommercePaymentStrategy(\n paymentIntegrationService,\n createPayPalIntegrationService(paymentIntegrationService),\n new PayPalSdkScriptLoader(getScriptLoader()),\n new LoadingIndicator({\n containerStyles: LOADING_INDICATOR_STYLES,\n }),\n );\n\nexport default toResolvableModule(createPayPalCommercePaymentStrategy, [{ id: 'paypalcommerce' }]);\n","import StandardError from './standard-error';\n\n/**\n * Throw this error if we try to call a method that is only a stub and has not\n * been fully implemented.\n */\nexport default class NotImplementedError extends StandardError {\n constructor(message?: string) {\n super(message || 'Not implemented.');\n\n this.name = 'NotImplementedError';\n this.type = 'not_implemented';\n }\n}\n","import {\n InvalidArgumentError,\n NotImplementedError,\n OrderFinalizationNotRequiredError,\n OrderRequestBody,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethodInvalidError,\n PaymentRequestOptions,\n PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n ApproveCallbackPayload,\n ClickCallbackActions,\n getPaypalMessagesStylesFromBNPLConfig,\n MessagingOptions,\n PayPalBNPLConfigurationItem,\n PayPalButtons,\n PayPalButtonsOptions,\n PayPalInitializationData,\n PayPalIntegrationService,\n PayPalMessagesSdk,\n PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommerceCreditPaymentInitializeOptions, {\n WithPayPalCommerceCreditPaymentInitializeOptions,\n} from './paypal-commerce-credit-payment-initialize-options';\n\nexport default class PayPalCommerceCreditPaymentStrategy implements PaymentStrategy {\n private loadingIndicatorContainer?: string;\n private orderId?: string;\n private paypalButton?: PayPalButtons;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalIntegrationService: PayPalIntegrationService,\n private loadingIndicator: LoadingIndicator,\n private payPalSdkScriptLoader: PayPalSdkScriptLoader,\n ) {}\n\n async initialize(\n options?: PaymentInitializeOptions & WithPayPalCommerceCreditPaymentInitializeOptions,\n ): Promise<void> {\n const { methodId, paypalcommerce, paypalcommercecredit } = options || {};\n\n const paypalOptions = paypalcommercecredit || paypalcommerce;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!paypalOptions) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.`,\n );\n }\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n const { paypalBNPLConfiguration = [], orderId } = paymentMethod.initializationData || {};\n const { bannerContainerId, container } = paypalOptions;\n\n if (bannerContainerId !== undefined) {\n if (!document.getElementById(bannerContainerId)) {\n // eslint-disable-next-line no-console\n console.error('Unable to create banner without valid banner container ID.');\n\n return;\n }\n\n const bannerConfiguration =\n paypalBNPLConfiguration &&\n paypalBNPLConfiguration.find(({ id }) => id === 'checkout');\n\n if (!bannerConfiguration?.status) {\n return;\n }\n\n const paypalMessages = await this.payPalSdkScriptLoader.getPayPalMessages(\n paymentMethod,\n state.getCartOrThrow().currency.code,\n state.getLocale(),\n );\n\n return this.renderMessages(paypalMessages, bannerContainerId, bannerConfiguration);\n }\n\n // Info:\n // The PayPal button and fields should not be rendered when shopper was redirected to Checkout page\n // after using smart payment button on PDP or Cart page. In this case backend returns order id if\n // it is available in checkout session. Therefore, it is not necessary to render PayPal button.\n if (orderId) {\n this.orderId = orderId;\n\n return;\n }\n\n await this.paypalIntegrationService.loadPayPalSdk(methodId);\n\n this.loadingIndicatorContainer = container?.split('#')[1];\n\n this.renderButton(methodId, paypalOptions);\n }\n\n async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n const { payment, ...order } = payload;\n\n if (!payment) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n if (!this.orderId) {\n throw new PaymentMethodInvalidError();\n }\n\n await this.paymentIntegrationService.submitOrder(order, options);\n await this.paypalIntegrationService.submitPayment(payment.methodId, this.orderId);\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n deinitialize(): Promise<void> {\n this.orderId = undefined;\n\n this.paypalButton?.close();\n\n return Promise.resolve();\n }\n\n /**\n *\n * Button methods/callbacks\n *\n * */\n private renderButton(\n methodId: string,\n paypalOptions: PayPalCommerceCreditPaymentInitializeOptions,\n ): void {\n if (!paypalOptions?.container) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"container\" argument is not provided.',\n );\n }\n\n const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const { paymentButtonStyles } = paymentMethod.initializationData || {};\n const { checkoutPaymentButtonStyles } = paymentButtonStyles || {};\n\n const { container, onError, onRenderButton, onValidate, submitForm } = paypalOptions;\n\n const fundingSources = [paypalSdk.FUNDING.PAYLATER, paypalSdk.FUNDING.CREDIT];\n let hasRenderedSmartButton = false;\n\n fundingSources.forEach((fundingSource) => {\n if (hasRenderedSmartButton) {\n return;\n }\n\n const buttonOptions: PayPalButtonsOptions = {\n fundingSource,\n style: this.paypalIntegrationService.getValidButtonStyle(\n checkoutPaymentButtonStyles,\n ),\n createOrder: () =>\n this.paypalIntegrationService.createOrder('paypalcommercecreditcheckout'),\n onClick: (_, actions) => this.handleClick(actions, onValidate),\n onApprove: (data) => this.handleApprove(data, submitForm),\n onCancel: () => this.toggleLoadingIndicator(false),\n onError: (error) => this.handleError(error, onError),\n };\n\n this.paypalButton = paypalSdk.Buttons(buttonOptions);\n\n if (!this.paypalButton.isEligible() && fundingSource === paypalSdk.FUNDING.PAYLATER) {\n return;\n }\n\n if (!this.paypalButton.isEligible() && fundingSource === paypalSdk.FUNDING.CREDIT) {\n throw new NotImplementedError(\n `PayPal ${fundingSource} is not available for your region. Please use PayPal Checkout instead.`,\n );\n }\n\n if (onRenderButton && typeof onRenderButton === 'function') {\n onRenderButton();\n }\n\n this.paypalButton.render(container);\n hasRenderedSmartButton = true;\n });\n }\n\n private async handleClick(\n actions: ClickCallbackActions,\n onValidate: PayPalCommerceCreditPaymentInitializeOptions['onValidate'],\n ): Promise<void> {\n const { resolve, reject } = actions;\n\n const onValidationPassed = () => {\n this.toggleLoadingIndicator(true);\n\n return resolve();\n };\n\n if (onValidate && typeof onValidate === 'function') {\n return onValidate(onValidationPassed, reject);\n }\n }\n\n private handleApprove(\n { orderID }: ApproveCallbackPayload,\n submitForm: PayPalCommerceCreditPaymentInitializeOptions['submitForm'],\n ): void {\n this.orderId = orderID;\n\n if (submitForm && typeof submitForm === 'function') {\n submitForm();\n }\n }\n\n private handleError(\n error: Error,\n onError: PayPalCommerceCreditPaymentInitializeOptions['onError'],\n ): void {\n this.toggleLoadingIndicator(false);\n\n if (onError && typeof onError === 'function') {\n onError(error);\n }\n }\n\n /**\n *\n * Loading Indicator methods\n *\n * */\n private toggleLoadingIndicator(isLoading: boolean): void {\n if (isLoading && this.loadingIndicatorContainer) {\n this.loadingIndicator.show(this.loadingIndicatorContainer);\n } else {\n this.loadingIndicator.hide();\n }\n }\n\n /**\n *\n * Render Pay Later Messages\n *\n * */\n private renderMessages(\n paypalMessages: PayPalMessagesSdk,\n bannerContainerId: string,\n bannerConfiguration: PayPalBNPLConfigurationItem,\n ): void {\n const checkout = this.paymentIntegrationService.getState().getCheckoutOrThrow();\n\n const paypalMessagesOptions: MessagingOptions = {\n amount: checkout.outstandingBalance,\n placement: 'payment',\n style: getPaypalMessagesStylesFromBNPLConfig(bannerConfiguration),\n };\n\n paypalMessages.Messages(paypalMessagesOptions).render(`#${bannerContainerId}`);\n }\n}\n","import {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalIntegrationService,\n createPayPalSdkScriptLoader,\n LOADING_INDICATOR_STYLES,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommerceCreditPaymentStrategy from './paypal-commerce-credit-payment-strategy';\n\nconst createPayPalCommerceCreditPaymentStrategy: PaymentStrategyFactory<\n PayPalCommerceCreditPaymentStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceCreditPaymentStrategy(\n paymentIntegrationService,\n createPayPalIntegrationService(paymentIntegrationService),\n new LoadingIndicator({\n containerStyles: LOADING_INDICATOR_STYLES,\n }),\n createPayPalSdkScriptLoader(),\n );\n\nexport default toResolvableModule(createPayPalCommerceCreditPaymentStrategy, [\n { id: 'paypalcommercecredit' },\n]);\n","import {\n InvalidArgumentError,\n NotImplementedError,\n OrderFinalizationNotRequiredError,\n OrderRequestBody,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethodInvalidError,\n PaymentRequestOptions,\n PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n ApproveCallbackPayload,\n ClickCallbackActions,\n PayPalButtons,\n PayPalButtonsOptions,\n PayPalInitializationData,\n PayPalIntegrationService,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommerceVenmoPaymentInitializeOptions, {\n WithPayPalCommerceVenmoPaymentInitializeOptions,\n} from './paypal-commerce-venmo-payment-initialize-options';\n\nexport default class PayPalCommerceVenmoPaymentStrategy implements PaymentStrategy {\n private loadingIndicatorContainer?: string;\n private orderId?: string;\n private paypalButton?: PayPalButtons;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalIntegrationService: PayPalIntegrationService,\n private loadingIndicator: LoadingIndicator,\n ) {}\n\n async initialize(\n options?: PaymentInitializeOptions & WithPayPalCommerceVenmoPaymentInitializeOptions,\n ): Promise<void> {\n const { methodId, paypalcommerce, paypalcommercevenmo } = options || {};\n\n const paypalOptions = paypalcommercevenmo || paypalcommerce;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!paypalOptions) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.`,\n );\n }\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n // Info:\n // The PayPal button and fields should not be rendered when shopper was redirected to Checkout page\n // after using smart payment button on PDP or Cart page. In this case backend returns order id if\n // it is available in checkout session. Therefore, it is not necessary to render PayPal button.\n if (paymentMethod.initializationData?.orderId) {\n this.orderId = paymentMethod.initializationData?.orderId;\n\n return;\n }\n\n await this.paypalIntegrationService.loadPayPalSdk(methodId);\n\n this.loadingIndicatorContainer = paypalOptions.container.split('#')[1];\n\n this.renderButton(methodId, paypalOptions);\n }\n\n async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n const { payment, ...order } = payload;\n\n if (!payment) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n if (!this.orderId) {\n throw new PaymentMethodInvalidError();\n }\n\n await this.paymentIntegrationService.submitOrder(order, options);\n await this.paypalIntegrationService.submitPayment(payment.methodId, this.orderId);\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n deinitialize(): Promise<void> {\n this.orderId = undefined;\n\n this.paypalButton?.close();\n\n return Promise.resolve();\n }\n\n /**\n *\n * Button methods/callbacks\n *\n * */\n private renderButton(\n methodId: string,\n paypalcommercevenmo: PayPalCommerceVenmoPaymentInitializeOptions,\n ): void {\n const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const { paymentButtonStyles } = paymentMethod.initializationData || {};\n const { checkoutPaymentButtonStyles } = paymentButtonStyles || {};\n\n const { container, onError, onRenderButton, onValidate, submitForm } = paypalcommercevenmo;\n\n const buttonOptions: PayPalButtonsOptions = {\n fundingSource: paypalSdk.FUNDING.VENMO,\n style: this.paypalIntegrationService.getValidButtonStyle(checkoutPaymentButtonStyles),\n createOrder: () =>\n this.paypalIntegrationService.createOrder('paypalcommercevenmocheckout'),\n onClick: (_, actions) => this.handleClick(actions, onValidate),\n onApprove: (data) => this.handleApprove(data, submitForm),\n onCancel: () => this.toggleLoadingIndicator(false),\n onError: (error) => this.handleError(error, onError),\n };\n\n this.paypalButton = paypalSdk.Buttons(buttonOptions);\n\n if (!this.paypalButton.isEligible()) {\n throw new NotImplementedError(\n `PayPal Venmo is not available for your region. Please use PayPal Checkout instead.`,\n );\n }\n\n if (onRenderButton && typeof onRenderButton === 'function') {\n onRenderButton();\n }\n\n this.paypalButton.render(container);\n }\n\n private async handleClick(\n actions: ClickCallbackActions,\n onValidate: PayPalCommerceVenmoPaymentInitializeOptions['onValidate'],\n ): Promise<void> {\n const { resolve, reject } = actions;\n\n const onValidationPassed = () => {\n this.toggleLoadingIndicator(true);\n\n return resolve();\n };\n\n return onValidate(onValidationPassed, reject);\n }\n\n private handleApprove(\n { orderID }: ApproveCallbackPayload,\n submitForm: PayPalCommerceVenmoPaymentInitializeOptions['submitForm'],\n ): void {\n this.orderId = orderID;\n\n submitForm();\n this.toggleLoadingIndicator(false);\n }\n\n private handleError(\n error: Error,\n onError: PayPalCommerceVenmoPaymentInitializeOptions['onError'],\n ): void {\n this.toggleLoadingIndicator(false);\n\n if (onError && typeof onError === 'function') {\n onError(error);\n }\n }\n\n /**\n *\n * Loading Indicator methods\n *\n * */\n private toggleLoadingIndicator(isLoading: boolean): void {\n if (isLoading && this.loadingIndicatorContainer) {\n this.loadingIndicator.show(this.loadingIndicatorContainer);\n } else {\n this.loadingIndicator.hide();\n }\n }\n}\n","import {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalIntegrationService,\n LOADING_INDICATOR_STYLES,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommerceVenmoPaymentStrategy from './paypal-commerce-venmo-payment-strategy';\n\nconst createPayPalCommerceVenmoPaymentStrategy: PaymentStrategyFactory<\n PayPalCommerceVenmoPaymentStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceVenmoPaymentStrategy(\n paymentIntegrationService,\n createPayPalIntegrationService(paymentIntegrationService),\n new LoadingIndicator({\n containerStyles: LOADING_INDICATOR_STYLES,\n styles: { backgroundColor: 'black' },\n }),\n );\n\nexport default toResolvableModule(createPayPalCommerceVenmoPaymentStrategy, [\n { id: 'paypalcommercevenmo' },\n]);\n","export const LOADING_INDICATOR_STYLES = {\n 'background-color': 'rgba(0, 0, 0, 0.4)',\n 'z-index': '1000',\n};\n","import { Response } from '@bigcommerce/request-sender';\n\nimport RequestError from './request-error';\n\n/**\n * Throw this error if a request fails to complete within its required timeframe\n * because of a network issue.\n */\nexport default class TimeoutError<T = any> extends RequestError<T> {\n constructor(response?: Response<T>) {\n super(response, {\n message: 'The request has timed out or aborted.',\n });\n\n this.name = 'TimeoutError';\n this.type = 'timeout';\n }\n}\n","import {\n BuyNowCartRequestBody,\n HostedInstrument,\n ShippingOption,\n VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n *\n * PayPal Commerce Funding sources\n *\n */\nexport type FundingType = string[];\nexport type EnableFundingType = FundingType | string;\n\nexport interface PayPalCommerceSDKFunding {\n CARD: string;\n PAYPAL: string;\n CREDIT: string;\n PAYLATER: string;\n OXXO: string;\n SEPA: string;\n VENMO: string;\n}\n\n/**\n *\n * PayPal Commerce SDK\n *\n */\n\nexport interface PayPalCommerceCardFieldsConfig {\n inputEvents: {\n onChange(data: PayPalCommerceCardFieldsState): void;\n onFocus(data: PayPalCommerceCardFieldsState): void;\n onBlur(data: PayPalCommerceCardFieldsState): void;\n onInputSubmitRequest(data: PayPalCommerceCardFieldsState): void;\n };\n createVaultSetupToken?: (data: PayPalCommerceCardFieldsState) => void;\n createOrder?: () => Promise<string>;\n style: PayPalCommerceHostedFieldsRenderOptions['styles'];\n onApprove(data: PayPalCommerceCardFieldsOnApproveData): void;\n onError(): void;\n}\n\nexport interface PayPalCommerceCardFieldsOnApproveData {\n vaultSetupToken?: string;\n orderID: string;\n liabilityShift?: LiabilityShiftEnum;\n}\n\nexport enum LiabilityShiftEnum {\n Possible = 'POSSIBLE',\n No = 'NO',\n Unknown = 'UNKNOWN',\n Yes = 'YES',\n}\n\ninterface PayPalCommerceCardFieldsFieldData {\n isFocused: boolean;\n isEmpty: boolean;\n isValid: boolean;\n isPotentiallyValid: boolean;\n}\n\ntype PayPalCommerceCardFieldsCard = PayPalCommerceHostedFieldsCard;\n\nexport interface PayPalCommerceCardFieldsState {\n cards: PayPalCommerceCardFieldsCard[];\n emittedBy: string;\n isFormValid: boolean;\n errors: string[];\n fields: {\n cardCvvField: PayPalCommerceCardFieldsFieldData;\n cardNumberField: PayPalCommerceCardFieldsFieldData;\n cardNameField?: PayPalCommerceCardFieldsFieldData;\n cardExpiryField: PayPalCommerceCardFieldsFieldData;\n };\n}\n\nexport interface PayPalCommerceFields {\n render(container: HTMLElement | string): Promise<void>;\n clear(): void;\n removeClass(className: string): Promise<void>;\n close(): Promise<void>;\n}\n\ninterface PayPalCommerceFieldsInitializationData {\n placeholder?: string;\n}\n\nexport interface PayPalCommerceCardFields {\n isEligible(): boolean;\n CVVField(config?: PayPalCommerceFieldsInitializationData): PayPalCommerceFields;\n ExpiryField(config?: PayPalCommerceFieldsInitializationData): PayPalCommerceFields;\n NameField(config?: PayPalCommerceFieldsInitializationData): PayPalCommerceFields;\n NumberField(config?: PayPalCommerceFieldsInitializationData): PayPalCommerceFields;\n submit(config?: PayPalCommerceCardFieldsSubmitConfig): Promise<void>;\n getState(): Promise<PayPalCommerceCardFieldsState>;\n}\n\nexport interface PayPalCommerceCardFieldsSubmitConfig {\n billingAddress: {\n company?: string;\n addressLine1: string;\n addressLine2?: string;\n adminArea1: string; // State\n adminArea2: string; // City\n postalCode: string;\n countryCode?: string;\n };\n}\n\nexport interface PayPalSDK {\n CardFields: (data: PayPalCommerceCardFieldsConfig) => Promise<PayPalCommerceCardFields>;\n Googlepay: () => {\n config: () => Promise<GooglePayConfig>;\n confirmOrder: (arg0: {\n orderId: string;\n paymentMethodData: ConfirmOrderData;\n }) => Promise<{ status: string }>;\n initiatePayerAction: () => void;\n };\n FUNDING: PayPalCommerceSDKFunding;\n HostedFields: {\n isEligible(): boolean;\n render(data: PayPalCommerceHostedFieldsRenderOptions): Promise<PayPalCommerceHostedFields>;\n };\n Legal: PayPalLegal & LegalFunding;\n Buttons(options: PayPalCommerceButtonsOptions): PayPalCommerceButtons;\n PaymentFields(options: PayPalCommercePaymentFieldsOptions): PayPalCommercePaymentFields;\n Messages(options: PayPalCommerceMessagesOptions): PayPalCommerceMessages;\n}\n\nexport interface ConfirmOrderData {\n tokenizationData: {\n type: string;\n token: string;\n };\n info: {\n cardNetwork: string;\n cardDetails: string;\n };\n type: string;\n}\n\nexport interface GooglePayConfig {\n allowedPaymentMethods: AllowedPaymentMethods[];\n apiVersion: number;\n apiVersionMinor: number;\n countryCode: string;\n isEligible: boolean;\n merchantInfo: {\n merchantId: string;\n merchantOrigin: string;\n };\n}\n\nexport interface AllowedPaymentMethods {\n type: string;\n parameters: {\n allowedAuthMethods: string[];\n allowedCardNetworks: string[];\n billingAddressRequired: boolean;\n assuranceDetailsRequired: boolean;\n billingAddressParameters: {\n format: string;\n };\n };\n tokenizationSpecification: {\n type: string;\n parameters: {\n gateway: string;\n gatewayMerchantId: string;\n };\n };\n}\n\nexport type PayPalLegal = (params: { fundingSource: string }) => {\n render(container: string): void;\n};\n\nexport interface LegalFunding {\n FUNDING: {\n PAY_UPON_INVOICE: string;\n };\n}\n\nexport interface BirthDate {\n getFullYear(): number;\n getDate(): number;\n getMonth(): number;\n}\n\nexport interface PayPalCommerceScriptParams {\n options: {\n 'client-id'?: string;\n 'merchant-id'?: string;\n 'buyer-country'?: string;\n 'disable-funding'?: FundingType;\n 'enable-funding'?: EnableFundingType;\n currency?: string;\n commit?: boolean;\n intent?: PayPalCommerceIntent;\n components?: ComponentsScriptType;\n locale?: string;\n };\n attributes: {\n 'data-client-token'?: string;\n 'data-client-metadata-id'?: string;\n 'data-partner-attribution-id'?: string;\n 'data-user-id-token'?: string;\n };\n}\n\nexport enum PayPalCommerceIntent {\n AUTHORIZE = 'authorize',\n CAPTURE = 'capture',\n}\n\nexport type ComponentsScriptType = Array<\n | 'buttons'\n | 'funding-eligibility'\n | 'hosted-fields'\n | 'messages'\n | 'payment-fields'\n | 'legal'\n | 'googlepay'\n | 'connect'\n | 'card-fields'\n>;\n\nexport interface PayPalCommerceHostWindow extends Window {\n paypal?: PayPalSDK;\n}\n\n/**\n *\n * PayPal Commerce Initialization Data\n *\n */\nexport interface PayPalCommerceInitializationData {\n attributionId?: string;\n availableAlternativePaymentMethods: FundingType;\n buttonStyle?: PayPalButtonStyleOptions;\n buyerCountry?: string;\n clientId: string;\n clientToken?: string;\n enabledAlternativePaymentMethods: FundingType;\n isDeveloperModeApplicable?: boolean;\n intent?: PayPalCommerceIntent;\n isAcceleratedCheckoutEnabled?: boolean;\n isHostedCheckoutEnabled?: boolean;\n isPayPalCreditAvailable?: boolean;\n isVenmoEnabled?: boolean;\n isGooglePayEnabled?: boolean;\n merchantId?: string;\n orderId?: string;\n shouldRenderFields?: boolean;\n shouldRunAcceleratedCheckout?: boolean;\n paymentButtonStyles?: Record<string, PayPalButtonStyleOptions>;\n paypalBNPLConfiguration?: PayPalBNPLConfigurationItem[];\n isServerSideShippingCallbacksEnabled?: boolean;\n}\n\nexport interface PayPalBNPLConfigurationItem {\n id: string;\n name: string;\n status: boolean;\n styles: Record<string, string>;\n}\n\n/**\n *\n * PayPal Commerce BuyNow\n *\n */\nexport interface PayPalBuyNowInitializeOptions {\n getBuyNowCartRequestBody(): BuyNowCartRequestBody;\n}\n\n/**\n *\n * PayPal Commerce Hosted Fields\n *\n */\nexport interface PayPalCommerceHostedFieldsRenderOptions {\n fields?: {\n number?: PayPalCommerceHostedFieldOption;\n cvv?: PayPalCommerceHostedFieldOption;\n expirationDate?: PayPalCommerceHostedFieldOption;\n };\n paymentsSDK?: boolean;\n styles?: {\n input?: { [key: string]: string };\n '.invalid'?: { [key: string]: string };\n '.valid'?: { [key: string]: string };\n ':focus'?: { [key: string]: string };\n };\n createOrder(): Promise<string>;\n}\n\nexport interface PayPalCommerceHostedFieldOption {\n selector: string;\n placeholder?: string;\n}\n\nexport interface PayPalCommerceHostedFields {\n submit(\n options?: PayPalCommerceHostedFieldsSubmitOptions,\n ): Promise<PayPalCommerceHostedFieldsApprove>;\n getState(): PayPalCommerceHostedFieldsState;\n on(eventName: string, callback: (event: PayPalCommerceHostedFieldsState) => void): void;\n}\n\nexport interface PayPalCommerceHostedFieldsSubmitOptions {\n contingencies?: Array<'3D_SECURE'>;\n cardholderName?: string;\n}\n\nexport interface PayPalCommerceHostedFieldsApprove {\n orderId: string;\n liabilityShift?: 'POSSIBLE' | 'NO' | 'UNKNOWN';\n}\n\nexport interface PayPalCommerceHostedFieldsState {\n cards: PayPalCommerceHostedFieldsCard[];\n emittedBy: string;\n fields: {\n number?: PayPalCommerceHostedFieldsFieldData;\n expirationDate?: PayPalCommerceHostedFieldsFieldData;\n expirationMonth?: PayPalCommerceHostedFieldsFieldData;\n expirationYear?: PayPalCommerceHostedFieldsFieldData;\n cvv?: PayPalCommerceHostedFieldsFieldData;\n postalCode?: PayPalCommerceHostedFieldsFieldData;\n };\n}\n\nexport interface PayPalCommerceHostedFieldsCard {\n type: string;\n niceType: string;\n code: {\n name: string;\n size: number;\n };\n}\n\nexport interface PayPalCommerceHostedFieldsFieldData {\n container: HTMLElement;\n isFocused: boolean;\n isEmpty: boolean;\n isPotentiallyValid: boolean;\n isValid: boolean;\n}\n\n/**\n *\n * PayPal Commerce Buttons\n *\n */\nexport interface PayPalCommerceButtons {\n render(id: string): void;\n close(): void;\n isEligible(): boolean;\n hasReturned?(): boolean;\n resume?(): void;\n}\n\nexport interface PayPalCommerceButtonsOptions {\n experience?: string;\n style?: PayPalButtonStyleOptions;\n fundingSource: string;\n createOrder(): Promise<string>;\n onApprove(\n data: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n ): Promise<boolean | void> | void;\n onInit?(data: InitCallbackPayload, actions: InitCallbackActions): Promise<void>;\n onComplete?(data: CompleteCallbackDataPayload): Promise<void>;\n onClick?(data: ClickCallbackPayload, actions: ClickCallbackActions): Promise<void> | void;\n onError?(error: Error): void;\n onCancel?(): void;\n onShippingAddressChange?(data: ShippingAddressChangeCallbackPayload): Promise<void>;\n onShippingOptionsChange?(data: ShippingOptionChangeCallbackPayload): Promise<void>;\n}\n\nexport interface ShippingOptionChangeCallbackPayload {\n orderId: string;\n selectedShippingOption: PayPalSelectedShippingOption;\n}\n\nexport interface ShippingAddressChangeCallbackPayload {\n orderId: string;\n shippingAddress: PayPalAddress;\n}\n\nexport interface ClickCallbackPayload {\n fundingSource: string;\n}\n\nexport interface ClickCallbackActions {\n reject(): void;\n resolve(): void;\n}\n\nexport interface InitCallbackPayload {\n correlationID: string;\n}\n\nexport interface InitCallbackActions {\n disable(): void;\n enable(): void;\n}\n\nexport interface PayPalAddress {\n city: string;\n countryCode: string;\n postalCode: string;\n state: string;\n}\n\nexport interface PaypalAddressCallbackData {\n city: string;\n country_code: string;\n postal_code: string;\n state: string;\n}\n\nexport interface PayPalSelectedShippingOption {\n amount: {\n currency_code: string;\n value: string;\n };\n id: string;\n label: string;\n selected: boolean;\n type: string;\n}\n\nexport interface ApproveCallbackPayload {\n orderID?: string;\n}\n\nexport interface ApproveCallbackActions {\n order: {\n get: () => Promise<PayPalOrderDetails>;\n };\n}\n\nexport interface PayPalOrderDetails {\n payer: {\n name: {\n given_name: string;\n surname: string;\n };\n email_address: string;\n address: PayPalOrderAddress;\n phone?: {\n phone_number: {\n national_number: string;\n };\n };\n };\n purchase_units: Array<{\n shipping: {\n address: PayPalOrderAddress;\n name: {\n full_name: string;\n };\n };\n }>;\n}\n\nexport interface PayPalOrderAddress {\n address_line_1: string;\n address_line_2: string;\n admin_area_2: string;\n admin_area_1?: string;\n postal_code: string;\n country_code: string;\n}\n\nexport interface CompleteCallbackDataPayload {\n intent: string;\n orderID: string;\n}\n\nexport enum StyleButtonLabel {\n paypal = 'paypal',\n checkout = 'checkout',\n buynow = 'buynow',\n pay = 'pay',\n installment = 'installment',\n}\n\nexport enum StyleButtonColor {\n gold = 'gold',\n blue = 'blue',\n silver = 'silver',\n black = 'black',\n white = 'white',\n}\n\nexport enum StyleButtonShape {\n pill = 'pill',\n rect = 'rect',\n}\n\nexport interface PayPalButtonStyleOptions {\n color?: StyleButtonColor;\n shape?: StyleButtonShape;\n height?: number;\n label?: StyleButtonLabel;\n}\n\n/**\n *\n * PayPal Commerce Payment fields\n *\n */\nexport interface PayPalCommercePaymentFields {\n render(id: string): void;\n}\n\nexport interface PayPalCommercePaymentFieldsOptions {\n style?: PayPalCommerceFieldsStyleOptions;\n fundingSource: string;\n fields: {\n name?: {\n value?: string;\n };\n email?: {\n value?: string;\n };\n };\n}\n\nexport interface PayPalCommerceFieldsStyleOptions {\n variables?: {\n fontFamily?: string;\n fontSizeBase?: string;\n fontSizeSm?: string;\n fontSizeM?: string;\n fontSizeLg?: string;\n textColor?: string;\n colorTextPlaceholder?: string;\n colorBackground?: string;\n colorInfo?: string;\n colorDanger?: string;\n borderRadius?: string;\n borderColor?: string;\n borderWidth?: string;\n borderFocusColor?: string;\n spacingUnit?: string;\n };\n rules?: {\n [key: string]: any;\n };\n}\n\n/**\n *\n * PayPalCommerce Messages\n */\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalCommerceMessages {\n render(id: string): void;\n}\n\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalCommerceMessagesOptions {\n amount: number;\n placement: string;\n style?: PayPalCommerceMessagesStyleOptions;\n fundingSource?: string;\n}\n\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalCommerceMessagesStyleOptions {\n layout?: string;\n}\n\n/**\n *\n * Other\n *\n */\nexport enum NonInstantAlternativePaymentMethods {\n OXXO = 'oxxo',\n IDEAL = 'ideal',\n}\n\nexport interface PayPalOrderData {\n orderId: string;\n setupToken?: string;\n approveUrl: string;\n fastlaneToken?: string;\n}\n\nexport interface PayPalUpdateOrderRequestBody {\n availableShippingOptions?: ShippingOption[];\n cartId: string;\n selectedShippingOption?: ShippingOption | null;\n}\n\nexport interface PayPalUpdateOrderResponse {\n statusCode: number;\n}\n\nexport interface PayPalCreateOrderRequestBody extends HostedInstrument, VaultedInstrument {\n cartId: string;\n metadataId?: string;\n setupToken?: boolean;\n fastlaneToken?: string;\n}\n\nexport enum PayPalOrderStatus {\n Approved = 'APPROVED',\n Created = 'CREATED',\n PayerActionRequired = 'PAYER_ACTION_REQUIRED',\n PollingStop = 'POLLING_STOP',\n PollingError = 'POLLING_ERROR',\n}\n\nexport interface PayPalOrderStatusData {\n status: PayPalOrderStatus;\n}\n\nexport interface PayPalCreateOrderCardFieldsResponse {\n orderId: string;\n setupToken?: string;\n}\n","import { noop } from 'lodash';\n\nimport {\n InvalidArgumentError,\n OrderFinalizationNotRequiredError,\n OrderRequestBody,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethodClientUnavailableError,\n PaymentMethodInvalidError,\n PaymentRequestOptions,\n PaymentStrategy,\n TimeoutError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n PayPalApmSdk,\n PayPalInitializationData,\n PayPalIntegrationService,\n PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport {\n ApproveCallbackPayload,\n NonInstantAlternativePaymentMethods,\n PayPalCommerceButtons,\n PayPalCommerceButtonsOptions,\n PayPalCommerceInitializationData,\n PayPalOrderStatus,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceAlternativeMethodsPaymentOptions, {\n WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions,\n} from './paypal-commerce-alternative-methods-payment-initialize-options';\n\nconst POLLING_INTERVAL = 3000;\nconst MAX_POLLING_TIME = 300000;\n\nexport default class PayPalCommerceAlternativeMethodsPaymentStrategy implements PaymentStrategy {\n private loadingIndicatorContainer?: string;\n private orderId?: string;\n private paypalButton?: PayPalCommerceButtons;\n private paypalApms?: PayPalApmSdk;\n private pollingTimer = 0;\n private stopPolling = noop;\n private isOrderApprovedProcessing = false;\n private paypalcommercealternativemethods?: PayPalCommerceAlternativeMethodsPaymentOptions;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceIntegrationService: PayPalIntegrationService,\n private paypalSdkScriptLoader: PayPalSdkScriptLoader,\n private loadingIndicator: LoadingIndicator,\n private pollingInterval: number = POLLING_INTERVAL,\n private maxPollingIntervalTime: number = MAX_POLLING_TIME,\n ) {}\n\n async initialize(\n options: PaymentInitializeOptions &\n WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions,\n ): Promise<void> {\n const {\n gatewayId,\n methodId,\n paypalcommerce, // FIXME: this option is deprecated\n paypalcommercealternativemethods,\n } = options;\n const paypalOptions = paypalcommercealternativemethods || paypalcommerce;\n\n this.paypalcommercealternativemethods = paypalcommercealternativemethods;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!gatewayId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.gatewayId\" argument is not provided.',\n );\n }\n\n if (!paypalOptions) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercealternativemethods\" argument is not provided.`,\n );\n }\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(\n methodId,\n gatewayId,\n );\n const { orderId, shouldRenderFields } = paymentMethod.initializationData || {};\n const features = state.getStoreConfigOrThrow().checkoutSettings.features;\n\n this.isOrderApprovedProcessing = isExperimentEnabled(\n features,\n 'PAYPAL-5431.order_approved_processing',\n false,\n );\n\n // Info:\n // The PayPal button and fields should not be rendered when shopper was redirected to Checkout page\n // after using smart payment button on PDP or Cart page. In this case backend returns order id if\n // it is available in checkout session. Therefore, it is not necessary to render PayPal button.\n if (orderId) {\n this.orderId = orderId;\n\n return;\n }\n\n this.paypalApms = await this.paypalSdkScriptLoader.getPayPalApmsSdk(\n paymentMethod,\n state.getCartOrThrow().currency.code,\n state.getLocale(),\n );\n\n this.loadingIndicatorContainer = paypalOptions.container.split('#')[1];\n\n this.renderButton(methodId, gatewayId, paypalOptions);\n\n if (shouldRenderFields) {\n this.renderFields(methodId, paypalOptions);\n }\n }\n\n async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n const { payment, ...order } = payload;\n\n if (!payment) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n const { methodId, gatewayId } = payment;\n\n if (!this.orderId) {\n throw new PaymentMethodInvalidError();\n }\n\n if (!this.isOrderApprovedProcessing && methodId === 'ideal') {\n await new Promise((resolve, reject) => {\n void this.initializePollingMechanism(methodId, resolve, reject, gatewayId);\n });\n }\n\n if (\n !this.isNonInstantPaymentMethod(methodId) ||\n (methodId === NonInstantAlternativePaymentMethods.IDEAL &&\n !this.isOrderApprovedProcessing)\n ) {\n await this.paymentIntegrationService.submitOrder(order, options);\n }\n\n await this.paypalCommerceIntegrationService.submitPayment(\n methodId,\n this.orderId,\n gatewayId,\n );\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n deinitialize(): Promise<void> {\n this.orderId = undefined;\n\n if (!this.isOrderApprovedProcessing) {\n this.resetPollingMechanism();\n }\n\n this.paypalButton?.close();\n\n return Promise.resolve();\n }\n\n /**\n *\n * Polling mechanism\n *\n *\n * */\n private async initializePollingMechanism(\n methodId: string,\n resolvePromise: (value?: unknown) => void,\n rejectPromise: (value?: unknown) => void,\n gatewayId?: string,\n ): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(resolve, this.pollingInterval);\n\n this.stopPolling = () => {\n clearTimeout(timeout);\n this.toggleLoadingIndicator(false);\n\n return reject();\n };\n });\n\n try {\n this.pollingTimer += this.pollingInterval;\n\n const orderStatus = await this.paypalCommerceIntegrationService.getOrderStatus(\n gatewayId ?? 'paypalcommerce',\n );\n\n const isOrderApproved = orderStatus === PayPalOrderStatus.Approved;\n const isPollingError = orderStatus === PayPalOrderStatus.PollingError;\n\n if (isOrderApproved) {\n this.deinitializePollingMechanism();\n\n return resolvePromise();\n }\n\n if (isPollingError) {\n return rejectPromise();\n }\n\n if (!isOrderApproved && this.pollingTimer < this.maxPollingIntervalTime) {\n return await this.initializePollingMechanism(\n methodId,\n resolvePromise,\n rejectPromise,\n gatewayId,\n );\n }\n\n await this.reinitializeStrategy({\n methodId,\n gatewayId,\n paypalcommercealternativemethods: this.paypalcommercealternativemethods,\n });\n\n this.handleError(new TimeoutError());\n } catch (error) {\n rejectPromise();\n }\n }\n\n private deinitializePollingMechanism(): void {\n this.stopPolling();\n this.pollingTimer = 0;\n }\n\n private resetPollingMechanism(): void {\n this.deinitializePollingMechanism();\n }\n\n private async reinitializeStrategy(\n options: PaymentInitializeOptions &\n WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions,\n ) {\n await this.deinitialize();\n await this.initialize(options);\n }\n\n private handleError(error: unknown) {\n const { onError } = this.paypalcommercealternativemethods || {};\n\n if (!this.isOrderApprovedProcessing) {\n this.resetPollingMechanism();\n }\n\n this.toggleLoadingIndicator(false);\n\n if (onError && typeof onError === 'function') {\n onError(error);\n }\n }\n\n /**\n *\n * Button methods/callbacks\n *\n * */\n private renderButton(\n methodId: string,\n gatewayId: string,\n paypalOptions: PayPalCommerceAlternativeMethodsPaymentOptions,\n ): void {\n const paypalAmpsSdk = this.getPaypalAmpsSdkOrThrow();\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalCommerceInitializationData>(\n methodId,\n gatewayId,\n );\n const { buttonStyle } = paymentMethod.initializationData || {};\n\n const { container, onError, onRenderButton, submitForm } = paypalOptions;\n\n const buttonOptions: PayPalCommerceButtonsOptions = {\n fundingSource: methodId,\n style: this.paypalCommerceIntegrationService.getValidButtonStyle(buttonStyle),\n onInit: (_, actions) => paypalOptions.onInitButton(actions),\n createOrder: () => this.onCreateOrder(methodId, gatewayId, paypalOptions),\n onApprove: (data) => this.handleApprove(data, submitForm),\n onCancel: () => {\n this.toggleLoadingIndicator(false);\n this.deinitializePollingMechanism();\n },\n onError: (error) => {\n this.deinitializePollingMechanism();\n this.handleFailure(error, onError);\n },\n onClick: async (_, actions) =>\n paypalOptions.onValidate(actions.resolve, actions.reject),\n };\n\n this.paypalButton = paypalAmpsSdk.Buttons(buttonOptions);\n\n if (!this.paypalButton.isEligible()) {\n return;\n }\n\n if (onRenderButton && typeof onRenderButton === 'function') {\n onRenderButton();\n }\n\n this.paypalButton.render(container);\n }\n\n private async onCreateOrder(\n methodId: string,\n gatewayId: string,\n paypalOptions: PayPalCommerceAlternativeMethodsPaymentOptions,\n ): Promise<string> {\n const { onValidate } = paypalOptions;\n\n const onValidationPassed = () => {\n this.toggleLoadingIndicator(true);\n\n return () => Promise.resolve();\n };\n\n await onValidate(onValidationPassed, noop);\n\n const orderId = await this.paypalCommerceIntegrationService.createOrder(\n 'paypalcommercealternativemethodscheckout',\n );\n\n if (\n this.isNonInstantPaymentMethod(methodId) &&\n ((methodId === NonInstantAlternativePaymentMethods.IDEAL &&\n this.isOrderApprovedProcessing) ||\n methodId === NonInstantAlternativePaymentMethods.OXXO)\n ) {\n const order = { useStoreCredit: false };\n const options = {\n params: {\n methodId,\n gatewayId,\n },\n };\n\n await this.paymentIntegrationService.submitOrder(order, options);\n\n if (methodId === NonInstantAlternativePaymentMethods.IDEAL) {\n const state = this.paymentIntegrationService.getState();\n const bcOrderId = state.getOrder()?.orderId;\n\n await this.paypalCommerceIntegrationService.updateOrder(\n 'paypalcommercealternativemethods',\n methodId,\n bcOrderId,\n );\n }\n\n await this.paypalCommerceIntegrationService.submitPayment(methodId, orderId, gatewayId);\n }\n\n return orderId;\n }\n\n private handleApprove(\n { orderID }: ApproveCallbackPayload,\n submitForm: PayPalCommerceAlternativeMethodsPaymentOptions['submitForm'],\n ): void {\n this.orderId = orderID;\n\n submitForm();\n }\n\n private handleFailure(\n error: Error,\n onError: PayPalCommerceAlternativeMethodsPaymentOptions['onError'],\n ): void {\n this.toggleLoadingIndicator(false);\n\n if (onError && typeof onError === 'function') {\n onError(error);\n }\n }\n\n /**\n *\n * Fields methods\n *\n * */\n private renderFields(\n methodId: string,\n paypalOptions: PayPalCommerceAlternativeMethodsPaymentOptions,\n ): void {\n const paypalAmpsSdk = this.getPaypalAmpsSdkOrThrow();\n const state = this.paymentIntegrationService.getState();\n const { firstName, lastName, email } = state.getBillingAddressOrThrow();\n\n const { apmFieldsContainer, apmFieldsStyles } = paypalOptions;\n\n if (!apmFieldsContainer) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercealternativemethods\" argument should contain \"apmFieldsContainer\".',\n );\n }\n\n const fieldContainerElement = document.querySelector(apmFieldsContainer);\n\n if (fieldContainerElement) {\n fieldContainerElement.innerHTML = '';\n }\n\n const fieldsOptions = {\n fundingSource: methodId,\n style: apmFieldsStyles || {},\n fields: {\n name: {\n value: `${firstName} ${lastName}`,\n },\n email: {\n value: email,\n },\n },\n };\n\n const paypalPaymentFields = paypalAmpsSdk.PaymentFields(fieldsOptions);\n\n paypalPaymentFields.render(apmFieldsContainer);\n }\n\n /**\n *\n * Loading Indicator methods\n *\n * */\n private toggleLoadingIndicator(isLoading: boolean): void {\n if (isLoading && this.loadingIndicatorContainer) {\n this.loadingIndicator.show(this.loadingIndicatorContainer);\n } else {\n this.loadingIndicator.hide();\n }\n }\n\n /**\n *\n * Utils\n *\n * */\n private isNonInstantPaymentMethod(methodId: string): boolean {\n return methodId.toUpperCase() in NonInstantAlternativePaymentMethods;\n }\n\n private getPaypalAmpsSdkOrThrow() {\n if (!this.paypalApms) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.paypalApms;\n }\n}\n","export interface Features {\n [featureName: string]: boolean | undefined;\n}\n\nexport default function isExperimentEnabled(\n features: Features,\n experimentName: string,\n fallbackValue = true,\n): boolean {\n return features[experimentName] ?? fallbackValue;\n}\n","import {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalIntegrationService,\n createPayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { LOADING_INDICATOR_STYLES } from '../paypal-commerce-constants';\n\nimport PayPalCommerceAlternativeMethodsPaymentStrategy from './paypal-commerce-alternative-methods-payment-strategy';\n\nconst createPayPalCommerceAlternativeMethodsPaymentStrategy: PaymentStrategyFactory<\n PayPalCommerceAlternativeMethodsPaymentStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceAlternativeMethodsPaymentStrategy(\n paymentIntegrationService,\n createPayPalIntegrationService(paymentIntegrationService),\n createPayPalSdkScriptLoader(),\n new LoadingIndicator({\n containerStyles: LOADING_INDICATOR_STYLES,\n }),\n );\n\nexport default toResolvableModule(createPayPalCommerceAlternativeMethodsPaymentStrategy, [\n { gateway: 'paypalcommercealternativemethods' },\n]);\n","import { HostedInstrument, NonceInstrument } from './payment';\n\ntype PaymentInstrument = CardInstrument | AccountInstrument | HostedInstrument | NonceInstrument;\n\nexport default PaymentInstrument;\n\nexport interface BaseInstrument {\n bigpayToken: string;\n defaultInstrument: boolean;\n provider: string;\n trustedShippingAddress: boolean;\n method: string;\n type: string;\n}\n\nexport enum UntrustedShippingCardVerificationType {\n CVV = 'cvv',\n PAN = 'pan',\n}\n\nexport interface CardInstrument extends BaseInstrument {\n brand: string;\n expiryMonth: string;\n expiryYear: string;\n iin: string;\n last4: string;\n type: 'card';\n untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType;\n}\n\ninterface BaseAccountInstrument extends BaseInstrument {\n method: string;\n type: 'account' | 'bank';\n}\n\nexport interface PayPalInstrument extends BaseAccountInstrument {\n externalId: string;\n method: 'paypal';\n}\n\nexport interface AchInstrument extends BaseAccountInstrument {\n issuer: string;\n accountNumber: string;\n type: 'bank';\n method: 'ach' | 'ecp';\n}\n\nexport interface BankInstrument extends BaseAccountInstrument {\n accountNumber: string;\n issuer: string;\n iban: string;\n method: string;\n type: 'bank';\n}\n\nexport type AccountInstrument = PayPalInstrument | BankInstrument | AchInstrument;\n\nexport interface VaultAccessToken {\n vaultAccessToken: string;\n vaultAccessExpiry: number;\n}\n\nexport interface SessionContext {\n customerId: number;\n storeId: string;\n currencyCode?: string;\n}\n\nexport interface InstrumentRequestContext extends SessionContext {\n authToken: string;\n}\n","interface CookieOptions {\n expires?: Date;\n path?: string;\n domain?: string;\n secure?: boolean;\n}\n\nexport default class CookieStorage {\n static get(name: string): string | null {\n const cookieKey = `${encodeURIComponent(`${name}`)}=`;\n const cookie = document.cookie;\n\n let value = null;\n\n const firstIndex = cookie.indexOf(cookieKey);\n\n if (firstIndex > -1) {\n let lastIndex = cookie.indexOf(';', firstIndex);\n\n if (lastIndex === -1) {\n lastIndex = cookie.length;\n }\n\n value = decodeURIComponent(cookie.substring(firstIndex + cookieKey.length, lastIndex));\n }\n\n return value;\n }\n\n static set(name: string, value: string, options: CookieOptions = { secure: true }) {\n let cookieText = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n\n const { expires, path, domain, secure } = options;\n\n if (expires) {\n cookieText += `; expires=${expires.toUTCString()}`;\n } else {\n const now = new Date();\n // info: default cookie expiration time after setup\n const minutes = 60;\n\n now.setTime(now.getTime() + minutes * 60 * 1000);\n\n cookieText += `; expires=${now.toUTCString()}`;\n }\n\n if (path) {\n cookieText += `; path=${path}`;\n }\n\n if (domain) {\n cookieText += `; domain=${domain}`;\n }\n\n if (secure) {\n cookieText += '; secure';\n }\n\n document.cookie = cookieText;\n }\n\n static remove(name: string, options?: CookieOptions) {\n CookieStorage.set(name, '', { expires: new Date(0), ...options });\n }\n}\n","// copied from packages/core/src/hosted-form/hosted-field-type.ts\n\nenum HostedFieldType {\n CardCode = 'cardCode',\n CardCodeVerification = 'cardCodeVerification',\n CardExpiry = 'cardExpiry',\n CardName = 'cardName',\n CardNumber = 'cardNumber',\n CardNumberVerification = 'cardNumberVerification',\n CardExpiryVerification = 'cardExpiryVerification',\n}\n\nexport default HostedFieldType;\n","import { isEqual, omit } from 'lodash';\n\nimport {\n Address,\n CardInstrument,\n CustomerAddress,\n PaymentMethodClientUnavailableError,\n UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { CookieStorage } from '@bigcommerce/checkout-sdk/storage';\n\nimport {\n PayPalFastlane,\n PayPalFastlaneAddress,\n PayPalFastlaneAuthenticationResult,\n PayPalFastlaneAuthenticationState,\n PayPalFastlaneLookupCustomerByEmailResult,\n PayPalFastlaneProfileCard,\n PayPalFastlaneProfileName,\n PayPalFastlaneProfilePhone,\n PayPalFastlaneProfileToBcCustomerDataMappingResult,\n PayPalFastlaneSdk,\n PayPalFastlaneStylesOption,\n PayPalHostWindow,\n} from './paypal-types';\n\nexport default class PaypalFastlaneUtils {\n private window: PayPalHostWindow;\n\n constructor() {\n this.window = window;\n }\n\n async initializePayPalFastlane(\n paypalFastlaneSdk: PayPalFastlaneSdk,\n isTestModeEnabled: boolean,\n styles?: PayPalFastlaneStylesOption,\n ): Promise<PayPalFastlane> {\n if (isTestModeEnabled) {\n window.localStorage.setItem('fastlaneEnv', 'sandbox');\n window.localStorage.setItem('axoEnv', 'sandbox'); // TODO: remove if this key does not use on PayPal side\n }\n\n if (!this.window.paypalFastlane) {\n const defaultStyles = {\n root: {\n backgroundColorPrimary: 'transparent',\n },\n };\n\n this.window.paypalFastlane = await paypalFastlaneSdk.Fastlane({\n styles: styles || defaultStyles,\n });\n }\n\n return this.window.paypalFastlane;\n }\n\n getPayPalFastlaneOrThrow(): PayPalFastlane {\n if (!this.window.paypalFastlane) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.window.paypalFastlane;\n }\n\n /**\n *\n * Detects the customer to PayPal Fastlane relation and\n * returns customerContextId to use it for authentication\n *\n */\n async lookupCustomerOrThrow(email: string): Promise<PayPalFastlaneLookupCustomerByEmailResult> {\n const paypalFastlane = this.getPayPalFastlaneOrThrow();\n\n return paypalFastlane.identity.lookupCustomerByEmail(email);\n }\n\n /**\n *\n * Triggers authentication flow (shows OTP popup) if the customer recognised as PayPal Fastlane user\n * and returns PayPal Fastlane Profile data to use it in BC checkout\n *\n */\n async triggerAuthenticationFlowOrThrow(\n customerContextId?: string,\n ): Promise<PayPalFastlaneAuthenticationResult> {\n if (!customerContextId) {\n return {};\n }\n\n const paypalFastlane = this.getPayPalFastlaneOrThrow();\n\n return paypalFastlane.identity.triggerAuthenticationFlow(customerContextId);\n }\n\n /**\n *\n * 'updateStorageSessionId' method is used to:\n * - set session id after user was authenticated (or unrecognised) to trigger authentication after page refresh\n *\n * Flow info:\n * If user unrecognised then the lookup method will be working but the OTP will not be shown\n * If user recognised and not canceled then the lookup method will be working and the OTP will be shown only if needed\n * If user cancels the OPT then OTP will not be triggered after page refresh\n *\n */\n updateStorageSessionId(sessionId: string): void {\n const expires = new Date();\n\n expires.setDate(expires.getDate() + 14); // 2 weeks expiry\n\n const cookiesOption = {\n expires,\n secure: true,\n };\n\n CookieStorage.set('bc-fastlane-sessionId', sessionId, cookiesOption);\n }\n\n removeStorageSessionId(): void {\n CookieStorage.remove('bc-fastlane-sessionId');\n }\n\n getStorageSessionId(): string {\n return CookieStorage.get('bc-fastlane-sessionId') || '';\n }\n\n /**\n *\n * 'mapPayPalFastlaneProfileToBcCustomerData' method is responsible for:\n * - mapping PayPal Fastlane Profile data to BC data shape\n * - returning mapped data to use for updating PaymentProviderCustomer state and\n * update shipping and billing addresses\n *\n */\n mapPayPalFastlaneProfileToBcCustomerData(\n methodId: string,\n authenticationResult: PayPalFastlaneAuthenticationResult,\n ): PayPalFastlaneProfileToBcCustomerDataMappingResult {\n const { authenticationState, profileData } = authenticationResult;\n\n const paypalBillingAddress = profileData?.card?.paymentSource?.card?.billingAddress;\n const paypalShippingAddress = profileData?.shippingAddress;\n const paypalProfileName = profileData?.name;\n const paypalInstrument = profileData?.card;\n\n const shippingAddress = paypalShippingAddress\n ? this.mapPayPalToBcAddress(\n paypalShippingAddress.address,\n paypalShippingAddress.name,\n paypalShippingAddress.phoneNumber,\n )\n : undefined;\n const billingAddress =\n paypalBillingAddress && paypalProfileName\n ? this.mapPayPalToBcAddress(\n paypalBillingAddress,\n paypalProfileName,\n paypalShippingAddress?.phoneNumber,\n )\n : undefined;\n const instruments = paypalInstrument\n ? this.mapPayPalToBcInstrument(methodId, paypalInstrument)\n : [];\n\n const addresses = this.filterAddresses([shippingAddress, billingAddress]);\n\n return {\n authenticationState:\n authenticationState || PayPalFastlaneAuthenticationState.UNRECOGNIZED,\n addresses,\n billingAddress,\n shippingAddress,\n instruments,\n };\n }\n\n mapPayPalToBcInstrument(\n methodId: string,\n instrument: PayPalFastlaneProfileCard,\n ): CardInstrument[] {\n const { id, paymentSource } = instrument;\n const { brand, expiry, lastDigits } = paymentSource.card;\n\n const [expiryYear, expiryMonth] = expiry.split('-');\n\n return [\n {\n bigpayToken: id,\n brand,\n defaultInstrument: false,\n expiryMonth,\n expiryYear,\n iin: '',\n last4: lastDigits,\n method: methodId,\n provider: methodId,\n trustedShippingAddress: false,\n untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n type: 'card',\n },\n ];\n }\n\n mapBcToPayPalAddress(address?: Address): PayPalFastlaneAddress {\n return {\n company: address?.company || '',\n addressLine1: address?.address1 || '',\n addressLine2: address?.address2 || '',\n adminArea1: address?.stateOrProvinceCode || address?.stateOrProvince || '',\n adminArea2: address?.city || '',\n postalCode: address?.postalCode || '',\n countryCode: address?.countryCode || '',\n };\n }\n\n mapPayPalToBcAddress(\n address: PayPalFastlaneAddress,\n profileName: PayPalFastlaneProfileName,\n phone?: PayPalFastlaneProfilePhone,\n customFields?: CustomerAddress['customFields'],\n ): CustomerAddress {\n const [firstName, lastName] = profileName.fullName.split(' ');\n\n const phoneData = {\n nationalNumber: phone?.nationalNumber || '',\n countryCode: phone?.countryCode || '',\n };\n\n return {\n id: Date.now(),\n type: 'paypal-address',\n firstName: profileName.firstName || firstName || '',\n lastName: profileName.lastName || lastName || '',\n company: address.company || '',\n address1: address.addressLine1,\n address2: address.addressLine2 || '',\n city: address.adminArea2,\n stateOrProvince: address.adminArea1,\n stateOrProvinceCode: address.adminArea1,\n country: address.countryCode || '', // TODO: update country with valid naming\n countryCode: address.countryCode || '',\n postalCode: address.postalCode,\n phone: phoneData.countryCode + phoneData.nationalNumber,\n customFields: customFields || [],\n };\n }\n\n /**\n *\n * This method is responsible for filtering PayPal Fastlane addresses if they are the same\n * and returns an array of addresses to use them for shipping and/or billing address selections\n * so the customer will be able to use addresses from PayPal Fastlane in checkout flow\n *\n */\n filterAddresses(addresses: Array<CustomerAddress | undefined>): CustomerAddress[] {\n return addresses.reduce(\n (customerAddresses: CustomerAddress[], currentAddress: CustomerAddress | undefined) => {\n if (!currentAddress) {\n return customerAddresses;\n }\n\n const sameAddressInTheArray = customerAddresses.some((customerAddress) =>\n this.isEqualAddresses(customerAddress, currentAddress),\n );\n\n return sameAddressInTheArray\n ? customerAddresses\n : [...customerAddresses, currentAddress];\n },\n [],\n );\n }\n\n private isEqualAddresses(\n firstAddress: CustomerAddress,\n secondAddress: CustomerAddress,\n ): boolean {\n return isEqual(this.normalizeAddress(firstAddress), this.normalizeAddress(secondAddress));\n }\n\n private normalizeAddress(address: CustomerAddress) {\n return omit(address, ['id', 'phone']);\n }\n}\n","import PaypalFastlaneUtils from './paypal-fastlane-utils';\n\nexport default function createPaypalFastlaneUtils(): PaypalFastlaneUtils {\n return new PaypalFastlaneUtils();\n}\n","import HostedFieldType from './hosted-field-type';\nimport { HostedCardFieldOptionsMap, HostedStoredCardFieldOptionsMap } from './hosted-form-options';\n\nexport default function isCreditCardFormFields(\n fields: HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap,\n): fields is HostedCardFieldOptionsMap {\n return (\n HostedFieldType.CardNumber in fields &&\n HostedFieldType.CardName in fields &&\n HostedFieldType.CardExpiry in fields\n );\n}\n","import HostedFieldType from './hosted-field-type';\nimport { HostedCardFieldOptionsMap, HostedStoredCardFieldOptionsMap } from './hosted-form-options';\n\nexport default function isCreditCardVaultedFormFields(\n fields: HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap,\n): fields is HostedStoredCardFieldOptionsMap {\n return (\n HostedFieldType.CardNumberVerification in fields &&\n HostedFieldType.CardCodeVerification in fields &&\n HostedFieldType.CardExpiryVerification in fields\n );\n}\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when a payment method experiences some kind of\n * failure (i.e.: its client library returns a rejected promise). And there is\n * no other error type that is more specific than this one.\n */\nexport default class PaymentMethodFailedError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Unable to proceed because the client library of a payment method has thrown an unexpected error.',\n );\n\n this.name = 'PaymentMethodFailedError';\n this.type = 'payment_method_client_invalid';\n }\n}\n","import StandardError from './standard-error';\n\nexport enum NotInitializedErrorType {\n CheckoutButtonNotInitialized,\n CustomerNotInitialized,\n PaymentNotInitialized,\n ShippingNotInitialized,\n SpamProtectionNotInitialized,\n}\n\n/**\n * Throw this error if a method requires a certain initialization call to be\n * made first. Some objects can be constructed but they cannot be used until a\n * separate initialization call is made.\n */\nexport default class NotInitializedError extends StandardError {\n constructor(public subtype: NotInitializedErrorType) {\n super(getErrorMessage(subtype));\n\n this.name = 'NotInitializedError';\n this.type = 'not_initialized';\n }\n}\n\nfunction getErrorMessage(type: NotInitializedErrorType): string {\n switch (type) {\n case NotInitializedErrorType.CustomerNotInitialized:\n return 'Unable to proceed because the customer step of checkout has not been initialized.';\n\n case NotInitializedErrorType.PaymentNotInitialized:\n return 'Unable to proceed because the payment step of checkout has not been initialized.';\n\n case NotInitializedErrorType.ShippingNotInitialized:\n return 'Unable to proceed because the shipping step of checkout has not been initialized.';\n\n case NotInitializedErrorType.SpamProtectionNotInitialized:\n return 'Unable to proceed because the checkout spam protection has not been initialized.';\n\n default:\n return 'Unable to proceed because the required component has not been initialized.';\n }\n}\n","import StandardError from './standard-error';\n\nexport interface PaymentInvalidFormErrorDetails {\n [key: string]: Array<{ message: string; type: string }>;\n}\n\nexport default class PaymentInvalidFormError extends StandardError {\n constructor(public details: PaymentInvalidFormErrorDetails, message?: string) {\n super(message || 'Unable to proceed because the payment form contains invalid data.');\n\n this.name = 'PaymentInvalidFormError';\n this.type = 'payment_invalid_form';\n }\n}\n","import { isNil, omitBy } from 'lodash';\n\nimport {\n HostedCardFieldOptions,\n HostedCardFieldOptionsMap,\n HostedFieldBlurEventData,\n HostedFieldEnterEventData,\n HostedFieldFocusEventData,\n HostedFieldStylesMap,\n HostedFieldType,\n HostedFieldValidateEventData,\n HostedFormOptions,\n HostedInputValidateErrorData,\n HostedInputValidateErrorDataMap,\n HostedInstrument,\n HostedStoredCardFieldOptionsMap,\n InvalidArgumentError,\n isCreditCardFormFields,\n isCreditCardVaultedFormFields,\n isHostedInstrumentLike,\n isVaultedInstrument,\n NotInitializedError,\n NotInitializedErrorType,\n OrderFinalizationNotRequiredError,\n OrderPaymentRequestBody,\n OrderRequestBody,\n Payment,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentInvalidFormError,\n PaymentInvalidFormErrorDetails,\n PaymentMethodFailedError,\n PaymentRequestOptions,\n PaymentStrategy,\n VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { isPayPalCommerceAcceleratedCheckoutCustomer } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\nimport {\n PayPalFastlaneUtils,\n PayPalInitializationData,\n PayPalIntegrationService,\n PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport {\n LiabilityShiftEnum,\n PayPalCommerceCardFields,\n PayPalCommerceCardFieldsConfig,\n PayPalCommerceCardFieldsOnApproveData,\n PayPalCommerceCardFieldsState,\n PayPalCommerceFields,\n PayPalCommerceHostedFieldsRenderOptions,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceCreditCardsPaymentInitializeOptions, {\n WithPayPalCommerceCreditCardsPaymentInitializeOptions,\n} from './paypal-commerce-credit-cards-payment-initialize-options';\n\nexport default class PayPalCommerceCreditCardsPaymentStrategy implements PaymentStrategy {\n private executionPaymentData?: OrderPaymentRequestBody['paymentData'];\n private isCreditCardForm?: boolean;\n private isCreditCardVaultedForm?: boolean;\n\n private cardFields?: PayPalCommerceCardFields;\n private cvvField?: PayPalCommerceFields;\n private expiryField?: PayPalCommerceFields;\n private numberField?: PayPalCommerceFields;\n private nameField?: PayPalCommerceFields;\n\n private hostedFormOptions?: HostedFormOptions;\n private returnedOrderId?: string;\n private returnedVaultedToken?: string;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalIntegrationService: PayPalIntegrationService,\n private paypalSdkScriptLoader: PayPalSdkScriptLoader,\n private paypalFastlaneUtils: PayPalFastlaneUtils,\n ) {}\n\n async initialize(\n options: PaymentInitializeOptions & WithPayPalCommerceCreditCardsPaymentInitializeOptions,\n ): Promise<void> {\n const { methodId, paypalcommercecreditcards, paypalcommerce } = options;\n const paypalCommerceInitializationOptions = paypalcommercecreditcards || paypalcommerce;\n\n const { form, onCreditCardFieldsRenderingError, onLoadComplete } =\n paypalCommerceInitializationOptions || {};\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!form) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"options.paypalcommercecreditcards.form\" argument is not provided.',\n );\n }\n\n this.hostedFormOptions = form;\n\n this.isCreditCardForm = isCreditCardFormFields(form.fields);\n this.isCreditCardVaultedForm =\n isCreditCardVaultedFormFields(form.fields) && !this.hasUndefinedValues();\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n await this.paypalIntegrationService.loadPayPalSdk(methodId, undefined, true, true);\n\n if (this.isCreditCardForm || this.isCreditCardVaultedForm) {\n await this.initializeFields(form, onCreditCardFieldsRenderingError);\n }\n\n onLoadComplete?.();\n\n if (this.shouldInitializePayPalFastlane(methodId)) {\n await this.initializePayPalFastlaneOrThrow(methodId);\n }\n }\n\n async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n const { payment, ...order } = payload;\n const { methodId, paymentData } = payment || {};\n\n if (!payment || !methodId) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n this.executionPaymentData = paymentData;\n\n if (this.isCreditCardForm || this.isCreditCardVaultedForm) {\n await this.validateHostedFormOrThrow();\n await this.submitHostedForm();\n } else {\n // This condition is triggered when we pay with vaulted instrument and shipping address is truste\n const { orderId } = await this.paypalIntegrationService.createOrderCardFields(\n 'paypalcommercecreditcardscheckout',\n this.getInstrumentParams(),\n );\n\n this.returnedOrderId = orderId;\n }\n\n const submitPaymentPayload = this.preparePaymentPayload(\n methodId,\n paymentData,\n this.returnedOrderId,\n this.returnedVaultedToken,\n );\n\n await this.paymentIntegrationService.submitOrder(order, options);\n await this.paymentIntegrationService.submitPayment(submitPaymentPayload);\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n async deinitialize(): Promise<void> {\n await this.cvvField?.close();\n await this.expiryField?.close();\n await this.numberField?.close();\n await this.nameField?.close();\n\n return Promise.resolve();\n }\n\n /**\n *\n * Submit Payment Payload preparing method\n *\n * `vaultedToken` is used when we pay with vaulted instrument (with trusted shipping address and untrusted)\n * `setupToken` is used when we pay with vaulted instrument (untrusted shipping address)\n * `orderId` is used in every case (basic card payment, trusted shipping address and untrusted)\n */\n private preparePaymentPayload(\n methodId: string,\n paymentData: OrderPaymentRequestBody['paymentData'],\n orderId?: string,\n nonce?: string,\n ): Payment {\n const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n const instrumentId =\n paymentData && isVaultedInstrument(paymentData) ? paymentData.instrumentId : undefined;\n\n const bigpay_token = omitBy(\n {\n verification_nonce: nonce,\n token: instrumentId,\n },\n isNil,\n );\n\n return {\n methodId,\n paymentData: {\n shouldSaveInstrument,\n shouldSetAsDefaultInstrument,\n instrumentId,\n formattedPayload: {\n ...(nonce || instrumentId ? { bigpay_token } : {}),\n ...(orderId ? { card_with_order: { order_id: orderId } } : {}),\n },\n },\n };\n }\n\n /**\n *\n * Card fields initialize\n *\n */\n private async initializeFields(\n formOptions: HostedFormOptions,\n onCreditCardFieldsRenderingError?: PayPalCommerceCreditCardsPaymentInitializeOptions['onCreditCardFieldsRenderingError'],\n ): Promise<void> {\n const { fields, styles } = formOptions;\n\n const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n const executeCallback = this.getExecuteCallback(fields);\n\n const cardFieldsConfig: PayPalCommerceCardFieldsConfig = {\n style: this.getInputStyles(styles),\n onApprove: ({\n orderID,\n vaultSetupToken,\n liabilityShift,\n }: PayPalCommerceCardFieldsOnApproveData) => {\n if (\n liabilityShift === LiabilityShiftEnum.No ||\n liabilityShift === LiabilityShiftEnum.Unknown\n ) {\n throw new Error();\n }\n\n return this.handleApprove({ orderID, vaultSetupToken });\n },\n onError: () => {\n throw new PaymentMethodFailedError();\n },\n inputEvents: {\n onChange: (event) => this.onChangeHandler(formOptions, event),\n onFocus: (event) => this.onFocusHandler(formOptions, event),\n onBlur: (event) => this.onBlurHandler(formOptions, event),\n onInputSubmitRequest: (event) => this.onInputSubmitRequest(formOptions, event),\n },\n ...executeCallback,\n };\n\n this.cardFields = await paypalSdk.CardFields(cardFieldsConfig);\n\n if (!this.cardFields.isEligible()) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n try {\n this.stylizeInputContainers(fields);\n\n if (isCreditCardFormFields(fields)) {\n await this.renderFields(fields);\n }\n\n if (isCreditCardVaultedFormFields(fields)) {\n await this.renderVaultedFields(fields);\n }\n } catch (error: unknown) {\n if (typeof onCreditCardFieldsRenderingError === 'function') {\n onCreditCardFieldsRenderingError(error);\n }\n }\n }\n\n /**\n *\n * Get execute callback method\n * Depends on shipping address is trusted or not we should pass to PP\n * `createVaultSetupToken` callback if address is untrusted or\n * `createOrder` if address is trusted\n *\n */\n private getExecuteCallback(\n fields: HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap,\n ) {\n const isVaultedForm = isCreditCardVaultedFormFields(fields);\n\n return isVaultedForm ? this.createVaultSetupTokenCallback() : this.createOrderCallback();\n }\n\n private createVaultSetupTokenCallback() {\n return {\n createVaultSetupToken: async () => {\n const { setupToken } =\n (await this.paypalIntegrationService.createOrderCardFields(\n 'paypalcommercecreditcardscheckout',\n {\n ...this.getInstrumentParams(),\n setupToken: true,\n },\n )) || {};\n\n return setupToken;\n },\n };\n }\n\n private createOrderCallback() {\n return {\n createOrder: async () => {\n const { orderId } =\n (await this.paypalIntegrationService.createOrderCardFields(\n 'paypalcommercecreditcardscheckout',\n this.getInstrumentParams(),\n )) || {};\n\n return orderId;\n },\n };\n }\n\n /**\n *\n * onApprove method\n * When submitting a form with a `submitHostedForm` method if there is no error\n * then onApprove callback is triggered and depends on the flow\n * we will receive an `orderID` if it's basic paying and `vaultSetupToken` if we are paying\n * with vaulted instrument and shipping address is untrusted\n *\n */\n private handleApprove({ orderID, vaultSetupToken }: PayPalCommerceCardFieldsOnApproveData) {\n if (orderID) {\n this.returnedOrderId = orderID;\n }\n\n if (vaultSetupToken) {\n this.returnedVaultedToken = vaultSetupToken;\n }\n }\n\n /**\n *\n * Rendering Card Fields methods\n *\n */\n private async renderFields(fieldsOptions: HostedCardFieldOptionsMap) {\n const cardFields = this.getCardFieldsOrThrow();\n\n if (fieldsOptions.cardCode?.containerId) {\n this.cvvField = cardFields.CVVField({\n placeholder: '',\n });\n await this.cvvField.render(`#${fieldsOptions.cardCode.containerId}`);\n }\n\n if (fieldsOptions.cardExpiry?.containerId) {\n this.expiryField = cardFields.ExpiryField();\n await this.expiryField.render(`#${fieldsOptions.cardExpiry.containerId}`);\n }\n\n if (fieldsOptions.cardName?.containerId) {\n this.nameField = cardFields.NameField({\n placeholder: '',\n });\n await this.nameField.render(`#${fieldsOptions.cardName.containerId}`);\n }\n\n if (fieldsOptions.cardNumber?.containerId) {\n this.numberField = cardFields.NumberField({\n placeholder: '',\n });\n await this.numberField.render(`#${fieldsOptions.cardNumber.containerId}`);\n }\n }\n\n private async renderVaultedFields(fieldsOptions: HostedStoredCardFieldOptionsMap) {\n const cardFields = this.getCardFieldsOrThrow();\n\n if (fieldsOptions.cardCodeVerification?.containerId) {\n this.cvvField = cardFields.CVVField({\n placeholder: '',\n });\n await this.cvvField.render(`#${fieldsOptions.cardCodeVerification.containerId}`);\n }\n\n if (fieldsOptions.cardExpiryVerification?.containerId) {\n this.expiryField = cardFields.ExpiryField();\n await this.expiryField.render(`#${fieldsOptions.cardExpiryVerification.containerId}`);\n }\n\n if (fieldsOptions.cardNumberVerification?.containerId) {\n this.numberField = cardFields.NumberField({\n placeholder: '',\n });\n await this.numberField.render(`#${fieldsOptions.cardNumberVerification.containerId}`);\n }\n }\n\n /**\n *\n * Instrument params method\n *\n */\n private getInstrumentParams(): HostedInstrument | VaultedInstrument {\n if (!this.executionPaymentData) {\n return {};\n }\n\n if (isHostedInstrumentLike(this.executionPaymentData)) {\n const { shouldSaveInstrument, shouldSetAsDefaultInstrument } =\n this.executionPaymentData;\n\n return {\n shouldSaveInstrument,\n shouldSetAsDefaultInstrument,\n };\n }\n\n if (isVaultedInstrument(this.executionPaymentData)) {\n const { instrumentId } = this.executionPaymentData;\n\n return {\n instrumentId,\n };\n }\n\n return {};\n }\n\n private getFieldTypeByEmittedField({\n emittedBy,\n }: PayPalCommerceCardFieldsState):\n | HostedFieldBlurEventData\n | HostedFieldEnterEventData\n | HostedFieldFocusEventData {\n return {\n fieldType: this.mapFieldType(emittedBy),\n };\n }\n\n /**\n *\n * Form submit method\n * Triggers a form submit\n * */\n private async submitHostedForm() {\n const cardFields = this.getCardFieldsOrThrow();\n const state = this.paymentIntegrationService.getState();\n const billingAddress = state.getBillingAddressOrThrow();\n\n const submitConfig = {\n billingAddress: {\n company: billingAddress.company,\n addressLine1: billingAddress.address1,\n addressLine2: billingAddress.address2,\n adminArea1: billingAddress.stateOrProvinceCode,\n adminArea2: billingAddress.city,\n postalCode: billingAddress.postalCode,\n countryCode: billingAddress.countryCode,\n },\n };\n\n try {\n if (this.isCreditCardVaultedForm) {\n await cardFields.submit();\n } else {\n await cardFields.submit(submitConfig);\n }\n } catch (_) {\n throw new PaymentMethodFailedError(\n 'Failed authentication. Please try to authorize again.',\n );\n }\n }\n\n /**\n *\n * Validation and errors\n *\n */\n private async validateHostedFormOrThrow() {\n const cardFields = this.getCardFieldsOrThrow();\n const cardFieldsState = await cardFields.getState().then((data) => data);\n const validationData = this.getValidityData(cardFieldsState);\n\n if (validationData.isValid) {\n return;\n }\n\n this.hostedFormOptions?.onValidate?.(validationData);\n\n throw new PaymentInvalidFormError(this.mapValidationErrors(validationData.errors));\n }\n\n private getValidityData({\n fields,\n }: PayPalCommerceCardFieldsState): HostedFieldValidateEventData {\n const updatedFields = { ...fields };\n\n delete updatedFields.cardNameField;\n\n const fieldsKeys = Object.keys(updatedFields) as Array<\n keyof PayPalCommerceCardFieldsState['fields']\n >;\n\n const isValid = fieldsKeys.every((key) => updatedFields[key]?.isValid);\n\n const errors = fieldsKeys.reduce((fieldsErrors, key) => {\n const fieldType = this.mapFieldType(key);\n\n return {\n ...fieldsErrors,\n [fieldType]: updatedFields[key]?.isValid\n ? undefined\n : [this.getInvalidErrorByFieldType(fieldType)],\n };\n }, {});\n\n return { isValid, errors };\n }\n\n private getInvalidErrorByFieldType(fieldType: string): HostedInputValidateErrorData {\n switch (fieldType) {\n case HostedFieldType.CardCode:\n case HostedFieldType.CardCodeVerification:\n return {\n fieldType,\n message: 'Invalid card code',\n type: 'invalid_card_code',\n };\n\n case HostedFieldType.CardNumber:\n case HostedFieldType.CardNumberVerification:\n return {\n fieldType,\n message: 'Invalid card number',\n type: 'invalid_card_number',\n };\n\n case HostedFieldType.CardExpiry:\n case HostedFieldType.CardExpiryVerification:\n return {\n fieldType,\n message: 'Invalid card expiry',\n type: 'invalid_card_expiry',\n };\n\n default:\n return {\n fieldType,\n message: 'Invalid field',\n type: 'invalid',\n };\n }\n }\n\n private mapValidationErrors(\n validationErrors: HostedInputValidateErrorDataMap = {},\n ): PaymentInvalidFormErrorDetails {\n const errors: PaymentInvalidFormErrorDetails = {};\n const validationErrorsKeys = Object.keys(validationErrors) as Array<\n keyof HostedInputValidateErrorDataMap\n >;\n\n validationErrorsKeys.forEach((key) => {\n errors[key] = [\n {\n message: validationErrors[key]?.[0]?.message || '',\n type: key,\n },\n ];\n });\n\n return errors;\n }\n\n /**\n *\n * Fields mappers\n *\n */\n private mapFieldType(type: string): HostedFieldType {\n switch (type) {\n case 'name':\n return HostedFieldType.CardName;\n\n case 'cardNumberField':\n case 'number':\n return this.isCreditCardForm\n ? HostedFieldType.CardNumber\n : HostedFieldType.CardNumberVerification;\n\n case 'cardExpiryField':\n case 'expiry':\n return this.isCreditCardForm\n ? HostedFieldType.CardExpiry\n : HostedFieldType.CardExpiryVerification;\n\n case 'cardCvvField':\n case 'cvv':\n return this.isCreditCardForm\n ? HostedFieldType.CardCode\n : HostedFieldType.CardCodeVerification;\n\n default:\n throw new Error('Unexpected field type');\n }\n }\n\n /**\n *\n * Utils\n *\n */\n private getCardFieldsOrThrow(): PayPalCommerceCardFields {\n if (!this.cardFields) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n return this.cardFields;\n }\n\n private getInputStyles(\n styles?: HostedFieldStylesMap,\n ): PayPalCommerceHostedFieldsRenderOptions['styles'] {\n const commonStyles = {\n 'font-size': styles?.default?.fontSize || '1rem',\n 'font-family':\n styles?.default?.fontFamily || 'Montserrat, Arial, Helvetica, sans-serif',\n 'font-weight': styles?.default?.fontWeight || '400',\n outline: 'none',\n padding: '9px 13px',\n };\n\n const defaultStyles = { ...commonStyles, color: '#333333' };\n const errorStyles = { ...commonStyles, color: 'red' };\n\n return {\n input: defaultStyles,\n '.invalid': errorStyles,\n '.valid': defaultStyles,\n ':focus': defaultStyles,\n };\n }\n\n private stylizeInputContainers(\n fields: HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap,\n ): void {\n Object.values(fields || {}).forEach((id: HostedCardFieldOptions) => {\n const element = document.getElementById(`${id?.containerId || ''}`);\n\n if (element) {\n element.style.padding = '0px';\n element.style.boxShadow = 'none';\n element.style.border = 'none';\n element.style.background = 'transparent';\n element.style.marginBottom = '10px';\n element.style.marginLeft = '-5px';\n }\n });\n }\n\n private hasUndefinedValues() {\n if (this.hostedFormOptions) {\n return Object.values(this.hostedFormOptions.fields).some(\n (value) => value === undefined,\n );\n }\n\n return true;\n }\n\n /**\n *\n * Input events methods\n *\n */\n private onChangeHandler(\n formOptions: HostedFormOptions,\n event: PayPalCommerceCardFieldsState,\n ): void {\n formOptions?.onValidate?.(this.getValidityData(event));\n }\n\n private onFocusHandler(\n formOptions: HostedFormOptions,\n event: PayPalCommerceCardFieldsState,\n ): void {\n formOptions?.onFocus?.(this.getFieldTypeByEmittedField(event));\n }\n\n private onBlurHandler(\n formOptions: HostedFormOptions,\n event: PayPalCommerceCardFieldsState,\n ): void {\n formOptions?.onBlur?.(this.getFieldTypeByEmittedField(event));\n }\n\n private onInputSubmitRequest(\n formOptions: HostedFormOptions,\n event: PayPalCommerceCardFieldsState,\n ): void {\n formOptions?.onEnter?.(this.getFieldTypeByEmittedField(event));\n }\n\n /**\n *\n * PayPal Commerce Accelerated checkout related methods\n *\n */\n // TODO: remove this part when PPCP AXO A/B testing will be finished\n private shouldInitializePayPalFastlane(methodId: string) {\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const paymentProviderCustomer = state.getPaymentProviderCustomer();\n const paypalCommercePaymentProviderCustomer = isPayPalCommerceAcceleratedCheckoutCustomer(\n paymentProviderCustomer,\n )\n ? paymentProviderCustomer\n : {};\n\n return (\n paymentMethod?.initializationData?.isAcceleratedCheckoutEnabled &&\n paymentMethod?.initializationData?.isPayPalCommerceAnalyticsV2Enabled &&\n !paypalCommercePaymentProviderCustomer?.authenticationState\n );\n }\n\n // TODO: remove this part when PPCP AXO A/B testing will be finished\n private async initializePayPalFastlaneOrThrow(methodId: string): Promise<void> {\n try {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const { initializationData } = paymentMethod;\n\n if (!initializationData?.connectClientToken) {\n return;\n }\n\n const payPalFastlaneSdk = await this.paypalSdkScriptLoader.getPayPalFastlaneSdk(\n paymentMethod,\n cart.currency.code,\n cart.id,\n state.getLocale(),\n );\n\n await this.paypalFastlaneUtils.initializePayPalFastlane(\n payPalFastlaneSdk,\n !!initializationData?.isDeveloperModeApplicable,\n );\n } catch (_: unknown) {\n // We should avoid throwing any error from this flow to do no brake default flow\n // This flow is optional\n }\n }\n}\n","import {\n PaymentProviderCustomer,\n PayPalConnectCustomer,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function isPayPalCommerceAcceleratedCheckoutCustomer(\n customer?: PaymentProviderCustomer,\n): customer is PayPalConnectCustomer {\n if (!customer) {\n return false;\n }\n\n return (\n 'authenticationState' in customer || 'addresses' in customer || 'instruments' in customer\n );\n}\n","import {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalFastlaneUtils,\n createPayPalIntegrationService,\n createPayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCreditCardsPaymentStrategy from './paypal-commerce-credit-cards-payment-strategy';\n\nconst createPaypalCommerceCreditCardsPaymentStrategy: PaymentStrategyFactory<\n PayPalCommerceCreditCardsPaymentStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceCreditCardsPaymentStrategy(\n paymentIntegrationService,\n createPayPalIntegrationService(paymentIntegrationService),\n createPayPalSdkScriptLoader(),\n createPayPalFastlaneUtils(),\n );\n\nexport default toResolvableModule(createPaypalCommerceCreditCardsPaymentStrategy, [\n { id: 'paypalcommercecreditcards' },\n]);\n","import { noop } from 'lodash';\n\nimport {\n InvalidArgumentError,\n OrderFinalizationNotRequiredError,\n OrderRequestBody,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentRequestOptions,\n PaymentStrategy,\n TimeoutError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n BirthDate,\n PayPalInitializationData,\n PayPalIntegrationService,\n PayPalOrderStatus,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport {\n PaypalCommerceRatePay,\n WithPayPalCommerceRatePayPaymentInitializeOptions,\n} from './paypal-commerce-ratepay-initialize-options';\n\nconst POLLING_INTERVAL = 3000;\nconst MAX_POLLING_TIME = 300000;\n\nexport default class PaypalCommerceRatepayPaymentStrategy implements PaymentStrategy {\n private guid?: string;\n private paypalcommerceratepay?: PaypalCommerceRatePay;\n private loadingIndicatorContainer?: string;\n private pollingTimer = 0;\n private stopPolling = noop;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceService: PayPalIntegrationService,\n private loadingIndicator: LoadingIndicator,\n private pollingInterval: number = POLLING_INTERVAL,\n private maxPollingIntervalTime: number = MAX_POLLING_TIME,\n ) {}\n\n async initialize(\n options: PaymentInitializeOptions & WithPayPalCommerceRatePayPaymentInitializeOptions,\n ): Promise<void> {\n const { gatewayId, methodId, paypalcommerceratepay } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!gatewayId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.gatewayId\" argument is not provided.',\n );\n }\n\n if (!paypalcommerceratepay) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerceratepay\" argument is not provided.`,\n );\n }\n\n const { legalTextContainer, container, loadingContainerId } = paypalcommerceratepay;\n\n if (!container) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.container\" argument is not provided.`,\n );\n }\n\n if (!legalTextContainer) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.legalTextContainer\" argument is not provided.`,\n );\n }\n\n if (!loadingContainerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.loadingContainerId\" argument is not provided.`,\n );\n }\n\n this.loadingIndicatorContainer = loadingContainerId;\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(\n methodId,\n gatewayId,\n );\n const { merchantId } = paymentMethod.initializationData || {};\n\n if (!merchantId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because merchantId argument is not provided.`,\n );\n }\n\n this.paypalcommerceratepay = paypalcommerceratepay;\n\n await this.paypalCommerceService.loadPayPalSdk(methodId);\n\n this.createFraudNetScript(merchantId, methodId, gatewayId);\n\n this.loadFraudnetConfig();\n\n this.renderLegalText(legalTextContainer, container);\n }\n\n async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n const { payment, ...order } = payload;\n\n const { getFieldsValues } = this.paypalcommerceratepay || {};\n\n if (!payment) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n if (!getFieldsValues || typeof getFieldsValues !== 'function') {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.getFieldsValues\" argument is not provided.`,\n );\n }\n\n this.toggleLoadingIndicator(true);\n\n try {\n const orderId = await this.paypalCommerceService.createOrder(\n 'paypalcommercealternativemethodscheckout',\n { metadataId: this.guid },\n );\n\n const { ratepayBirthDate, ratepayPhoneNumber, ratepayPhoneCountryCode } =\n getFieldsValues();\n\n const paymentData = {\n formattedPayload: {\n vault_payment_instrument: null,\n set_as_default_stored_instrument: null,\n device_info: null,\n method_id: payment.methodId,\n rate_pay: {\n birth_date: this.normalizeDate(ratepayBirthDate),\n phone: {\n national_number: ratepayPhoneNumber,\n country_code: ratepayPhoneCountryCode.split('+')[1],\n },\n },\n paypal_account: {\n order_id: orderId,\n },\n },\n };\n\n await this.paymentIntegrationService.submitOrder(order, options);\n await this.paymentIntegrationService.submitPayment({\n methodId: payment.methodId,\n paymentData,\n });\n\n return await new Promise((resolve, reject) => {\n this.initializePollingMechanism(\n payment.methodId,\n resolve,\n reject,\n payment.gatewayId,\n );\n });\n } catch (error: unknown) {\n this.handleError(error);\n\n return new Promise((_resolve, reject) => reject());\n }\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n deinitialize(): Promise<void> {\n const { legalTextContainer } = this.paypalcommerceratepay || {};\n const fraudNetScript = document.querySelectorAll('[data-id=\"fraudnetScript\"]')[0];\n const fraudNetConfig = document.querySelectorAll('[data-id=\"fraudnetConfig\"]')[0];\n\n this.deinitializePollingMechanism();\n\n fraudNetScript.remove();\n fraudNetConfig.remove();\n\n if (legalTextContainer) {\n const legalTextContainerElement = document.getElementById(legalTextContainer);\n\n legalTextContainerElement?.remove();\n }\n\n return Promise.resolve();\n }\n\n private normalizeDate(date: BirthDate) {\n const formattedDate = this.formatDate(date.getDate());\n const formattedMonth = this.formatDate(date.getMonth() + 1);\n\n return `${date.getFullYear()}-${formattedMonth}-${formattedDate}`;\n }\n\n private formatDate(date: number): string {\n return `${date < 10 ? 0 : ''}${date}`;\n }\n\n private renderLegalText(legalTextContainerElementId: string, container: string) {\n const legalTextContainerId = legalTextContainerElementId;\n const buttonContainerId = container.split('#')[1];\n const buttonContainer = document.getElementById(buttonContainerId);\n const buttonContainerParent = buttonContainer?.parentNode;\n const legalTextContainer = document.createElement('div');\n\n legalTextContainer.style.marginBottom = '20px';\n legalTextContainer.setAttribute('id', legalTextContainerId);\n buttonContainerParent?.prepend(legalTextContainer);\n\n const paypalSdk = this.paypalCommerceService.getPayPalSdkOrThrow();\n const ratePayButton = paypalSdk.Legal({\n fundingSource: paypalSdk.Legal.FUNDING.PAY_UPON_INVOICE,\n });\n const legalTextContainerElement = document.getElementById(legalTextContainerId);\n\n if (legalTextContainerElement) {\n ratePayButton.render(`#${legalTextContainerId}`);\n } else {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"legalTextContainerElement\" argument is not found.`,\n );\n }\n }\n\n private handleError(error: unknown): void {\n const { onError } = this.paypalcommerceratepay || {};\n\n this.resetPollingMechanism();\n this.toggleLoadingIndicator(false);\n\n if (onError && typeof onError === 'function') {\n onError(error);\n }\n }\n\n private createFraudNetScript(merchantId: string, methodId: string, gatewayId: string) {\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow(methodId, gatewayId);\n const { testMode } = paymentMethod.config;\n const scriptElement = document.createElement('script');\n\n scriptElement.setAttribute('type', 'application/json');\n scriptElement.setAttribute('fncls', 'fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99');\n scriptElement.setAttribute('data-id', 'fraudnetScript');\n this.guid = this.generateGUID();\n\n const fraudNetConfig = {\n f: this.guid,\n s: `${merchantId}_checkout-page`,\n sandbox: testMode,\n };\n\n scriptElement.innerHTML = JSON.stringify(fraudNetConfig);\n document.body.appendChild(scriptElement);\n }\n\n private generateGUID() {\n let guid = '';\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\n for (let i = 0; i < 32; i += 1) {\n const randomIndex = Math.floor(Math.random() * characters.length);\n\n guid += characters[randomIndex];\n }\n\n return guid;\n }\n\n private loadFraudnetConfig() {\n const script = document.createElement('script');\n\n script.setAttribute('data-id', 'fraudnetConfig');\n script.src = 'https://c.paypal.com/da/r/fb.js';\n document.body.appendChild(script);\n }\n\n private async reinitializeStrategy(\n options: PaymentInitializeOptions & WithPayPalCommerceRatePayPaymentInitializeOptions,\n ): Promise<void> {\n await this.deinitialize();\n await this.initialize(options);\n }\n\n /**\n *\n * Polling mechanism\n *\n *\n * */\n private async initializePollingMechanism(\n methodId: string,\n resolvePromise: () => void,\n rejectPromise: () => void,\n gatewayId?: string,\n ): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(resolve, this.pollingInterval);\n\n this.stopPolling = () => {\n clearTimeout(timeout);\n this.toggleLoadingIndicator(false);\n\n return reject();\n };\n });\n\n try {\n this.pollingTimer += this.pollingInterval;\n\n const orderStatus = await this.paypalCommerceService.getOrderStatus(\n 'paypalcommercealternativemethods',\n {\n params: {\n useMetadata: true,\n },\n },\n );\n\n const isOrderApproved = orderStatus === PayPalOrderStatus.PollingStop;\n const isPollingError = orderStatus === PayPalOrderStatus.PollingError;\n\n if (isOrderApproved) {\n this.deinitializePollingMechanism();\n\n return resolvePromise();\n }\n\n if (isPollingError) {\n return rejectPromise();\n }\n\n if (!isOrderApproved && this.pollingTimer < this.maxPollingIntervalTime) {\n return await this.initializePollingMechanism(\n methodId,\n resolvePromise,\n rejectPromise,\n gatewayId,\n );\n }\n\n await this.reinitializeStrategy({\n methodId,\n gatewayId,\n paypalcommerceratepay: this.paypalcommerceratepay,\n });\n\n this.handleError(new TimeoutError());\n } catch (error) {\n this.handleError(error);\n rejectPromise();\n }\n }\n\n private deinitializePollingMechanism(): void {\n this.stopPolling();\n this.pollingTimer = 0;\n }\n\n private resetPollingMechanism(): void {\n this.deinitializePollingMechanism();\n }\n\n /**\n *\n * Loading Indicator methods\n *\n * */\n private toggleLoadingIndicator(isLoading: boolean): void {\n if (isLoading && this.loadingIndicatorContainer) {\n this.loadingIndicator.show(this.loadingIndicatorContainer);\n } else {\n this.loadingIndicator.hide();\n }\n }\n}\n","import {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalIntegrationService,\n LOADING_INDICATOR_STYLES,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PaypalCommerceRatepayPaymentStrategy from './paypal-commerce-ratepay-payment-strategy';\n\nconst createPaypalCommerceRatepayPaymentStrategy: PaymentStrategyFactory<\n PaypalCommerceRatepayPaymentStrategy\n> = (paymentIntegrationService) =>\n new PaypalCommerceRatepayPaymentStrategy(\n paymentIntegrationService,\n createPayPalIntegrationService(paymentIntegrationService),\n new LoadingIndicator({\n containerStyles: { ...LOADING_INDICATOR_STYLES, position: 'fixed' },\n }),\n );\n\nexport default toResolvableModule(createPaypalCommerceRatepayPaymentStrategy, [\n { gateway: 'paypalcommercealternativemethods', id: 'ratepay' },\n]);\n","import { RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n ContentType,\n INTERNAL_USE_ONLY,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n PayPalCreateOrderRequestBody,\n PayPalOrderData,\n PayPalOrderStatusData,\n PayPalUpdateOrderRequestBody,\n PayPalUpdateOrderResponse,\n} from './paypal-commerce-types';\n\nexport default class PayPalCommerceRequestSender {\n constructor(private requestSender: RequestSender) {}\n\n async createOrder(\n providerId: string,\n requestBody: Partial<PayPalCreateOrderRequestBody>,\n ): Promise<PayPalOrderData> {\n const url = `/api/storefront/payment/${providerId}`;\n const body = requestBody;\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.post<PayPalOrderData>(url, { headers, body });\n\n return res.body;\n }\n\n async updateOrder(\n requestBody: PayPalUpdateOrderRequestBody,\n ): Promise<PayPalUpdateOrderResponse> {\n const url = `/api/storefront/initialization/paypalcommerce`;\n const body = requestBody;\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.put<PayPalUpdateOrderResponse>(url, { headers, body });\n\n return res.body;\n }\n\n async getOrderStatus(\n methodId = 'paypalcommerce',\n options?: RequestOptions,\n ): Promise<PayPalOrderStatusData> {\n const url = `/api/storefront/initialization/${methodId}`;\n const headers = {\n 'X-API-INTERNAL': INTERNAL_USE_ONLY,\n 'Content-Type': ContentType.Json,\n ...SDK_VERSION_HEADERS,\n };\n\n const res = await this.requestSender.get<PayPalOrderStatusData>(url, {\n headers,\n ...options,\n });\n\n return res.body;\n }\n}\n","import { omitBy } from 'lodash';\n\nimport { FastlaneStylesSettings, PayPalFastlaneStylesOption } from '../index';\n\nfunction isInvalidStyleOption(styleOption: unknown) {\n return typeof styleOption !== 'string';\n}\n\nexport default function getFastlaneStyles(\n styleSettings?: FastlaneStylesSettings,\n uiStyles?: PayPalFastlaneStylesOption,\n) {\n if (!uiStyles && !styleSettings) {\n return undefined;\n }\n\n return cleanUpFastlaneStyles(mergeFastlaneStyles(styleSettings, uiStyles));\n}\n\nfunction mergeFastlaneStyles(\n styleSettings?: FastlaneStylesSettings,\n uiStyles?: PayPalFastlaneStylesOption,\n): PayPalFastlaneStylesOption {\n return {\n root: {\n backgroundColorPrimary:\n styleSettings?.fastlaneRootSettingsBackgroundColor ||\n uiStyles?.root?.backgroundColorPrimary,\n errorColor: styleSettings?.fastlaneRootSettingsErrorColor || uiStyles?.root?.errorColor,\n fontFamily: styleSettings?.fastlaneRootSettingsFontFamily || uiStyles?.root?.fontFamily,\n fontSizeBase:\n styleSettings?.fastlaneRootSettingsFontSize || uiStyles?.root?.fontSizeBase,\n padding: styleSettings?.fastlaneRootSettingsPadding || uiStyles?.root?.padding,\n primaryColor:\n styleSettings?.fastlaneRootSettingsPrimaryColor || uiStyles?.root?.primaryColor,\n },\n input: {\n borderRadius:\n styleSettings?.fastlaneInputSettingsBorderRadius || uiStyles?.input?.borderRadius,\n borderColor:\n styleSettings?.fastlaneInputSettingsBorderColor || uiStyles?.input?.borderColor,\n focusBorderColor:\n styleSettings?.fastlaneInputSettingsFocusBorderBase ||\n uiStyles?.input?.focusBorderColor,\n backgroundColor:\n styleSettings?.fastlaneInputSettingsBackgroundColor ||\n uiStyles?.input?.backgroundColor,\n borderWidth:\n styleSettings?.fastlaneInputSettingsBorderWidth || uiStyles?.input?.borderWidth,\n textColorBase:\n styleSettings?.fastlaneInputSettingsTextColorBase || uiStyles?.input?.textColorBase,\n },\n toggle: {\n colorPrimary:\n styleSettings?.fastlaneToggleSettingsColorPrimary || uiStyles?.toggle?.colorPrimary,\n colorSecondary:\n styleSettings?.fastlaneToggleSettingsColorSecondary ||\n uiStyles?.toggle?.colorSecondary,\n },\n text: {\n body: {\n color: styleSettings?.fastlaneTextBodySettingsColor || uiStyles?.text?.body?.color,\n fontSize:\n styleSettings?.fastlaneTextBodySettingsFontSize ||\n uiStyles?.text?.body?.fontSize,\n },\n caption: {\n color:\n styleSettings?.fastlaneTextCaptionSettingsColor ||\n uiStyles?.text?.caption?.color,\n fontSize:\n styleSettings?.fastlaneTextCaptionSettingsFontSize ||\n uiStyles?.text?.caption?.fontSize,\n },\n },\n branding: styleSettings?.fastlaneBrandingSettings || uiStyles?.branding,\n };\n}\n\nfunction cleanUpFastlaneStyles(styles: PayPalFastlaneStylesOption) {\n const fastlaneStyles: PayPalFastlaneStylesOption = {};\n\n const root = omitBy(styles.root, isInvalidStyleOption);\n const input = omitBy(styles.input, isInvalidStyleOption);\n const toggle = omitBy(styles.toggle, isInvalidStyleOption);\n const textBody = omitBy(styles.text?.body, isInvalidStyleOption);\n const textCaption = omitBy(styles.text?.caption, isInvalidStyleOption);\n const branding = styles.branding;\n\n if (Object.keys(root).length) {\n fastlaneStyles.root = root;\n }\n\n if (Object.keys(input).length) {\n fastlaneStyles.input = input;\n }\n\n if (Object.keys(toggle).length) {\n fastlaneStyles.toggle = toggle;\n }\n\n if (Object.keys(textBody).length) {\n fastlaneStyles.text = {};\n fastlaneStyles.text.body = textBody;\n }\n\n if (Object.keys(textCaption).length) {\n fastlaneStyles.text = {\n ...fastlaneStyles.text,\n };\n fastlaneStyles.text.caption = textCaption;\n }\n\n if (branding) {\n fastlaneStyles.branding = branding;\n }\n\n return fastlaneStyles;\n}\n","import {\n PaymentProviderCustomer,\n PayPalConnectCustomer,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n// TODO: update PayPalConnectCustomer with PayPalFastlaneCustomer\nexport default function isPayPalFastlaneCustomer(\n customer?: PaymentProviderCustomer,\n): customer is PayPalConnectCustomer {\n if (!customer) {\n return false;\n }\n\n return (\n 'authenticationState' in customer || 'addresses' in customer || 'instruments' in customer\n );\n}\n","import {\n CardInstrument,\n InvalidArgumentError,\n isHostedInstrumentLike,\n isVaultedInstrument,\n OrderFinalizationNotRequiredError,\n OrderPaymentRequestBody,\n OrderRequestBody,\n Payment,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethodClientUnavailableError,\n PaymentMethodInvalidError,\n PaymentRequestOptions,\n PaymentStrategy,\n VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n getFastlaneStyles,\n isPayPalFastlaneCustomer,\n isPaypalFastlaneRequestError,\n PayPalFastlaneAuthenticationState,\n PayPalFastlaneCardComponentMethods,\n PayPalFastlaneCardComponentOptions,\n PayPalFastlanePaymentFormattedPayload,\n PayPalFastlaneSdk,\n PayPalFastlaneUtils,\n PayPalInitializationData,\n PayPalSdkScriptLoader,\n TDSecureAuthenticationState,\n TDSecureVerificationMethod,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceRequestSender from '../paypal-commerce-request-sender';\nimport { LiabilityShiftEnum } from '../paypal-commerce-types';\n\nimport PayPalCommerceFastlanePaymentInitializeOptions, {\n WithPayPalCommerceFastlanePaymentInitializeOptions,\n} from './paypal-commerce-fastlane-payment-initialize-options';\n\nexport default class PaypalCommerceFastlanePaymentStrategy implements PaymentStrategy {\n private paypalComponentMethods?: PayPalFastlaneCardComponentMethods;\n private paypalFastlaneSdk?: PayPalFastlaneSdk;\n private threeDSVerificationMethod?: string;\n private paypalcommercefastlane?: PayPalCommerceFastlanePaymentInitializeOptions;\n private orderId?: string;\n private methodId?: string;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceRequestSender: PayPalCommerceRequestSender,\n private paypalSdkScriptLoader: PayPalSdkScriptLoader,\n private paypalFastlaneUtils: PayPalFastlaneUtils,\n ) {}\n\n /**\n *\n * Default methods\n *\n * */\n async initialize(\n options: PaymentInitializeOptions & WithPayPalCommerceFastlanePaymentInitializeOptions,\n ): Promise<void> {\n const { methodId, paypalcommercefastlane } = options;\n\n this.methodId = methodId;\n\n this.paypalcommercefastlane = paypalcommercefastlane;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!paypalcommercefastlane) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercefastlane\" argument is not provided.',\n );\n }\n\n if (!paypalcommercefastlane.onInit || typeof paypalcommercefastlane.onInit !== 'function') {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercefastlane.onInit\" argument is not provided or it is not a function.',\n );\n }\n\n if (\n !paypalcommercefastlane.onChange ||\n typeof paypalcommercefastlane.onChange !== 'function'\n ) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercefastlane.onChange\" argument is not provided or it is not a function.',\n );\n }\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const { isDeveloperModeApplicable, isFastlaneStylingEnabled } =\n paymentMethod.initializationData || {};\n\n this.threeDSVerificationMethod =\n paymentMethod.initializationData?.threeDSVerificationMethod;\n\n this.paypalFastlaneSdk = await this.paypalSdkScriptLoader.getPayPalFastlaneSdk(\n paymentMethod,\n cart.currency.code,\n cart.id,\n state.getLocale(),\n );\n\n const paypalFastlaneStyling = isFastlaneStylingEnabled\n ? paymentMethod?.initializationData?.fastlaneStyles\n : {};\n\n const fastlaneStyles = getFastlaneStyles(\n paypalFastlaneStyling,\n paypalcommercefastlane?.styles,\n );\n\n await this.paypalFastlaneUtils.initializePayPalFastlane(\n this.paypalFastlaneSdk,\n !!isDeveloperModeApplicable,\n fastlaneStyles,\n );\n\n if (this.shouldRunAuthenticationFlow()) {\n await this.runPayPalAuthenticationFlowOrThrow(methodId);\n }\n\n await this.initializePayPalPaymentComponent();\n\n paypalcommercefastlane.onInit((container: string) =>\n this.renderPayPalPaymentComponent(container),\n );\n paypalcommercefastlane.onChange(() => this.handlePayPalStoredInstrumentChange(methodId));\n }\n\n async execute(orderRequest: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n const { payment, ...order } = orderRequest;\n\n if (!payment) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n const { paymentData, methodId } = payment;\n\n const isVaultedFlow = paymentData && isVaultedInstrument(paymentData);\n\n try {\n await this.paymentIntegrationService.submitOrder(order, options);\n\n const paymentPayload = isVaultedFlow\n ? await this.prepareVaultedInstrumentPaymentPayload(methodId, paymentData)\n : await this.preparePaymentPayload(methodId, paymentData);\n\n await this.paymentIntegrationService.submitPayment<PayPalFastlanePaymentFormattedPayload>(\n paymentPayload,\n );\n\n this.paypalFastlaneUtils.removeStorageSessionId();\n } catch (error) {\n if (\n isPaypalFastlaneRequestError(error) &&\n error.response.body.name === 'INVALID_REQUEST'\n ) {\n const invalidRequestError = {\n translationKey: 'payment.errors.invalid_request_error',\n };\n\n this.handleError(invalidRequestError);\n\n return Promise.reject();\n }\n\n if (error instanceof Error && error.name !== 'FastlaneError') {\n throw error;\n }\n\n return Promise.reject();\n }\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n async deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n *\n * Authentication flow methods\n *\n */\n private shouldRunAuthenticationFlow(): boolean {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const customer = state.getCustomerOrThrow();\n const paymentProviderCustomer = state.getPaymentProviderCustomer();\n const paypalFastlaneCustomer = isPayPalFastlaneCustomer(paymentProviderCustomer)\n ? paymentProviderCustomer\n : {};\n\n const paypalFastlaneSessionId = this.paypalFastlaneUtils.getStorageSessionId();\n\n if (\n !customer.isGuest ||\n paypalFastlaneCustomer?.authenticationState ===\n PayPalFastlaneAuthenticationState.CANCELED\n ) {\n return false;\n }\n\n return !paypalFastlaneCustomer?.authenticationState && paypalFastlaneSessionId === cart.id;\n }\n\n private async runPayPalAuthenticationFlowOrThrow(methodId: string): Promise<void> {\n try {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const customer = state.getCustomer();\n const billingAddress = state.getBillingAddress();\n const customerEmail = customer?.email || billingAddress?.email || '';\n\n const { customerContextId } = await this.paypalFastlaneUtils.lookupCustomerOrThrow(\n customerEmail,\n );\n\n const authenticationResult =\n await this.paypalFastlaneUtils.triggerAuthenticationFlowOrThrow(customerContextId);\n\n const { authenticationState, addresses, instruments } =\n this.paypalFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(\n methodId,\n authenticationResult,\n );\n\n await this.paymentIntegrationService.updatePaymentProviderCustomer({\n authenticationState,\n addresses,\n instruments,\n });\n\n const isAuthenticationFlowCanceled =\n authenticationResult.authenticationState ===\n PayPalFastlaneAuthenticationState.CANCELED;\n\n if (isAuthenticationFlowCanceled) {\n this.paypalFastlaneUtils.removeStorageSessionId();\n } else {\n this.paypalFastlaneUtils.updateStorageSessionId(cart.id);\n }\n } catch (error) {\n // Info: Do not throw anything here to avoid blocking customer from passing checkout flow\n }\n }\n\n /**\n *\n * PayPal Fastlane Card Component rendering method\n *\n */\n private async initializePayPalPaymentComponent(): Promise<void> {\n const state = this.paymentIntegrationService.getState();\n const billingAddress = state.getBillingAddressOrThrow();\n const phone = billingAddress.phone;\n const fullName = `${billingAddress.firstName} ${billingAddress.lastName}`.trim();\n\n const paypalFastlane = this.paypalFastlaneUtils.getPayPalFastlaneOrThrow();\n\n const cardComponentOptions: PayPalFastlaneCardComponentOptions = {\n fields: {\n cardholderName: {\n prefill: fullName,\n enabled: true,\n },\n ...(phone && {\n phoneNumber: {\n prefill: phone,\n },\n }),\n },\n };\n\n this.paypalComponentMethods = await paypalFastlane.FastlaneCardComponent(\n cardComponentOptions,\n );\n }\n\n private renderPayPalPaymentComponent(container?: string): void {\n const paypalComponentMethods = this.getPayPalComponentMethodsOrThrow();\n\n if (!container) {\n throw new InvalidArgumentError(\n 'Unable to render card component because \"container\" argument is not provided.',\n );\n }\n\n paypalComponentMethods.render(container);\n }\n\n private getPayPalComponentMethodsOrThrow(): PayPalFastlaneCardComponentMethods {\n if (!this.paypalComponentMethods) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.paypalComponentMethods;\n }\n\n /**\n *\n * Payment Payload preparation methods\n *\n */\n private async prepareVaultedInstrumentPaymentPayload(\n methodId: string,\n paymentData: VaultedInstrument,\n ): Promise<Payment<PayPalFastlanePaymentFormattedPayload>> {\n const { instrumentId } = paymentData;\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const is3DSEnabled = paymentMethod.config.is3dsEnabled;\n\n const nonce = is3DSEnabled ? await this.get3DSNonce(instrumentId) : instrumentId;\n\n await this.createOrder(nonce);\n\n return {\n methodId,\n paymentData: {\n formattedPayload: {\n paypal_fastlane_token: {\n order_id: this.orderId,\n token: nonce,\n },\n },\n },\n };\n }\n\n private async preparePaymentPayload(\n methodId: string,\n paymentData: OrderPaymentRequestBody['paymentData'],\n ): Promise<Payment<PayPalFastlanePaymentFormattedPayload>> {\n const state = this.paymentIntegrationService.getState();\n const billingAddress = state.getBillingAddressOrThrow();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n const fullName = `${billingAddress.firstName} ${billingAddress.lastName}`.trim();\n\n const { getPaymentToken } = this.getPayPalComponentMethodsOrThrow();\n\n const { id } = await getPaymentToken({\n name: { fullName },\n billingAddress: this.paypalFastlaneUtils.mapBcToPayPalAddress(billingAddress),\n });\n\n const is3DSEnabled = paymentMethod.config.is3dsEnabled;\n\n const nonce = is3DSEnabled ? await this.get3DSNonce(id) : id;\n\n await this.createOrder(nonce);\n\n const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n return {\n methodId,\n paymentData: {\n ...paymentData,\n shouldSaveInstrument,\n shouldSetAsDefaultInstrument,\n formattedPayload: {\n paypal_fastlane_token: {\n order_id: this.orderId,\n token: nonce,\n },\n },\n },\n };\n }\n\n private async createOrder(id: string): Promise<void> {\n const state = this.paymentIntegrationService.getState();\n const cartId = state.getCartOrThrow().id;\n\n if (this.methodId) {\n const { orderId } = await this.paypalCommerceRequestSender.createOrder(this.methodId, {\n cartId,\n fastlaneToken: id,\n });\n\n this.orderId = orderId;\n }\n }\n\n /**\n *\n * 3DSecure methods\n *\n * */\n private async get3DSNonce(nonce: string): Promise<string> {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const order = state.getOrderOrThrow();\n const checkoutUrl = state.getStoreConfigOrThrow().links.checkoutLink;\n\n const threeDomainSecureComponent = this.paypalFastlaneSdk?.ThreeDomainSecureClient;\n\n if (!threeDomainSecureComponent) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n const threeDomainSecureParameters = {\n amount: order.orderAmount.toFixed(2),\n currency: cart.currency.code,\n nonce,\n threeDSRequested: this.threeDSVerificationMethod === TDSecureVerificationMethod.Always,\n transactionContext: {\n experience_context: {\n locale: 'en-US',\n return_url: checkoutUrl,\n cancel_url: checkoutUrl,\n },\n },\n };\n\n const isThreeDomainSecureEligible = await threeDomainSecureComponent.isEligible(\n threeDomainSecureParameters,\n );\n\n if (\n this.threeDSVerificationMethod === TDSecureVerificationMethod.Always &&\n !isThreeDomainSecureEligible\n ) {\n throw new PaymentMethodInvalidError();\n }\n\n if (isThreeDomainSecureEligible) {\n const {\n liabilityShift,\n authenticationState,\n nonce: threeDSNonce,\n } = await threeDomainSecureComponent.show();\n\n if (\n liabilityShift === LiabilityShiftEnum.No ||\n liabilityShift === LiabilityShiftEnum.Unknown ||\n authenticationState === TDSecureAuthenticationState.Errored ||\n authenticationState === TDSecureAuthenticationState.Cancelled\n ) {\n throw new PaymentMethodInvalidError();\n }\n\n if (\n authenticationState === TDSecureAuthenticationState.Succeeded &&\n [LiabilityShiftEnum.Yes, LiabilityShiftEnum.Possible].includes(liabilityShift)\n ) {\n return threeDSNonce;\n }\n\n throw new PaymentMethodInvalidError();\n }\n\n return nonce;\n }\n\n /**\n *\n * PayPal Fastlane instrument change\n *\n */\n private async handlePayPalStoredInstrumentChange(\n methodId: string,\n ): Promise<CardInstrument | undefined> {\n const paypalAxoSdk = this.paypalFastlaneUtils.getPayPalFastlaneOrThrow();\n\n const { selectionChanged, selectedCard } = await paypalAxoSdk.profile.showCardSelector();\n\n if (selectionChanged) {\n const state = this.paymentIntegrationService.getState();\n const paymentProviderCustomer = state.getPaymentProviderCustomer();\n const paypalFastlaneCustomer = isPayPalFastlaneCustomer(paymentProviderCustomer)\n ? paymentProviderCustomer\n : {};\n\n const selectedInstrument = this.paypalFastlaneUtils.mapPayPalToBcInstrument(\n methodId,\n selectedCard,\n )[0];\n\n await this.paymentIntegrationService.updatePaymentProviderCustomer({\n ...paypalFastlaneCustomer,\n instruments: [selectedInstrument],\n });\n\n return selectedInstrument;\n }\n\n return undefined;\n }\n\n private handleError(error: unknown): void {\n if (\n this.paypalcommercefastlane?.onError &&\n typeof this.paypalcommercefastlane.onError === 'function'\n ) {\n this.paypalcommercefastlane.onError(error);\n }\n }\n}\n","export interface PaypalFastlaneRequestError {\n name: string;\n message: string;\n response: {\n body: {\n name: string;\n };\n };\n}\n\nexport default function isPaypalFastlaneRequestError(\n error: unknown,\n): error is PaypalFastlaneRequestError {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'message' in error &&\n 'response' in error &&\n 'body' in (error as PaypalFastlaneRequestError).response &&\n 'name' in (error as PaypalFastlaneRequestError).response.body\n );\n}\n","import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalFastlaneUtils,\n createPayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceRequestSender from '../paypal-commerce-request-sender';\n\nimport PayPalCommerceFastlanePaymentStrategy from './paypal-commerce-fastlane-payment-strategy';\n\nconst createPayPalCommerceFastlanePaymentStrategy: PaymentStrategyFactory<\n PayPalCommerceFastlanePaymentStrategy\n> = (paymentIntegrationService) => {\n const { getHost } = paymentIntegrationService.getState();\n\n return new PayPalCommerceFastlanePaymentStrategy(\n paymentIntegrationService,\n new PayPalCommerceRequestSender(createRequestSender({ host: getHost() })),\n createPayPalSdkScriptLoader(),\n createPayPalFastlaneUtils(),\n );\n};\n\nexport default toResolvableModule(createPayPalCommerceFastlanePaymentStrategy, [\n { id: 'paypalcommerceacceleratedcheckout' }, // PayPal Fastlane relates to 'paypalcommerceacceleratedcheckout' method id\n]);\n","import {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalIntegrationService from './paypal-integration-service';\nimport {\n ApproveCallbackActions,\n ApproveCallbackPayload,\n PayPalButtonOptions,\n PayPalButtons,\n PayPalBuyNowInitializeOptions,\n ShippingAddressChangeCallbackPayload,\n ShippingOptionChangeCallbackPayload,\n} from './paypal-types';\n\nclass PaypalButtonCreationService {\n private onError?: PayPalButtonOptions['onError'];\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalIntegrationService: PayPalIntegrationService,\n ) {}\n\n createPayPalButton(\n providerId: string,\n methodId: string,\n buttonOptions: PayPalButtonOptions,\n buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n ): PayPalButtons {\n const {\n style,\n fundingSource,\n isHostedCheckoutEnabled,\n isServerSideShippingCallbacksEnabled,\n onClick,\n onCancel,\n onPaymentComplete,\n onError,\n } = buttonOptions;\n\n this.onError = onError;\n\n const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n const isAvailableFundingSource = Object.values(paypalSdk.FUNDING).includes(fundingSource);\n\n if (!isAvailableFundingSource) {\n throw new InvalidArgumentError(\n `Unable to initialize PayPal button because \"fundingSource\" argument is not valid funding source.`,\n );\n }\n\n const hostedCheckoutCallbacks = {\n ...(!isServerSideShippingCallbacksEnabled && {\n onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n this.onShippingAddressChange(data, providerId),\n onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n this.onShippingOptionsChange(data, providerId),\n }),\n onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n this.onHostedCheckoutApprove(\n data,\n actions,\n methodId,\n providerId,\n onPaymentComplete,\n isServerSideShippingCallbacksEnabled,\n ),\n };\n\n return paypalSdk.Buttons({\n fundingSource,\n style: this.paypalIntegrationService.getValidButtonStyle(style),\n createOrder: async () => {\n if (buyNowInitializeOptions) {\n const buyNowCart = await this.paypalIntegrationService.createBuyNowCartOrThrow(\n buyNowInitializeOptions,\n );\n\n await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n }\n\n return this.paypalIntegrationService.createOrder(providerId);\n },\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalIntegrationService.tokenizePayment(methodId, orderID),\n ...(onClick ? { onClick } : {}),\n ...(onCancel ? { onCancel } : {}),\n ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n });\n }\n\n private async onHostedCheckoutApprove(\n data: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n methodId: string,\n providerId: string,\n onComplete?: () => void,\n isServerSideShippingCallbacksEnabled?: boolean,\n ): Promise<void> {\n if (!data.orderID) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n\n try {\n const hasPhysicalItems = cart.lineItems.physicalItems.length > 0;\n\n if (!isServerSideShippingCallbacksEnabled) {\n const orderDetails = await actions.order.get();\n\n const billingAddress =\n this.paypalIntegrationService.getBillingAddressFromOrderDetails(orderDetails);\n\n await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n if (hasPhysicalItems) {\n const shippingAddress =\n this.paypalIntegrationService.getShippingAddressFromOrderDetails(\n orderDetails,\n );\n\n await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n }\n }\n\n if (hasPhysicalItems) {\n await this.paypalIntegrationService.updateOrder(\n providerId,\n undefined,\n undefined,\n isServerSideShippingCallbacksEnabled,\n );\n }\n\n if (isServerSideShippingCallbacksEnabled) {\n await this.paymentIntegrationService.loadCheckout();\n }\n\n await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n\n await this.paypalIntegrationService.submitPayment(methodId, data.orderID);\n\n if (onComplete && typeof onComplete === 'function') {\n onComplete();\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private async onShippingAddressChange(\n data: ShippingAddressChangeCallbackPayload,\n providerId: string,\n ): Promise<void> {\n const address = this.paypalIntegrationService.getAddress({\n city: data.shippingAddress.city,\n countryCode: data.shippingAddress.countryCode,\n postalCode: data.shippingAddress.postalCode,\n stateOrProvinceCode: data.shippingAddress.state,\n });\n\n try {\n // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n // on this stage we don't have access to valid customer's address accept shipping data\n await this.paymentIntegrationService.updateBillingAddress(address);\n await this.paymentIntegrationService.updateShippingAddress(address);\n\n const shippingOption = this.paypalIntegrationService.getShippingOptionOrThrow();\n\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalIntegrationService.updateOrder(providerId);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private async onShippingOptionsChange(\n data: ShippingOptionChangeCallbackPayload,\n providerId: string,\n ): Promise<void> {\n const shippingOption = this.paypalIntegrationService.getShippingOptionOrThrow(\n data.selectedShippingOption.id,\n );\n\n try {\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalIntegrationService.updateOrder(providerId);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private handleError(error: unknown) {\n if (typeof this.onError === 'function') {\n this.onError(error);\n } else {\n throw error;\n }\n }\n}\n\nexport default PaypalButtonCreationService;\n","import {\n CustomerCredentials,\n CustomerInitializeOptions,\n CustomerStrategy,\n DefaultCheckoutButtonHeight,\n ExecutePaymentMethodCheckoutOptions,\n InvalidArgumentError,\n PaymentIntegrationService,\n RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n PaypalButtonCreationService,\n PayPalButtonOptions,\n PayPalInitializationData,\n PayPalIntegrationService,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCustomerInitializeOptions, {\n WithPayPalCommerceCustomerInitializeOptions,\n} from './paypal-commerce-customer-initialize-options';\n\nexport default class PayPalCommerceCustomerStrategy implements CustomerStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalIntegrationService: PayPalIntegrationService,\n private paypalButtonCreationService: PaypalButtonCreationService,\n ) {}\n\n async initialize(\n options: CustomerInitializeOptions & WithPayPalCommerceCustomerInitializeOptions,\n ): Promise<void> {\n const { paypalcommerce, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!paypalcommerce) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.',\n );\n }\n\n if (!paypalcommerce.container) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommerce.container\" argument is not provided.',\n );\n }\n\n if (paypalcommerce.onClick && typeof paypalcommerce.onClick !== 'function') {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommerce.onClick\" argument is not a function.',\n );\n }\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethod(methodId);\n\n if (!paymentMethod) {\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n }\n\n const paypalSdk = await this.paypalIntegrationService.loadPayPalSdk(methodId);\n\n if (!paypalSdk || !paypalSdk.Buttons || typeof paypalSdk.Buttons !== 'function') {\n // eslint-disable-next-line no-console\n console.error(\n '[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK',\n );\n\n return;\n }\n\n this.renderButton(methodId, paypalcommerce);\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n await this.paymentIntegrationService.signInCustomer(credentials, options);\n\n return Promise.resolve();\n }\n\n async signOut(options?: RequestOptions): Promise<void> {\n await this.paymentIntegrationService.signOutCustomer(options);\n\n return Promise.resolve();\n }\n\n executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void> {\n options?.continueWithCheckoutCallback?.();\n\n return Promise.resolve();\n }\n\n private renderButton(\n methodId: string,\n paypalcommerce: PayPalCommerceCustomerInitializeOptions,\n ): void {\n const { container, onClick, onComplete, onError } = paypalcommerce;\n\n const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const {\n isHostedCheckoutEnabled,\n paymentButtonStyles,\n isServerSideShippingCallbacksEnabled,\n } = paymentMethod.initializationData || {};\n const { checkoutTopButtonStyles } = paymentButtonStyles || {};\n\n const buttonOptions: PayPalButtonOptions = {\n fundingSource: paypalSdk.FUNDING.PAYPAL,\n isServerSideShippingCallbacksEnabled,\n isHostedCheckoutEnabled,\n style: {\n ...checkoutTopButtonStyles,\n height: DefaultCheckoutButtonHeight,\n },\n ...(onClick && { onClick: () => onClick() }),\n ...(isHostedCheckoutEnabled && onComplete && { onPaymentComplete: () => onComplete() }),\n onError,\n };\n\n const paypalButton = this.paypalButtonCreationService.createPayPalButton(\n 'paypalcommerce',\n methodId,\n buttonOptions,\n );\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${container}`);\n } else {\n this.paypalIntegrationService.removeElement(container);\n }\n }\n}\n","const DefaultCheckoutButtonHeight = 40;\n\nexport default DefaultCheckoutButtonHeight;\n","import {\n CustomerStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalIntegrationService,\n PaypalButtonCreationService,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCustomerStrategy from './paypal-commerce-customer-strategy';\n\nconst createPayPalCommerceCustomerStrategy: CustomerStrategyFactory<\n PayPalCommerceCustomerStrategy\n> = (paymentIntegrationService) => {\n const paypalIntegrationService = createPayPalIntegrationService(paymentIntegrationService);\n const paypalButtonCreationService = new PaypalButtonCreationService(\n paymentIntegrationService,\n paypalIntegrationService,\n );\n\n return new PayPalCommerceCustomerStrategy(\n paymentIntegrationService,\n paypalIntegrationService,\n paypalButtonCreationService,\n );\n};\n\nexport default toResolvableModule(createPayPalCommerceCustomerStrategy, [{ id: 'paypalcommerce' }]);\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { isNil, omitBy } from 'lodash';\n\nimport {\n BillingAddressRequestBody,\n BuyNowCartCreationError,\n Cart,\n CartSource,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethodClientUnavailableError,\n RequestError,\n RequestOptions,\n ShippingOption,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceRequestSender from './paypal-commerce-request-sender';\nimport PayPalCommerceScriptLoader from './paypal-commerce-script-loader';\nimport {\n PayPalButtonStyleOptions,\n PayPalBuyNowInitializeOptions,\n PayPalCommerceInitializationData,\n PayPalCreateOrderCardFieldsResponse,\n PayPalCreateOrderRequestBody,\n PayPalOrderDetails,\n PayPalOrderStatus,\n PayPalSDK,\n StyleButtonColor,\n StyleButtonLabel,\n StyleButtonShape,\n} from './paypal-commerce-types';\n\nexport default class PayPalCommerceIntegrationService {\n private paypalSdk?: PayPalSDK;\n\n constructor(\n private formPoster: FormPoster,\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceRequestSender: PayPalCommerceRequestSender,\n private paypalCommerceScriptLoader: PayPalCommerceScriptLoader,\n ) {}\n\n /**\n *\n * PayPalSDK methods\n *\n */\n async loadPayPalSdk(\n methodId: string,\n providedCurrencyCode?: string,\n initializesOnCheckoutPage?: boolean,\n forceLoad?: boolean,\n ): Promise<PayPalSDK | undefined> {\n const state = this.paymentIntegrationService.getState();\n const currencyCode = providedCurrencyCode || state.getCartOrThrow().currency.code;\n const paymentMethod =\n state.getPaymentMethodOrThrow<PayPalCommerceInitializationData>(methodId);\n\n this.paypalSdk = await this.paypalCommerceScriptLoader.getPayPalSDK(\n paymentMethod,\n currencyCode,\n state.getLocale(),\n initializesOnCheckoutPage,\n forceLoad,\n );\n\n return this.paypalSdk;\n }\n\n getPayPalSdkOrThrow(): PayPalSDK {\n if (!this.paypalSdk) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.paypalSdk;\n }\n\n /**\n *\n * Buy Now cart creation methods\n *\n */\n async createBuyNowCartOrThrow(\n buyNowInitializeOptions: PayPalBuyNowInitializeOptions,\n ): Promise<Cart> {\n const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n return await this.paymentIntegrationService.createBuyNowCart(cartRequestBody);\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n\n /**\n *\n * Order methods\n *\n */\n async createOrder(\n providerId: string,\n requestBody?: Partial<PayPalCreateOrderRequestBody>,\n ): Promise<string> {\n const cartId = this.paymentIntegrationService.getState().getCartOrThrow().id;\n\n const { orderId } = await this.paypalCommerceRequestSender.createOrder(providerId, {\n cartId,\n ...requestBody,\n });\n\n return orderId;\n }\n\n async createOrderCardFields(\n providerId: string,\n requestBody?: Partial<PayPalCreateOrderRequestBody>,\n ): Promise<PayPalCreateOrderCardFieldsResponse> {\n const cartId = this.paymentIntegrationService.getState().getCartOrThrow().id;\n\n const { orderId, setupToken } = await this.paypalCommerceRequestSender.createOrder(\n providerId,\n {\n cartId,\n ...requestBody,\n },\n );\n\n return { orderId, ...(setupToken ? { setupToken } : {}) };\n }\n\n async updateOrder(isServerSideShippingCallbacksEnabled?: boolean): Promise<void> {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const consignment = state.getConsignmentsOrThrow()[0];\n\n try {\n await this.paypalCommerceRequestSender.updateOrder({\n availableShippingOptions: isServerSideShippingCallbacksEnabled\n ? []\n : consignment.availableShippingOptions,\n cartId: cart.id,\n selectedShippingOption: isServerSideShippingCallbacksEnabled\n ? null\n : consignment.selectedShippingOption,\n });\n } catch (_error) {\n throw new RequestError();\n }\n }\n\n async getOrderStatus(methodId?: string, options?: RequestOptions): Promise<PayPalOrderStatus> {\n try {\n const { status } = await this.paypalCommerceRequestSender.getOrderStatus(\n methodId,\n options,\n );\n\n return status;\n } catch (_error) {\n throw new RequestError();\n }\n }\n\n /**\n *\n * Payment submitting and tokenizing methods\n *\n */\n tokenizePayment(methodId: string, orderId?: string): void {\n const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n\n if (!orderId) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n return this.formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n action: 'set_external_checkout',\n provider: methodId,\n order_id: orderId,\n ...(cart.source === CartSource.BuyNow && { cart_id: cart.id }),\n });\n }\n\n async submitPayment(methodId: string, orderId: string, gatewayId?: string): Promise<void> {\n const paymentData = {\n formattedPayload: {\n vault_payment_instrument: null,\n set_as_default_stored_instrument: null,\n device_info: null,\n method_id: methodId,\n paypal_account: {\n order_id: orderId,\n },\n },\n };\n\n await this.paymentIntegrationService.submitPayment({\n methodId,\n paymentData,\n ...(gatewayId ? { gatewayId } : {}),\n });\n }\n\n /**\n *\n * Shipping options methods\n *\n */\n getShippingOptionOrThrow(selectedShippingOptionId?: string): ShippingOption {\n const state = this.paymentIntegrationService.getState();\n const consignment = state.getConsignmentsOrThrow()[0];\n\n const availableShippingOptions = consignment.availableShippingOptions || [];\n\n const recommendedShippingOption = availableShippingOptions.find(\n (option) => option.isRecommended,\n );\n\n const selectedShippingOption = selectedShippingOptionId\n ? availableShippingOptions.find((option) => option.id === selectedShippingOptionId)\n : availableShippingOptions.find(\n (option) => option.id === consignment.selectedShippingOption?.id,\n );\n\n const shippingOptionToSelect =\n selectedShippingOption || recommendedShippingOption || availableShippingOptions[0];\n\n if (!shippingOptionToSelect) {\n throw new Error(\"Your order can't be shipped to this address\");\n }\n\n return shippingOptionToSelect;\n }\n\n /**\n *\n * Address transforming methods\n *\n */\n getAddress(address?: Partial<BillingAddressRequestBody>): BillingAddressRequestBody {\n return {\n firstName: address?.firstName || '',\n lastName: address?.lastName || '',\n email: address?.email || '',\n phone: address?.phone || '',\n company: '',\n address1: address?.address1 || '',\n address2: address?.address2 || '',\n city: address?.city || '',\n countryCode: address?.countryCode || '',\n postalCode: address?.postalCode || '',\n stateOrProvince: '',\n stateOrProvinceCode: address?.stateOrProvinceCode || '',\n customFields: [],\n };\n }\n\n getBillingAddressFromOrderDetails({ payer }: PayPalOrderDetails): BillingAddressRequestBody {\n return this.getAddress({\n firstName: payer.name.given_name,\n lastName: payer.name.surname,\n email: payer.email_address,\n address1: payer.address.address_line_1,\n address2: payer.address.address_line_2,\n city: payer.address.admin_area_2,\n countryCode: payer.address.country_code,\n postalCode: payer.address.postal_code,\n stateOrProvinceCode: payer.address.admin_area_1,\n phone: payer.phone?.phone_number?.national_number,\n });\n }\n\n getShippingAddressFromOrderDetails(\n orderDetails: PayPalOrderDetails,\n ): BillingAddressRequestBody {\n const { payer, purchase_units } = orderDetails;\n const {\n address,\n name: { full_name },\n } = purchase_units[0].shipping;\n\n const [firstName, ...lastName] = full_name.split(' ');\n\n return this.getAddress({\n firstName,\n lastName: lastName.join(' '),\n email: payer.email_address,\n address1: address.address_line_1,\n address2: address.address_line_2,\n city: address.admin_area_2,\n countryCode: address.country_code,\n postalCode: address.postal_code,\n stateOrProvinceCode: address.admin_area_1,\n });\n }\n\n /**\n *\n * Buttons style methods\n *\n */\n getValidButtonStyle(style?: PayPalButtonStyleOptions): PayPalButtonStyleOptions {\n const { color, height, label, shape } = style || {};\n\n const validStyles = {\n color: color && StyleButtonColor[color] ? color : undefined,\n height: this.getValidHeight(height),\n label: label && StyleButtonLabel[label] ? label : undefined,\n shape: shape && StyleButtonShape[shape] ? shape : undefined,\n };\n\n return omitBy(validStyles, isNil);\n }\n\n getValidHeight(height?: number): number {\n const defaultHeight = 40;\n const minHeight = 25;\n const maxHeight = 55;\n\n if (!height || typeof height !== 'number') {\n return defaultHeight;\n }\n\n if (height > maxHeight) {\n return maxHeight;\n }\n\n if (height < minHeight) {\n return minHeight;\n }\n\n return height;\n }\n\n /**\n *\n * Utils methods\n *\n */\n removeElement(elementId?: string): void {\n const element = elementId && document.getElementById(elementId);\n\n if (element) {\n // For now this is a temporary solution, further removeElement method will be removed\n element.style.display = 'none';\n }\n }\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n MissingDataError,\n MissingDataErrorType,\n PaymentMethod,\n PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { transformLocaleToPayPalFormat } from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport {\n ComponentsScriptType,\n FundingType,\n PayPalCommerceHostWindow,\n PayPalCommerceInitializationData,\n PayPalCommerceScriptParams,\n PayPalSDK,\n} from './paypal-commerce-types';\n\nexport default class PayPalCommerceScriptLoader {\n private window: PayPalCommerceHostWindow;\n\n constructor(private scriptLoader: ScriptLoader) {\n this.window = window;\n }\n\n async getPayPalSDK(\n paymentMethod: PaymentMethod<PayPalCommerceInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n initializesOnCheckoutPage?: boolean,\n forceLoad?: boolean,\n ): Promise<PayPalSDK> {\n const paypalSdkScriptConfig = this.getPayPalSdkScriptConfigOrThrow(\n paymentMethod,\n currencyCode,\n storeLanguage,\n initializesOnCheckoutPage,\n );\n\n return this.loadPayPalSDK(paypalSdkScriptConfig, forceLoad);\n }\n\n private async loadPayPalSDK(\n paypalSdkScriptConfig: PayPalCommerceScriptParams,\n forceLoad = false,\n ): Promise<PayPalSDK> {\n if (!this.window.paypal || forceLoad) {\n const options = this.transformConfig<PayPalCommerceScriptParams['options']>(\n paypalSdkScriptConfig.options,\n );\n const attributes = this.transformConfig<PayPalCommerceScriptParams['attributes']>(\n paypalSdkScriptConfig.attributes,\n );\n\n const paypalSdkUrl = 'https://www.paypal.com/sdk/js';\n const scriptQuery = new URLSearchParams(options).toString();\n const scriptSrc = `${paypalSdkUrl}?${scriptQuery}`;\n\n await this.scriptLoader.loadScript(scriptSrc, { async: true, attributes });\n }\n\n if (!this.window.paypal) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.window.paypal;\n }\n\n private getPayPalSdkScriptConfigOrThrow(\n paymentMethod: PaymentMethod<PayPalCommerceInitializationData>,\n currencyCode: string,\n storeLanguage: string | undefined,\n initializesOnCheckoutPage = true,\n ): PayPalCommerceScriptParams {\n const { id, clientToken, initializationData } = paymentMethod;\n\n if (!initializationData?.clientId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const {\n intent,\n clientId,\n merchantId,\n buyerCountry,\n attributionId,\n isVenmoEnabled,\n isHostedCheckoutEnabled,\n isPayPalCreditAvailable,\n isDeveloperModeApplicable,\n availableAlternativePaymentMethods = [],\n enabledAlternativePaymentMethods = [],\n isGooglePayEnabled,\n } = initializationData;\n\n const commit = isHostedCheckoutEnabled || initializesOnCheckoutPage;\n\n const shouldEnableCard = id === 'paypalcommercecreditcards';\n const enableCardFunding = shouldEnableCard ? ['card'] : [];\n const disableCardFunding = !shouldEnableCard ? ['card'] : [];\n\n const enableCreditFunding = isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n const disableCreditFunding = !isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n\n const enableVenmoFunding = isVenmoEnabled ? ['venmo'] : [];\n const disableVenmoFunding = !isVenmoEnabled ? ['venmo'] : [];\n const disableAPMsFunding = availableAlternativePaymentMethods.filter(\n (apm: string) => !enabledAlternativePaymentMethods.includes(apm),\n );\n const googlePayComponent: ComponentsScriptType = isGooglePayEnabled ? ['googlepay'] : [];\n const cardFieldsComponent: ComponentsScriptType = initializesOnCheckoutPage\n ? ['card-fields']\n : [];\n const disableFunding: FundingType = [\n ...disableCardFunding,\n ...disableCreditFunding,\n ...disableVenmoFunding,\n ...disableAPMsFunding,\n ];\n const enableFunding: FundingType = [\n ...enableCardFunding,\n ...enableCreditFunding,\n ...enableVenmoFunding,\n ...enabledAlternativePaymentMethods,\n ];\n\n const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n return {\n options: {\n 'client-id': clientId,\n 'merchant-id': merchantId,\n 'enable-funding': enableFunding.length > 0 ? enableFunding : undefined,\n 'disable-funding': disableFunding.length > 0 ? disableFunding : undefined,\n commit,\n components: [\n 'buttons',\n 'hosted-fields',\n 'payment-fields',\n 'legal',\n ...googlePayComponent,\n ...cardFieldsComponent,\n ],\n currency: currencyCode,\n intent,\n ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n ...(locale && { locale }),\n },\n attributes: {\n 'data-partner-attribution-id': attributionId,\n 'data-client-token': clientToken,\n },\n };\n }\n\n private transformConfig<T extends Record<string, unknown>>(config: T): Record<string, string> {\n let transformedConfig = {};\n\n const keys = Object.keys(config) as Array<keyof T>;\n\n keys.forEach((key) => {\n const value = config[key];\n\n if (\n value === undefined ||\n value === null ||\n value === '' ||\n (Array.isArray(value) && value.length === 0)\n ) {\n return;\n }\n\n transformedConfig = {\n ...transformedConfig,\n [key]: Array.isArray(value) ? value.join(',') : value,\n };\n });\n\n return transformedConfig;\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n PayPalCommerceIntegrationService,\n PayPalCommerceRequestSender,\n PayPalCommerceScriptLoader,\n} from './index';\n\nconst createPayPalCommerceIntegrationService = (\n paymentIntegrationService: PaymentIntegrationService,\n) => {\n const { getHost } = paymentIntegrationService.getState();\n\n return new PayPalCommerceIntegrationService(\n createFormPoster(),\n paymentIntegrationService,\n new PayPalCommerceRequestSender(createRequestSender({ host: getHost() })),\n new PayPalCommerceScriptLoader(getScriptLoader()),\n );\n};\n\nexport default createPayPalCommerceIntegrationService;\n","import { noop } from 'lodash';\n\nimport {\n CustomerCredentials,\n CustomerInitializeOptions,\n CustomerStrategy,\n DefaultCheckoutButtonHeight,\n ExecutePaymentMethodCheckoutOptions,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n ApproveCallbackActions,\n ApproveCallbackPayload,\n PayPalCommerceButtonsOptions,\n PayPalCommerceInitializationData,\n ShippingAddressChangeCallbackPayload,\n ShippingOptionChangeCallbackPayload,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceCreditCustomerInitializeOptions, {\n WithPayPalCommerceCreditCustomerInitializeOptions,\n} from './paypal-commerce-credit-customer-initialize-options';\n\nexport default class PayPalCommerceCreditCustomerStrategy implements CustomerStrategy {\n private onError = noop;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n ) {}\n\n async initialize(\n options: CustomerInitializeOptions & WithPayPalCommerceCreditCustomerInitializeOptions,\n ): Promise<void> {\n const { paypalcommercecredit, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!paypalcommercecredit) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.',\n );\n }\n\n if (!paypalcommercecredit.container) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercecredit.container\" argument is not provided.',\n );\n }\n\n if (paypalcommercecredit.onClick && typeof paypalcommercecredit.onClick !== 'function') {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercecredit.onClick\" argument is not a function.',\n );\n }\n\n this.onError = paypalcommercecredit.onError || noop;\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethod(methodId);\n\n if (!paymentMethod) {\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n }\n\n const paypalSdk = await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId);\n\n if (!paypalSdk || !paypalSdk.Buttons || typeof paypalSdk.Buttons !== 'function') {\n // eslint-disable-next-line no-console\n console.error(\n '[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK',\n );\n\n return;\n }\n\n this.renderButton(methodId, paypalcommercecredit);\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n await this.paymentIntegrationService.signInCustomer(credentials, options);\n }\n\n async signOut(options?: RequestOptions): Promise<void> {\n await this.paymentIntegrationService.signOutCustomer(options);\n }\n\n executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void> {\n options?.continueWithCheckoutCallback?.();\n\n return Promise.resolve();\n }\n\n private renderButton(\n methodId: string,\n paypalCommerceCredit: PayPalCommerceCreditCustomerInitializeOptions,\n ): void {\n const { container, onComplete, onClick } = paypalCommerceCredit;\n\n const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n const state = this.paymentIntegrationService.getState();\n const paymentMethod =\n state.getPaymentMethodOrThrow<PayPalCommerceInitializationData>(methodId);\n const {\n isHostedCheckoutEnabled,\n paymentButtonStyles,\n isServerSideShippingCallbacksEnabled,\n } = paymentMethod.initializationData || {};\n const { checkoutTopButtonStyles } = paymentButtonStyles || {};\n\n const defaultCallbacks = {\n createOrder: () =>\n this.paypalCommerceIntegrationService.createOrder('paypalcommercecredit'),\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n ...(onClick && { onClick: () => onClick() }),\n };\n\n const hostedCheckoutCallbacks = {\n ...(!isServerSideShippingCallbacksEnabled && {\n onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n this.onShippingAddressChange(data),\n onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n this.onShippingOptionsChange(data),\n }),\n onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n this.onHostedCheckoutApprove(\n data,\n actions,\n methodId,\n onComplete,\n isServerSideShippingCallbacksEnabled,\n ),\n };\n\n const fundingSources = [paypalSdk.FUNDING.PAYLATER, paypalSdk.FUNDING.CREDIT];\n let hasRenderedSmartButton = false;\n\n fundingSources.forEach((fundingSource) => {\n if (!hasRenderedSmartButton) {\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource,\n style: this.paypalCommerceIntegrationService.getValidButtonStyle({\n ...checkoutTopButtonStyles,\n height: DefaultCheckoutButtonHeight,\n }),\n ...defaultCallbacks,\n ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n };\n\n const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${container}`);\n hasRenderedSmartButton = true;\n }\n }\n });\n\n if (!hasRenderedSmartButton) {\n this.paypalCommerceIntegrationService.removeElement(container);\n }\n }\n\n private async onHostedCheckoutApprove(\n data: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n methodId: string,\n onComplete?: () => void,\n isServerSideShippingCallbacksEnabled?: boolean,\n ): Promise<void> {\n if (!data.orderID) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n\n try {\n const hasPhysicalItems = cart.lineItems.physicalItems.length > 0;\n\n if (!isServerSideShippingCallbacksEnabled) {\n const orderDetails = await actions.order.get();\n\n const billingAddress =\n this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(\n orderDetails,\n );\n\n await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n if (hasPhysicalItems) {\n const shippingAddress =\n this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(\n orderDetails,\n );\n\n await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n }\n }\n\n if (hasPhysicalItems) {\n await this.paypalCommerceIntegrationService.updateOrder(\n isServerSideShippingCallbacksEnabled,\n );\n }\n\n if (isServerSideShippingCallbacksEnabled) {\n await this.paymentIntegrationService.loadCheckout();\n }\n\n await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n await this.paypalCommerceIntegrationService.submitPayment(methodId, data.orderID);\n\n if (onComplete && typeof onComplete === 'function') {\n onComplete();\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private async onShippingAddressChange(\n data: ShippingAddressChangeCallbackPayload,\n ): Promise<void> {\n const address = this.paypalCommerceIntegrationService.getAddress({\n city: data.shippingAddress.city,\n countryCode: data.shippingAddress.countryCode,\n postalCode: data.shippingAddress.postalCode,\n stateOrProvinceCode: data.shippingAddress.state,\n });\n\n try {\n // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n // on this stage we don't have access to valid customer's address except shipping data\n await this.paymentIntegrationService.updateBillingAddress(address);\n await this.paymentIntegrationService.updateShippingAddress(address);\n\n const shippingOption = this.paypalCommerceIntegrationService.getShippingOptionOrThrow();\n\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalCommerceIntegrationService.updateOrder();\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private async onShippingOptionsChange(\n data: ShippingOptionChangeCallbackPayload,\n ): Promise<void> {\n const shippingOption = this.paypalCommerceIntegrationService.getShippingOptionOrThrow(\n data.selectedShippingOption.id,\n );\n\n try {\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalCommerceIntegrationService.updateOrder();\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private handleError(error: unknown) {\n if (typeof this.onError === 'function') {\n this.onError(error);\n } else {\n throw error;\n }\n }\n}\n","import {\n CustomerStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceCreditCustomerStrategy from './paypal-commerce-credit-customer-strategy';\n\nconst createPayPalCommerceCreditCustomerStrategy: CustomerStrategyFactory<\n PayPalCommerceCreditCustomerStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceCreditCustomerStrategy(\n paymentIntegrationService,\n createPayPalCommerceIntegrationService(paymentIntegrationService),\n );\n\nexport default toResolvableModule(createPayPalCommerceCreditCustomerStrategy, [\n { id: 'paypalcommercecredit' },\n]);\n","import {\n CustomerCredentials,\n CustomerInitializeOptions,\n CustomerStrategy,\n DefaultCheckoutButtonHeight,\n ExecutePaymentMethodCheckoutOptions,\n InvalidArgumentError,\n PaymentIntegrationService,\n RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n ApproveCallbackPayload,\n PayPalCommerceButtonsOptions,\n PayPalCommerceInitializationData,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceVenmoCustomerInitializeOptions, {\n WithPayPalCommerceVenmoCustomerInitializeOptions,\n} from './paypal-commerce-venmo-customer-initialize-options';\n\nexport default class PayPalCommerceVenmoCustomerStrategy implements CustomerStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n ) {}\n\n async initialize(\n options: CustomerInitializeOptions & WithPayPalCommerceVenmoCustomerInitializeOptions,\n ): Promise<void> {\n const { paypalcommercevenmo, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!paypalcommercevenmo) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.',\n );\n }\n\n if (!paypalcommercevenmo.container) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercevenmo.container\" argument is not provided.',\n );\n }\n\n if (paypalcommercevenmo.onClick && typeof paypalcommercevenmo.onClick !== 'function') {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercevenmo.onClick\" argument is not a function.',\n );\n }\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethod(methodId);\n\n if (!paymentMethod) {\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n }\n\n const paypalSdk = await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId);\n\n if (!paypalSdk || !paypalSdk.Buttons || typeof paypalSdk.Buttons !== 'function') {\n // eslint-disable-next-line no-console\n console.error(\n '[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK',\n );\n\n return;\n }\n\n this.renderButton(methodId, paypalcommercevenmo);\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n await this.paymentIntegrationService.signInCustomer(credentials, options);\n }\n\n async signOut(options?: RequestOptions): Promise<void> {\n await this.paymentIntegrationService.signOutCustomer(options);\n }\n\n executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void> {\n options?.continueWithCheckoutCallback?.();\n\n return Promise.resolve();\n }\n\n private renderButton(\n methodId: string,\n paypalcommercevenmo: PayPalCommerceVenmoCustomerInitializeOptions,\n ): void {\n const { container, onClick } = paypalcommercevenmo;\n\n const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n const state = this.paymentIntegrationService.getState();\n const paymentMethod =\n state.getPaymentMethodOrThrow<PayPalCommerceInitializationData>(methodId);\n const { paymentButtonStyles } = paymentMethod.initializationData || {};\n const { checkoutTopButtonStyles } = paymentButtonStyles || {};\n\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource: paypalSdk.FUNDING.VENMO,\n style: this.paypalCommerceIntegrationService.getValidButtonStyle({\n ...checkoutTopButtonStyles,\n height: DefaultCheckoutButtonHeight,\n }),\n createOrder: () =>\n this.paypalCommerceIntegrationService.createOrder('paypalcommercevenmo'),\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n ...(onClick && { onClick: () => onClick() }),\n };\n\n const paypalButtonRender = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${container}`);\n } else {\n this.paypalCommerceIntegrationService.removeElement(container);\n }\n }\n}\n","import {\n CustomerStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceVenmoCustomerStrategy from './paypal-commerce-venmo-customer-strategy';\n\nconst createPayPalCommerceVenmoCustomerStrategy: CustomerStrategyFactory<\n PayPalCommerceVenmoCustomerStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceVenmoCustomerStrategy(\n paymentIntegrationService,\n createPayPalCommerceIntegrationService(paymentIntegrationService),\n );\n\nexport default toResolvableModule(createPayPalCommerceVenmoCustomerStrategy, [\n { id: 'paypalcommercevenmo' },\n]);\n","import {\n CustomerCredentials,\n CustomerInitializeOptions,\n CustomerStrategy,\n ExecutePaymentMethodCheckoutOptions,\n InvalidArgumentError,\n PaymentIntegrationService,\n RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n getFastlaneStyles,\n PayPalFastlaneAuthenticationResult,\n PayPalFastlaneAuthenticationState,\n PayPalFastlaneStylesOption,\n PayPalFastlaneUtils,\n PayPalInitializationData,\n PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceFastlaneCustomerInitializeOptions, {\n WithPayPalCommerceFastlaneCustomerInitializeOptions,\n} from './paypal-commerce-fastlane-customer-initialize-options';\n\nexport default class PayPalCommerceFastlaneCustomerStrategy implements CustomerStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalSdkScriptLoader: PayPalSdkScriptLoader,\n private paypalFastlaneUtils: PayPalFastlaneUtils,\n ) {}\n\n async initialize(\n options: CustomerInitializeOptions & WithPayPalCommerceFastlaneCustomerInitializeOptions,\n ): Promise<void> {\n const { methodId, paypalcommercefastlane } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"methodId\" argument is not provided.',\n );\n }\n\n try {\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n const isTestModeEnabled = !!paymentMethod.initializationData?.isDeveloperModeApplicable;\n\n const paypalFastlaneSdk = await this.paypalSdkScriptLoader.getPayPalFastlaneSdk(\n paymentMethod,\n cart.currency.code,\n cart.id,\n state.getLocale(),\n );\n\n await this.paypalFastlaneUtils.initializePayPalFastlane(\n paypalFastlaneSdk,\n isTestModeEnabled,\n this.getFastlaneStyles(methodId, paypalcommercefastlane),\n );\n } catch (_) {\n // TODO: add logger to be able to debug issues if there any\n // Info: Do not throw anything here to avoid blocking customer from passing checkout flow\n }\n\n return Promise.resolve();\n }\n\n async deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n await this.paymentIntegrationService.signInCustomer(credentials, options);\n\n await this.paymentIntegrationService.updatePaymentProviderCustomer({\n authenticationState: undefined,\n addresses: undefined,\n instruments: undefined,\n });\n\n this.paypalFastlaneUtils.removeStorageSessionId();\n }\n\n async signOut(options?: RequestOptions): Promise<void> {\n await this.paymentIntegrationService.signOutCustomer(options);\n }\n\n async executePaymentMethodCheckout(\n options?: ExecutePaymentMethodCheckoutOptions,\n ): Promise<void> {\n const { checkoutPaymentMethodExecuted, continueWithCheckoutCallback, methodId } =\n options || {};\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"methodId\" argument is not provided.',\n );\n }\n\n if (typeof continueWithCheckoutCallback !== 'function') {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.',\n );\n }\n\n const state = this.paymentIntegrationService.getState();\n const customer = state.getCustomerOrThrow();\n\n if (customer.isGuest) {\n if (\n checkoutPaymentMethodExecuted &&\n typeof checkoutPaymentMethodExecuted === 'function'\n ) {\n checkoutPaymentMethodExecuted();\n }\n\n try {\n await this.runPayPalAuthenticationFlowOrThrow(methodId);\n } catch (_) {\n // TODO: add logger to be able to debug issues if there any\n // Info: Do not throw anything here to avoid blocking customer from passing checkout flow\n }\n }\n\n continueWithCheckoutCallback();\n }\n\n /**\n *\n * Authentication flow methods\n *\n */\n private async runPayPalAuthenticationFlowOrThrow(methodId: string): Promise<void> {\n const state = this.paymentIntegrationService.getState();\n const cartId = state.getCartOrThrow().id;\n const customer = state.getCustomer();\n const billingAddress = state.getBillingAddress();\n const customerEmail = customer?.email || billingAddress?.email || '';\n\n const { customerContextId } = await this.paypalFastlaneUtils.lookupCustomerOrThrow(\n customerEmail,\n );\n\n const authenticationResult =\n await this.paypalFastlaneUtils.triggerAuthenticationFlowOrThrow(customerContextId);\n\n const isAuthenticationFlowCanceled =\n authenticationResult.authenticationState === PayPalFastlaneAuthenticationState.CANCELED;\n\n await this.updateCustomerDataState(methodId, authenticationResult);\n\n if (isAuthenticationFlowCanceled) {\n this.paypalFastlaneUtils.removeStorageSessionId();\n } else {\n this.paypalFastlaneUtils.updateStorageSessionId(cartId);\n }\n }\n\n private async updateCustomerDataState(\n methodId: string,\n authenticationResult: PayPalFastlaneAuthenticationResult,\n ): Promise<void> {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n\n const { authenticationState, addresses, billingAddress, shippingAddress, instruments } =\n this.paypalFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(\n methodId,\n authenticationResult,\n );\n\n await this.paymentIntegrationService.updatePaymentProviderCustomer({\n authenticationState,\n addresses,\n instruments,\n });\n\n if (billingAddress) {\n await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n }\n\n if (shippingAddress && cart.lineItems.physicalItems.length > 0) {\n const updatedState = await this.paymentIntegrationService.updateShippingAddress(\n shippingAddress,\n );\n\n const paymentMethod =\n updatedState.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const { isFastlaneShippingOptionAutoSelectEnabled } =\n paymentMethod.initializationData || {};\n const consignments = updatedState.getConsignments() || [];\n const availableShippingOptions = consignments[0]?.availableShippingOptions || [];\n const firstShippingOption = availableShippingOptions[0];\n const recommendedShippingOption = availableShippingOptions.find(\n (option) => option.isRecommended,\n );\n\n if (\n (recommendedShippingOption || firstShippingOption) &&\n isFastlaneShippingOptionAutoSelectEnabled\n ) {\n const shippingOptionId = recommendedShippingOption?.id || firstShippingOption.id;\n\n await this.paymentIntegrationService.selectShippingOption(shippingOptionId);\n }\n }\n }\n\n /**\n *\n * Fastlane styling methods\n *\n */\n private getFastlaneStyles(\n methodId: string,\n paypalcommercefastlane: PayPalCommerceFastlaneCustomerInitializeOptions | undefined,\n ): PayPalFastlaneStylesOption | undefined {\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n const { fastlaneStyles, isFastlaneStylingEnabled } = paymentMethod.initializationData || {};\n\n return getFastlaneStyles(\n isFastlaneStylingEnabled ? fastlaneStyles : {},\n paypalcommercefastlane?.styles,\n );\n }\n}\n","import {\n CustomerStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalFastlaneUtils,\n createPayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceFastlaneCustomerStrategy from './paypal-commerce-fastlane-customer-strategy';\n\nconst createPayPalCommerceFastlaneCustomerStrategy: CustomerStrategyFactory<\n PayPalCommerceFastlaneCustomerStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceFastlaneCustomerStrategy(\n paymentIntegrationService,\n createPayPalSdkScriptLoader(),\n createPayPalFastlaneUtils(),\n );\n\nexport default toResolvableModule(createPayPalCommerceFastlaneCustomerStrategy, [\n { id: 'paypalcommerceacceleratedcheckout' }, // this method id will be provided for users from test group\n { id: 'paypalcommercecreditcards' }, // this method id will be provided for users from control group\n]);\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n PaypalButtonCreationService,\n PayPalButtonOptions,\n PayPalInitializationData,\n PayPalIntegrationService,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceButtonInitializeOptions, {\n WithPayPalCommerceButtonInitializeOptions,\n} from './paypal-commerce-button-initialize-options';\n\nexport default class PayPalCommerceButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalIntegrationService: PayPalIntegrationService,\n private paypalButtonCreationService: PaypalButtonCreationService,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceButtonInitializeOptions,\n ): Promise<void> {\n const { paypalcommerce, containerId, methodId } = options;\n\n const isBuyNowFlow = Boolean(paypalcommerce?.buyNowInitializeOptions);\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!paypalcommerce) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.`,\n );\n }\n\n if (isBuyNowFlow && !paypalcommerce.currencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerce.currencyCode\" argument is not provided.`,\n );\n }\n\n if (\n isBuyNowFlow &&\n typeof paypalcommerce.buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n ) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommerce.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n );\n }\n\n if (!isBuyNowFlow) {\n // Info: default checkout should not be loaded for BuyNow flow,\n // since there is no checkout session available for that.\n await this.paymentIntegrationService.loadDefaultCheckout();\n }\n\n // Info: we are using provided currency code for buy now cart,\n // because checkout session is not available before buy now cart creation,\n // hence application will throw an error on getCartOrThrow method call\n const currencyCode = isBuyNowFlow\n ? paypalcommerce.currencyCode\n : this.paymentIntegrationService.getState().getCartOrThrow().currency.code;\n\n await this.paypalIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n this.renderButton(containerId, methodId, paypalcommerce);\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n methodId: string,\n paypalcommerce: PayPalCommerceButtonInitializeOptions,\n ): void {\n const { buyNowInitializeOptions, style, onComplete, onEligibilityFailure } = paypalcommerce;\n\n const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const { isHostedCheckoutEnabled, isServerSideShippingCallbacksEnabled } =\n paymentMethod.initializationData || {};\n\n const buyNowFlowCallbacks = {\n onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n };\n\n const buttonOptions: PayPalButtonOptions = {\n fundingSource: paypalSdk.FUNDING.PAYPAL,\n style: this.paypalIntegrationService.getValidButtonStyle(style),\n isServerSideShippingCallbacksEnabled,\n isHostedCheckoutEnabled,\n ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n ...(isHostedCheckoutEnabled && onComplete && { onPaymentComplete: () => onComplete() }),\n };\n\n const paypalButton = this.paypalButtonCreationService.createPayPalButton(\n 'paypalcommerce',\n methodId,\n buttonOptions,\n buyNowInitializeOptions,\n );\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${containerId}`);\n } else if (onEligibilityFailure && typeof onEligibilityFailure === 'function') {\n onEligibilityFailure();\n } else {\n this.paypalIntegrationService.removeElement(containerId);\n }\n }\n}\n","import {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n createPayPalIntegrationService,\n PaypalButtonCreationService,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceButtonStrategy from './paypal-commerce-button-strategy';\n\nconst createPayPalCommerceButtonStrategy: CheckoutButtonStrategyFactory<\n PayPalCommerceButtonStrategy\n> = (paymentIntegrationService) => {\n const paypalIntegrationService = createPayPalIntegrationService(paymentIntegrationService);\n const paypalButtonCreationService = new PaypalButtonCreationService(\n paymentIntegrationService,\n paypalIntegrationService,\n );\n\n return new PayPalCommerceButtonStrategy(\n paymentIntegrationService,\n paypalIntegrationService,\n paypalButtonCreationService,\n );\n};\n\nexport default toResolvableModule(createPayPalCommerceButtonStrategy, [{ id: 'paypalcommerce' }]);\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n ApproveCallbackActions,\n ApproveCallbackPayload,\n PayPalButtonsOptions,\n PayPalBuyNowInitializeOptions,\n PayPalInitializationData,\n PayPalIntegrationService,\n ShippingAddressChangeCallbackPayload,\n ShippingOptionChangeCallbackPayload,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCreditButtonInitializeOptions, {\n WithPayPalCommerceCreditButtonInitializeOptions,\n} from './paypal-commerce-credit-button-initialize-options';\n\nexport default class PayPalCommerceCreditButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalIntegrationService: PayPalIntegrationService,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceCreditButtonInitializeOptions,\n ): Promise<void> {\n const { paypalcommercecredit, containerId, methodId } = options;\n const { buyNowInitializeOptions, currencyCode: providedCurrencyCode } =\n paypalcommercecredit || {};\n\n const isBuyNowFlow = !!buyNowInitializeOptions;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!paypalcommercecredit) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.`,\n );\n }\n\n if (isBuyNowFlow && !providedCurrencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercecredit.currencyCode\" argument is not provided.`,\n );\n }\n\n if (\n isBuyNowFlow &&\n typeof buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n ) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercecredit.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n );\n }\n\n if (!isBuyNowFlow) {\n // Info: default checkout should not be loaded for BuyNow flow,\n // since there is no checkout session available for that.\n await this.paymentIntegrationService.loadDefaultCheckout();\n }\n\n const state = this.paymentIntegrationService.getState();\n\n // Info: we are using provided currency code for buy now cart,\n // because checkout session is not available before buy now cart creation,\n // hence application will throw an error on getCartOrThrow method call\n const currencyCode = isBuyNowFlow\n ? providedCurrencyCode\n : state.getCartOrThrow().currency.code;\n\n await this.paypalIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n this.renderButton(containerId, methodId, paypalcommercecredit);\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n methodId: string,\n paypalcommercecredit: PayPalCommerceCreditButtonInitializeOptions,\n ): void {\n const { buyNowInitializeOptions, style, onComplete, onEligibilityFailure } =\n paypalcommercecredit;\n\n const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n const { isHostedCheckoutEnabled, isServerSideShippingCallbacksEnabled } =\n paymentMethod.initializationData || {};\n\n const defaultCallbacks = {\n createOrder: () => this.paypalIntegrationService.createOrder('paypalcommercecredit'),\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalIntegrationService.tokenizePayment(methodId, orderID),\n };\n\n const buyNowFlowCallbacks = {\n onClick: () => this.handleClick(buyNowInitializeOptions),\n onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n };\n\n const hostedCheckoutCallbacks = {\n ...(!isServerSideShippingCallbacksEnabled && {\n onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n this.onShippingAddressChange(data),\n onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n this.onShippingOptionsChange(data),\n }),\n onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n this.onHostedCheckoutApprove(\n data,\n actions,\n methodId,\n onComplete,\n isServerSideShippingCallbacksEnabled,\n ),\n };\n\n const fundingSources = [paypalSdk.FUNDING.PAYLATER, paypalSdk.FUNDING.CREDIT];\n let hasRenderedSmartButton = false;\n\n fundingSources.forEach((fundingSource) => {\n if (!hasRenderedSmartButton) {\n const buttonRenderOptions: PayPalButtonsOptions = {\n fundingSource,\n style: this.paypalIntegrationService.getValidButtonStyle(style),\n ...defaultCallbacks,\n ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n };\n\n const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${containerId}`);\n hasRenderedSmartButton = true;\n } else if (onEligibilityFailure && typeof onEligibilityFailure === 'function') {\n onEligibilityFailure();\n }\n }\n });\n\n if (!hasRenderedSmartButton) {\n this.paypalIntegrationService.removeElement(containerId);\n }\n }\n\n private async handleClick(\n buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n ): Promise<void> {\n if (buyNowInitializeOptions) {\n const buyNowCart = await this.paypalIntegrationService.createBuyNowCartOrThrow(\n buyNowInitializeOptions,\n );\n\n await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n }\n }\n\n private async onHostedCheckoutApprove(\n data: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n methodId: string,\n onComplete?: () => void,\n isServerSideShippingCallbacksEnabled?: boolean,\n ): Promise<boolean> {\n if (!data.orderID) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n\n try {\n const hasPhysicalItems = cart.lineItems.physicalItems.length > 0;\n\n if (!isServerSideShippingCallbacksEnabled) {\n const orderDetails = await actions.order.get();\n\n const billingAddress =\n this.paypalIntegrationService.getBillingAddressFromOrderDetails(orderDetails);\n\n await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n if (hasPhysicalItems) {\n const shippingAddress =\n this.paypalIntegrationService.getShippingAddressFromOrderDetails(\n orderDetails,\n );\n\n await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n }\n }\n\n if (hasPhysicalItems) {\n await this.paypalIntegrationService.updateOrder(\n 'paypalcommerce',\n undefined,\n undefined,\n isServerSideShippingCallbacksEnabled,\n );\n }\n\n if (isServerSideShippingCallbacksEnabled) {\n await this.paymentIntegrationService.loadCheckout();\n }\n\n await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n\n await this.paypalIntegrationService.submitPayment(methodId, data.orderID);\n\n if (onComplete && typeof onComplete === 'function') {\n onComplete();\n }\n\n return true; // FIXME: Do we really need to return true here?\n } catch (error) {\n if (typeof error === 'string') {\n throw new Error(error);\n }\n\n throw error;\n }\n }\n\n private async onShippingAddressChange(\n data: ShippingAddressChangeCallbackPayload,\n ): Promise<void> {\n const address = this.paypalIntegrationService.getAddress({\n city: data.shippingAddress.city,\n countryCode: data.shippingAddress.countryCode,\n postalCode: data.shippingAddress.postalCode,\n stateOrProvinceCode: data.shippingAddress.state,\n });\n\n try {\n // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n // on this stage we don't have access to valid customer's address accept shipping data\n await this.paymentIntegrationService.updateBillingAddress(address);\n await this.paymentIntegrationService.updateShippingAddress(address);\n\n const shippingOption = this.paypalIntegrationService.getShippingOptionOrThrow();\n\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalIntegrationService.updateOrder('paypalcommerce');\n } catch (error) {\n if (typeof error === 'string') {\n throw new Error(error);\n }\n\n throw error;\n }\n }\n\n private async onShippingOptionsChange(\n data: ShippingOptionChangeCallbackPayload,\n ): Promise<void> {\n const shippingOption = this.paypalIntegrationService.getShippingOptionOrThrow(\n data.selectedShippingOption.id,\n );\n\n try {\n await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n await this.paypalIntegrationService.updateOrder('paypalcommerce');\n } catch (error) {\n if (typeof error === 'string') {\n throw new Error(error);\n }\n\n throw error;\n }\n }\n}\n","import {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { createPayPalIntegrationService } from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCreditButtonStrategy from './paypal-commerce-credit-button-strategy';\n\nconst createPayPalCommerceCreditButtonStrategy: CheckoutButtonStrategyFactory<\n PayPalCommerceCreditButtonStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceCreditButtonStrategy(\n paymentIntegrationService,\n createPayPalIntegrationService(paymentIntegrationService),\n );\n\nexport default toResolvableModule(createPayPalCommerceCreditButtonStrategy, [\n { id: 'paypalcommercecredit' },\n]);\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n ApproveCallbackPayload,\n PayPalButtonStyleOptions,\n PayPalBuyNowInitializeOptions,\n PayPalCommerceButtonsOptions,\n StyleButtonColor,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceVenmoButtonInitializeOptions, {\n WithPayPalCommerceVenmoButtonInitializeOptions,\n} from './paypal-commerce-venmo-button-initialize-options';\n\nexport default class PayPalCommerceVenmoButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceVenmoButtonInitializeOptions,\n ): Promise<void> {\n const { paypalcommercevenmo, containerId, methodId } = options;\n const { buyNowInitializeOptions, currencyCode: providedCurrencyCode } =\n paypalcommercevenmo || {};\n\n const isBuyNowFlow = !!buyNowInitializeOptions;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!paypalcommercevenmo) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.`,\n );\n }\n\n if (isBuyNowFlow && !providedCurrencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercevenmo.currencyCode\" argument is not provided.`,\n );\n }\n\n if (\n isBuyNowFlow &&\n typeof buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n ) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercevenmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n );\n }\n\n if (!isBuyNowFlow) {\n // Info: default checkout should not be loaded for BuyNow flow,\n // since there is no checkout session available for that.\n await this.paymentIntegrationService.loadDefaultCheckout();\n }\n\n // Info: we are using provided currency code for buy now cart,\n // because checkout session is not available before buy now cart creation,\n // hence application will throw an error on getCartOrThrow method call\n const currencyCode = isBuyNowFlow\n ? providedCurrencyCode\n : this.paymentIntegrationService.getState().getCartOrThrow().currency.code;\n\n await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n this.renderButton(containerId, methodId, paypalcommercevenmo);\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n methodId: string,\n paypalcommercevenmo: PayPalCommerceVenmoButtonInitializeOptions,\n ): void {\n const { buyNowInitializeOptions, style, onEligibilityFailure } = paypalcommercevenmo;\n\n const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n const fundingSource = paypalSdk.FUNDING.VENMO;\n\n const defaultCallbacks = {\n createOrder: () =>\n this.paypalCommerceIntegrationService.createOrder('paypalcommercevenmo'),\n onApprove: ({ orderID }: ApproveCallbackPayload) =>\n this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n };\n\n const buyNowFlowCallbacks = {\n onClick: () => this.handleClick(buyNowInitializeOptions),\n onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n };\n\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource,\n style: this.getValidVenmoButtonStyles(style),\n ...defaultCallbacks,\n ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n };\n\n const paypalButtonRender = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n } else if (onEligibilityFailure && typeof onEligibilityFailure === 'function') {\n onEligibilityFailure();\n } else {\n this.paypalCommerceIntegrationService.removeElement(containerId);\n }\n }\n\n private getValidVenmoButtonStyles(style: PayPalButtonStyleOptions | undefined) {\n const validButtonStyle = this.paypalCommerceIntegrationService.getValidButtonStyle(style);\n\n if (validButtonStyle.color === StyleButtonColor.gold) {\n return {\n ...validButtonStyle,\n color: undefined,\n };\n }\n\n return validButtonStyle;\n }\n\n private async handleClick(\n buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n ): Promise<void> {\n if (buyNowInitializeOptions) {\n const buyNowCart = await this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(\n buyNowInitializeOptions,\n );\n\n await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n }\n }\n}\n","import {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceVenmoButtonStrategy from './paypal-commerce-venmo-button-strategy';\n\nconst createPayPalCommerceVenmoButtonStrategy: CheckoutButtonStrategyFactory<\n PayPalCommerceVenmoButtonStrategy\n> = (paymentIntegrationService) =>\n new PayPalCommerceVenmoButtonStrategy(\n paymentIntegrationService,\n createPayPalCommerceIntegrationService(paymentIntegrationService),\n );\n\nexport default toResolvableModule(createPayPalCommerceVenmoButtonStrategy, [\n { id: 'paypalcommercevenmo' },\n]);\n","import { Response } from '@bigcommerce/request-sender';\nimport { isNil, omitBy } from 'lodash';\n\nimport {\n MissingDataError,\n MissingDataErrorType,\n PaymentMethod,\n PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n AddressRequestBody,\n BillingAddressResponse,\n GraphQLRequestOptions,\n WalletButtonIntegrationService,\n} from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport PayPalCommerceScriptLoader from './paypal-commerce-script-loader';\nimport {\n PayPalButtonStyleOptions,\n PayPalCommerceInitializationData,\n PayPalSDK,\n StyleButtonColor,\n StyleButtonLabel,\n StyleButtonShape,\n} from './paypal-commerce-types';\n\nexport default class PaypalCommerceWalletService {\n private paypalSdk?: PayPalSDK;\n\n constructor(\n private walletButtonIntegrationService: WalletButtonIntegrationService,\n private paypalCommerceScriptLoader: PayPalCommerceScriptLoader,\n ) {}\n\n /**\n *\n * PayPalSDK methods\n *\n */\n async loadPayPalSdk(\n paymentMethod: PaymentMethod<PayPalCommerceInitializationData>,\n providedCurrencyCode: string,\n initializesOnCheckoutPage?: boolean,\n forceLoad?: boolean,\n ): Promise<PayPalSDK | undefined> {\n this.paypalSdk = await this.paypalCommerceScriptLoader.getPayPalSDK(\n paymentMethod,\n providedCurrencyCode,\n undefined,\n initializesOnCheckoutPage,\n forceLoad,\n );\n\n return this.paypalSdk;\n }\n\n getPayPalSdkOrThrow(): PayPalSDK {\n if (!this.paypalSdk) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.paypalSdk;\n }\n\n /**\n *\n * Payment submitting and tokenizing methods\n *\n */\n async proxyTokenizationPayment(\n cartId: string,\n providerId: string,\n methodId: string,\n orderId?: string,\n ): Promise<void> {\n if (!orderId) {\n throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n }\n\n const inputData = {\n paymentWalletData: {\n providerId,\n providerOrderId: orderId,\n },\n cartEntityId: cartId,\n queryParams: [\n { key: 'payment_type', value: 'paypal' },\n { key: 'action', value: 'set_external_checkout' },\n { key: 'provider', value: methodId },\n ],\n };\n\n const response = await this.walletButtonIntegrationService.getRedirectToCheckoutUrl(\n inputData,\n );\n\n if (!response.body.redirectUrls?.externalCheckoutUrl) {\n throw new Error('Failed to redirection to checkout page');\n }\n\n window.location.assign(response.body.redirectUrls.externalCheckoutUrl);\n }\n\n async createPaymentOrderIntent(\n providerId: string,\n cartId: string,\n options?: GraphQLRequestOptions,\n ): Promise<string> {\n const inputData = {\n cartEntityId: cartId,\n paymentWalletEntityId: providerId,\n };\n const response = await this.walletButtonIntegrationService.createPaymentOrderIntent(\n inputData,\n options,\n );\n\n return response.body.orderId;\n }\n\n async addBillingAddress(\n cartId: string,\n address: AddressRequestBody,\n options?: GraphQLRequestOptions,\n ): Promise<Response<BillingAddressResponse>> {\n return this.walletButtonIntegrationService.addBillingAddress(cartId, address, options);\n }\n\n /**\n *\n * Buttons style methods\n *\n */\n getValidButtonStyle(style?: PayPalButtonStyleOptions): PayPalButtonStyleOptions {\n const { color, height, label, shape } = style || {};\n\n const validStyles = {\n color: color && StyleButtonColor[color] ? color : undefined,\n height: this.getValidHeight(height),\n label: label && StyleButtonLabel[label] ? label : undefined,\n shape: shape && StyleButtonShape[shape] ? shape : undefined,\n };\n\n return omitBy(validStyles, isNil);\n }\n\n getValidHeight(height?: number): number {\n const defaultHeight = 40;\n const minHeight = 25;\n const maxHeight = 55;\n\n if (!height || typeof height !== 'number') {\n return defaultHeight;\n }\n\n if (height > maxHeight) {\n return maxHeight;\n }\n\n if (height < minHeight) {\n return minHeight;\n }\n\n return height;\n }\n\n /**\n *\n * Utils methods\n *\n */\n removeElement(elementId?: string): void {\n const element = elementId && document.getElementById(elementId);\n\n if (element) {\n // For now this is a temporary solution, further removeElement method will be removed\n element.style.display = 'none';\n }\n }\n}\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PayPalCommerceInitializationData } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\nimport { AddressRequestBody } from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport {\n ApproveCallbackActions,\n ApproveCallbackPayload,\n PayPalButtonStyleOptions,\n PayPalCommerceButtonsOptions,\n PayPalOrderDetails,\n} from '../paypal-commerce-types';\nimport PaypalCommerceWalletService from '../paypal-commerce-wallet-service';\n\nimport { WithPayPalCommerceWalletInitializeOptions } from './paypal-commerce-wallet-initialize-options';\n\nexport default class PaypalCommerceWalletStrategy implements CheckoutButtonStrategy {\n constructor(private paypalCommerceHeadlessWalletButtonService: PaypalCommerceWalletService) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceWalletInitializeOptions,\n ): Promise<void> {\n const { paypalcommercepaypal, containerId, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n );\n }\n\n if (!paypalcommercepaypal) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.paypalcommercepaypal\" argument is not provided.`,\n );\n }\n\n let parsedInitializationData: PaymentMethod<PayPalCommerceInitializationData>;\n\n try {\n parsedInitializationData = JSON.parse(atob(paypalcommercepaypal.initializationData));\n } catch {\n throw new InvalidArgumentError(\"Failed to parse payment method 'initializationData'.\");\n }\n\n const buttonStyle =\n parsedInitializationData.initializationData?.paymentButtonStyles?.cartButtonStyles;\n\n await this.paypalCommerceHeadlessWalletButtonService.loadPayPalSdk(\n parsedInitializationData,\n paypalcommercepaypal.currency.code,\n false,\n );\n\n this.renderButton(\n containerId,\n 'paypalcommerce.paypal',\n paypalcommercepaypal.cartId,\n buttonStyle,\n );\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n providerId: string,\n cartId: string,\n buttonStyle?: PayPalButtonStyleOptions,\n ): void {\n const paypalSdk = this.paypalCommerceHeadlessWalletButtonService.getPayPalSdkOrThrow();\n\n const defaultCallbacks = {\n createOrder: () =>\n this.paypalCommerceHeadlessWalletButtonService.createPaymentOrderIntent(\n providerId,\n cartId,\n ),\n onApprove: async (\n { orderID }: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n ) => {\n const orderDetails = await actions.order.get();\n const billingAddress = this.mapOrderDetailsToBillingAddress(orderDetails);\n\n await this.paypalCommerceHeadlessWalletButtonService.addBillingAddress(\n cartId,\n billingAddress,\n );\n await this.paypalCommerceHeadlessWalletButtonService.proxyTokenizationPayment(\n cartId,\n providerId,\n 'paypalcommerce',\n orderID,\n );\n },\n };\n\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource: paypalSdk.FUNDING.PAYPAL,\n style: this.paypalCommerceHeadlessWalletButtonService.getValidButtonStyle(buttonStyle),\n ...defaultCallbacks,\n };\n\n const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${containerId}`);\n } else {\n this.paypalCommerceHeadlessWalletButtonService.removeElement(containerId);\n }\n }\n\n private mapOrderDetailsToBillingAddress(orderDetails: PayPalOrderDetails): AddressRequestBody {\n const { payer } = orderDetails;\n\n return {\n firstName: payer.name.given_name,\n lastName: payer.name.surname,\n company: '',\n address1: payer.address.address_line_1,\n address2: payer.address.address_line_2,\n city: payer.address.admin_area_2,\n email: payer.email_address,\n stateOrProvince: payer.address.admin_area_1 ?? '',\n stateOrProvinceCode: payer.address.admin_area_1 ?? '',\n countryCode: payer.address.country_code,\n postalCode: payer.address.postal_code,\n phone: payer.phone?.phone_number.national_number ?? '',\n shouldSaveAddress: false,\n };\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { toResolvableModule } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { WalletPaymentButtonStrategyFactory } from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport PayPalCommerceScriptLoader from '../paypal-commerce-script-loader';\nimport PaypalCommerceWalletService from '../paypal-commerce-wallet-service';\n\nimport PaypalCommerceWalletStrategy from './paypal-commerce-wallet-strategy';\n\nconst createPaypalCommerceWalletStrategy: WalletPaymentButtonStrategyFactory<\n PaypalCommerceWalletStrategy\n> = (walletButtonIntegrationService) =>\n new PaypalCommerceWalletStrategy(\n new PaypalCommerceWalletService(\n walletButtonIntegrationService,\n new PayPalCommerceScriptLoader(getScriptLoader()),\n ),\n );\n\nexport default toResolvableModule(createPaypalCommerceWalletStrategy, [\n { id: 'paypalcommercepaypal' },\n]);\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PayPalCommerceInitializationData } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\nimport { AddressRequestBody } from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport {\n ApproveCallbackActions,\n ApproveCallbackPayload,\n PayPalButtonStyleOptions,\n PayPalCommerceButtonsOptions,\n PayPalOrderDetails,\n} from '../paypal-commerce-types';\nimport PaypalCommerceWalletService from '../paypal-commerce-wallet-service';\n\nimport { WithPayPalCommerceCreditWalletInitializeOptions } from './paypal-commerce-credit-wallet-initialize-options';\n\nexport default class PayPalCommerceCreditWalletStrategy implements CheckoutButtonStrategy {\n constructor(private paypalCommerceHeadlessWalletButtonService: PaypalCommerceWalletService) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceCreditWalletInitializeOptions,\n ): Promise<void> {\n const { paypalcommercepaypalcredit, containerId, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.containerId\" argument is not provided.',\n );\n }\n\n if (!paypalcommercepaypalcredit) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercepaypalcredit\" argument is not provided.',\n );\n }\n\n let parsedInitializationData: PaymentMethod<PayPalCommerceInitializationData>;\n\n try {\n parsedInitializationData = JSON.parse(\n atob(paypalcommercepaypalcredit.initializationData),\n );\n } catch {\n throw new InvalidArgumentError(\"Failed to parse payment method 'initializationData'.\");\n }\n\n await this.paypalCommerceHeadlessWalletButtonService.loadPayPalSdk(\n parsedInitializationData,\n paypalcommercepaypalcredit.currency.code,\n false,\n );\n\n const buttonStyle =\n parsedInitializationData.initializationData?.paymentButtonStyles?.cartButtonStyles;\n\n this.renderButton(\n containerId,\n 'paypalcommerce.paypalcredit',\n paypalcommercepaypalcredit.cartId,\n buttonStyle,\n );\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n providerId: string,\n cartId: string,\n buttonStyle?: PayPalButtonStyleOptions,\n ): void {\n const paypalSdk = this.paypalCommerceHeadlessWalletButtonService.getPayPalSdkOrThrow();\n const fundingSources = [paypalSdk.FUNDING.PAYLATER, paypalSdk.FUNDING.CREDIT];\n\n const defaultCallbacks = {\n createOrder: () =>\n this.paypalCommerceHeadlessWalletButtonService.createPaymentOrderIntent(\n providerId,\n cartId,\n ),\n onApprove: async (\n { orderID }: ApproveCallbackPayload,\n actions: ApproveCallbackActions,\n ) => {\n const orderDetails = await actions.order.get();\n const billingAddress = this.mapOrderDetailsToBillingAddress(orderDetails);\n\n await this.paypalCommerceHeadlessWalletButtonService.addBillingAddress(\n cartId,\n billingAddress,\n );\n\n await this.paypalCommerceHeadlessWalletButtonService.proxyTokenizationPayment(\n cartId,\n providerId,\n 'paypalcommercecredit',\n orderID,\n );\n },\n };\n\n let hasRenderedSmartButton = false;\n\n fundingSources.forEach((fundingSource) => {\n if (!hasRenderedSmartButton) {\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource,\n style: this.paypalCommerceHeadlessWalletButtonService.getValidButtonStyle(\n buttonStyle,\n ),\n ...defaultCallbacks,\n };\n\n const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${containerId}`);\n hasRenderedSmartButton = true;\n }\n }\n });\n\n if (!hasRenderedSmartButton) {\n this.paypalCommerceHeadlessWalletButtonService.removeElement(containerId);\n }\n }\n\n private mapOrderDetailsToBillingAddress(orderDetails: PayPalOrderDetails): AddressRequestBody {\n const { payer } = orderDetails;\n\n return {\n firstName: payer.name.given_name,\n lastName: payer.name.surname,\n company: '',\n address1: payer.address.address_line_1,\n address2: payer.address.address_line_2,\n city: payer.address.admin_area_2,\n email: payer.email_address,\n stateOrProvince: payer.address.admin_area_1 ?? '',\n stateOrProvinceCode: payer.address.admin_area_1 ?? '',\n countryCode: payer.address.country_code,\n postalCode: payer.address.postal_code,\n phone: payer.phone?.phone_number.national_number ?? '',\n shouldSaveAddress: false,\n };\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { toResolvableModule } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { WalletPaymentButtonStrategyFactory } from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport PayPalCommerceScriptLoader from '../paypal-commerce-script-loader';\nimport PaypalCommerceWalletService from '../paypal-commerce-wallet-service';\n\nimport PayPalCommerceCreditWalletStrategy from './paypal-commerce-credit-wallet-strategy';\n\nconst createPayPalCommerceCreditWalletStrategy: WalletPaymentButtonStrategyFactory<\n PayPalCommerceCreditWalletStrategy\n> = (walletButtonIntegrationService) =>\n new PayPalCommerceCreditWalletStrategy(\n new PaypalCommerceWalletService(\n walletButtonIntegrationService,\n new PayPalCommerceScriptLoader(getScriptLoader()),\n ),\n );\n\nexport default toResolvableModule(createPayPalCommerceCreditWalletStrategy, [\n { id: 'paypalcommercepaypalcredit' },\n]);\n","import {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PayPalCommerceInitializationData } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\n\nimport {\n ApproveCallbackPayload,\n PayPalButtonStyleOptions,\n PayPalCommerceButtonsOptions,\n StyleButtonColor,\n} from '../paypal-commerce-types';\nimport PaypalCommerceWalletService from '../paypal-commerce-wallet-service';\n\nimport { WithPayPalCommerceVenmoWalletInitializeOptions } from './paypal-commerce-venmo-wallet-initialize-options';\n\nexport default class PayPalCommerceVenmoWalletStrategy implements CheckoutButtonStrategy {\n constructor(private paypalCommerceHeadlessWalletButtonService: PaypalCommerceWalletService) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithPayPalCommerceVenmoWalletInitializeOptions,\n ): Promise<void> {\n const { paypalcommercevenmo, containerId, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n );\n }\n\n if (!containerId) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.containerId\" argument is not provided.',\n );\n }\n\n if (!paypalcommercevenmo) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.',\n );\n }\n\n let parsedInitializationData: PaymentMethod<PayPalCommerceInitializationData>;\n\n try {\n parsedInitializationData = JSON.parse(atob(paypalcommercevenmo.initializationData));\n } catch {\n throw new InvalidArgumentError(\"Failed to parse payment method 'initializationData'.\");\n }\n\n const buttonStyle =\n parsedInitializationData.initializationData?.paymentButtonStyles?.cartButtonStyles;\n\n await this.paypalCommerceHeadlessWalletButtonService.loadPayPalSdk(\n parsedInitializationData,\n paypalcommercevenmo.currency.code,\n false,\n );\n\n this.renderButton(\n containerId,\n 'paypalcommerce.venmo',\n paypalcommercevenmo.cartId,\n buttonStyle,\n );\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n private renderButton(\n containerId: string,\n providerId: string,\n cartId: string,\n buttonStyle?: PayPalButtonStyleOptions,\n ): void {\n const paypalSdk = this.paypalCommerceHeadlessWalletButtonService.getPayPalSdkOrThrow();\n\n const defaultCallbacks = {\n createOrder: () =>\n this.paypalCommerceHeadlessWalletButtonService.createPaymentOrderIntent(\n providerId,\n cartId,\n ),\n onApprove: async ({ orderID }: ApproveCallbackPayload) => {\n await this.paypalCommerceHeadlessWalletButtonService.proxyTokenizationPayment(\n cartId,\n providerId,\n 'paypalcommercevenmo',\n orderID,\n );\n },\n };\n\n const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n fundingSource: paypalSdk.FUNDING.VENMO,\n style: this.getValidVenmoButtonStyles(buttonStyle),\n ...defaultCallbacks,\n };\n\n const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n if (paypalButton.isEligible()) {\n paypalButton.render(`#${containerId}`);\n } else {\n this.paypalCommerceHeadlessWalletButtonService.removeElement(containerId);\n }\n }\n\n private getValidVenmoButtonStyles(style: PayPalButtonStyleOptions | undefined) {\n const validButtonStyle =\n this.paypalCommerceHeadlessWalletButtonService.getValidButtonStyle(style);\n\n if (validButtonStyle.color === StyleButtonColor.gold) {\n return {\n ...validButtonStyle,\n color: undefined,\n };\n }\n\n return validButtonStyle;\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { toResolvableModule } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { WalletPaymentButtonStrategyFactory } from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport PayPalCommerceScriptLoader from '../paypal-commerce-script-loader';\nimport PaypalCommerceWalletService from '../paypal-commerce-wallet-service';\n\nimport PayPalCommerceVenmoWalletStrategy from './paypal-commerce-venmo-wallet-strategy';\n\nconst createPayPalCommerceVenmoWalletStrategy: WalletPaymentButtonStrategyFactory<\n PayPalCommerceVenmoWalletStrategy\n> = (walletButtonIntegrationService) =>\n new PayPalCommerceVenmoWalletStrategy(\n new PaypalCommerceWalletService(\n walletButtonIntegrationService,\n new PayPalCommerceScriptLoader(getScriptLoader()),\n ),\n );\n\nexport default toResolvableModule(createPayPalCommerceVenmoWalletStrategy, [\n { id: 'paypalcommercevenmo' },\n]);\n"],"names":["toResolvableModule","module","resolveIds","Object","assign","StandardError","Error","constructor","message","prototype","super","this","name","type","setPrototypeOf","__proto__","captureStackTrace","stack","PaymentMethodClientUnavailableError","MissingDataErrorType","MissingDataError","subtype","MissingBillingAddress","MissingCart","MissingConsignments","MissingCheckout","MissingCustomer","MissingCheckoutConfig","MissingOrderConfig","MissingOrder","MissingOrderId","MissingPayment","MissingPaymentToken","MissingPaymentMethod","MissingShippingAddress","getErrorMessage","LOADING_INDICATOR_STYLES","PAYPAL_SDK_SUPPORTED_LOCALES","transformLocaleToPayPalFormat","storeLanguage","locale","includes","language","region","split","toUpperCase","undefined","PayPalSdkScriptLoader","scriptLoader","window","getPayPalSDK","paymentMethod","currencyCode","initializesOnCheckoutPage","forceLoad","paypal","paypalSdkScriptConfig","getPayPalSdkScriptConfigOrThrow","loadPayPalSdk","getPayPalFastlaneSdk","sessionId","paypalFastlaneSdk","config","getPayPalFastlaneSdkConfiguration","getPayPalGooglePaySdk","paypalGooglePay","getPayPalGooglePaySdkScriptConfigOrThrow","getPayPalApmsSdk","paypalApms","getPayPalApmSdkConfiguration","getPayPalMessages","paypalMessages","paypalSdkMessagesConfig","getPayPalSdkMessagesConfiguration","_a","options","attributes","scriptOptions","transformConfig","scriptAttributes","scriptSrc","URLSearchParams","toString","loadScript","async","id","clientToken","initializationData","clientId","intent","merchantId","buyerCountry","attributionId","isVenmoEnabled","isHostedCheckoutEnabled","isPayPalCreditAvailable","isDeveloperModeApplicable","availableAlternativePaymentMethods","enabledAlternativePaymentMethods","isGooglePayEnabled","commit","shouldEnableCard","enableCardFunding","enableCreditFunding","enableVenmoFunding","googlePayComponent","cardFieldsComponent","disableFunding","filter","apm","enableFunding","length","components","currency","replace","enableAPMsFunding","disableAPMsFunding","transformedConfig","keys","forEach","key","value","Array","isArray","join","createPayPalSdkScriptLoader","__WEBPACK_EXTERNAL_MODULE__bigcommerce_script_loader_875b3e8f_getScriptLoader__","BuyNowCartCreationError","DEFAULT_RESPONSE","body","headers","status","RequestError","response","errors","CartSource","PayPalIntent","TDSecureVerificationMethod","TDSecureAuthenticationState","LiabilityShiftEnum","StyleButtonLabel","StyleButtonColor","StyleButtonShape","PayPalFastlaneAuthenticationState","NonInstantAlternativePaymentMethods","PayPalOrderStatus","PayPalIntegrationService","formPoster","paymentIntegrationService","paypalRequestSender","paypalSdkLoader","methodId","providedCurrencyCode","state","getState","getCartOrThrow","code","getPaymentMethodOrThrow","getLocale","paypalSdk","getPayPalSdkOrThrow","createBuyNowCartOrThrow","buyNowInitializeOptions","cartRequestBody","getBuyNowCartRequestBody","createBuyNowCart","error","createOrder","providerId","requestBody","cartId","orderId","createOrderCardFields","setupToken","updateOrder","isServerSideShippingCallbacksEnabled","cart","consignment","getConsignmentsOrThrow","availableShippingOptions","selectedShippingOption","_error","getOrderStatus","tokenizePayment","postForm","payment_type","action","provider","order_id","source","BuyNow","cart_id","submitPayment","gatewayId","paymentData","formattedPayload","vault_payment_instrument","set_as_default_stored_instrument","device_info","method_id","paypal_account","getShippingOptionOrThrow","selectedShippingOptionId","recommendedShippingOption","find","option","isRecommended","shippingOptionToSelect","shippingOptionId","getAddress","address","firstName","lastName","email","phone","company","address1","address2","city","countryCode","postalCode","stateOrProvince","stateOrProvinceCode","customFields","getBillingAddressFromOrderDetails","payer","given_name","surname","email_address","address_line_1","address_line_2","admin_area_2","country_code","postal_code","admin_area_1","_b","phone_number","national_number","getShippingAddressFromOrderDetails","orderDetails","purchase_units","full_name","shipping","getValidButtonStyle","style","color","height","label","shape","validStyles","getValidHeight","__WEBPACK_EXTERNAL_MODULE_lodash_omitBy__","__WEBPACK_EXTERNAL_MODULE_lodash_isNil__","removeElement","elementId","element","document","getElementById","display","INTERNAL_USE_ONLY","ContentType","content_type","SDK_VERSION_HEADERS","PayPalRequestSender","requestSender","url","Json","post","put","get","create_paypal_integration_service","getHost","__WEBPACK_EXTERNAL_MODULE__bigcommerce_form_poster_1cd9ef62_createFormPoster__","__WEBPACK_EXTERNAL_MODULE__bigcommerce_request_sender_01d1f546_createRequestSender__","host","DEFAULT_STYLES","size","backgroundColor","ROTATION_ANIMATION","LoadingIndicator","styles","containerStyles","defineAnimation","container","buildContainer","indicator","buildIndicator","appendChild","show","parentId","parent","visibility","opacity","hide","handleTransitionEnd","removeEventListener","addEventListener","createElement","bottom","left","width","position","right","top","transition","setStyleAttribute","borderRadius","border","borderColor","margin","transform","transformStyle","animation","attrs","k","setProperty","head","sheet","CSSStyleSheet","insertRule","InvalidArgumentError","PaymentArgumentInvalidError","invalidFields","PaymentMethodInvalidError","OrderFinalizationNotRequiredError","isHostedInstrumentLike","instrument","shouldSaveInstrument","shouldSetAsDefaultInstrument","isVaultedInstrument","Boolean","instrumentId","get_paypal_messages_styles_from_bnpl_config","messagesStyles","layout","logo","ratio","text","isBaseInstrument","PayPalCommercePaymentStrategy","paypalIntegrationService","payPalSdkScriptLoader","loadingIndicator","initialize","paypalcommerce","loadPaymentMethod","bannerContainerId","paypalBNPLConfiguration","console","bannerConfiguration","Messages","renderMessages","loadingIndicatorContainer","onInit","renderButton","shouldRenderPayPalButtonOnInitialization","execute","payload","payment","order","__rest","onError","isPayPalVaultedInstrumentPaymentData","paymentPayload","prepareVaultedInstrumentPaymentPayload","preparePaymentPayload","submitOrder","is_request_error","additional_action_required","isRedirectActionError","redirectUrl","data","redirect_url","Promise","location","isProviderError","_resolve","reject","paypalButton","close","handleError","finalize","deinitialize","resolve","paypalOrderId","shouldConfirmInstrument","isTrustedVaultingFlow","bigpay_token","token","paymentButtonStyles","checkoutPaymentButtonStyles","onRenderButton","onValidate","submitForm","containerId","getSmartButtonContainerId","buttonOptions","fundingSource","FUNDING","PAYPAL","onClick","_","actions","handleClick","onApprove","handleApprove","onCancel","toggleLoadingIndicator","Buttons","isEligible","render","orderID","fieldsValues","getFieldsValues","instruments","getInstruments","findInstrument","bigpayToken","trustedShippingAddress","isLoading","paypalMessagesOptions","amount","getCheckoutOrThrow","outstandingBalance","placement","isPaypalProviderError","_c","e","provider_error","create_paypal_commerce_payment_strategy","NotImplementedError","PayPalCommerceCreditPaymentStrategy","paypalcommercecredit","paypalOptions","paypal_commerce_credit_payment_strategy_rest","fundingSources","PAYLATER","CREDIT","hasRenderedSmartButton","create_paypal_commerce_credit_payment_strategy","PayPalCommerceVenmoPaymentStrategy","paypalcommercevenmo","paypal_commerce_venmo_payment_strategy_rest","VENMO","create_paypal_commerce_venmo_payment_strategy","paypal_commerce_constants_LOADING_INDICATOR_STYLES","TimeoutError","paypal_commerce_types_LiabilityShiftEnum","PayPalCommerceIntent","paypal_commerce_types_StyleButtonLabel","paypal_commerce_types_StyleButtonColor","paypal_commerce_types_StyleButtonShape","paypal_commerce_types_NonInstantAlternativePaymentMethods","paypal_commerce_types_PayPalOrderStatus","PayPalCommerceAlternativeMethodsPaymentStrategy","paypalCommerceIntegrationService","paypalSdkScriptLoader","pollingInterval","maxPollingIntervalTime","pollingTimer","stopPolling","__WEBPACK_EXTERNAL_MODULE_lodash_noop__","isOrderApprovedProcessing","paypalcommercealternativemethods","shouldRenderFields","features","getStoreConfigOrThrow","checkoutSettings","experimentName","fallbackValue","isExperimentEnabled","renderFields","paypal_commerce_alternative_methods_payment_strategy_rest","initializePollingMechanism","isNonInstantPaymentMethod","IDEAL","resetPollingMechanism","resolvePromise","rejectPromise","timeout","setTimeout","clearTimeout","orderStatus","isOrderApproved","Approved","isPollingError","PollingError","deinitializePollingMechanism","reinitializeStrategy","paypalAmpsSdk","getPaypalAmpsSdkOrThrow","buttonStyle","onInitButton","onCreateOrder","handleFailure","paypal_commerce_alternative_methods_payment_strategy_awaiter","OXXO","useStoreCredit","params","bcOrderId","getOrder","getBillingAddressOrThrow","apmFieldsContainer","apmFieldsStyles","fieldContainerElement","querySelector","innerHTML","fieldsOptions","fields","PaymentFields","create_paypal_commerce_alternative_methods_payment_strategy","gateway","UntrustedShippingCardVerificationType","CookieStorage","cookieKey","encodeURIComponent","cookie","firstIndex","indexOf","lastIndex","decodeURIComponent","substring","set","secure","cookieText","expires","path","domain","toUTCString","now","Date","minutes","setTime","getTime","remove","HostedFieldType","PaypalFastlaneUtils","initializePayPalFastlane","isTestModeEnabled","localStorage","setItem","paypalFastlane","defaultStyles","root","backgroundColorPrimary","Fastlane","getPayPalFastlaneOrThrow","lookupCustomerOrThrow","identity","lookupCustomerByEmail","triggerAuthenticationFlowOrThrow","customerContextId","triggerAuthenticationFlow","updateStorageSessionId","setDate","getDate","cookiesOption","removeStorageSessionId","getStorageSessionId","mapPayPalFastlaneProfileToBcCustomerData","authenticationResult","authenticationState","profileData","paypalBillingAddress","card","paymentSource","billingAddress","paypalShippingAddress","shippingAddress","paypalProfileName","paypalInstrument","mapPayPalToBcAddress","phoneNumber","mapPayPalToBcInstrument","addresses","filterAddresses","UNRECOGNIZED","brand","expiry","lastDigits","expiryYear","expiryMonth","defaultInstrument","iin","last4","method","untrustedShippingCardVerificationMode","PAN","mapBcToPayPalAddress","addressLine1","addressLine2","adminArea1","adminArea2","profileName","fullName","phoneData","nationalNumber","country","reduce","customerAddresses","currentAddress","some","customerAddress","isEqualAddresses","firstAddress","secondAddress","__WEBPACK_EXTERNAL_MODULE_lodash_isEqual__","normalizeAddress","__WEBPACK_EXTERNAL_MODULE_lodash_omit__","createPaypalFastlaneUtils","hosted_field_type","isCreditCardFormFields","CardNumber","CardName","CardExpiry","isCreditCardVaultedFormFields","CardNumberVerification","CardCodeVerification","CardExpiryVerification","PaymentMethodFailedError","NotInitializedErrorType","NotInitializedError","CustomerNotInitialized","PaymentNotInitialized","ShippingNotInitialized","SpamProtectionNotInitialized","not_initialized_error_getErrorMessage","PaymentInvalidFormError","details","PayPalCommerceCreditCardsPaymentStrategy","paypalFastlaneUtils","paypalcommercecreditcards","paypalCommerceInitializationOptions","form","onCreditCardFieldsRenderingError","onLoadComplete","hostedFormOptions","isCreditCardForm","isCreditCardVaultedForm","hasUndefinedValues","initializeFields","shouldInitializePayPalFastlane","initializePayPalFastlaneOrThrow","paypal_commerce_credit_cards_payment_strategy_rest","executionPaymentData","validateHostedFormOrThrow","submitHostedForm","getInstrumentParams","returnedOrderId","submitPaymentPayload","returnedVaultedToken","cvvField","expiryField","numberField","_d","nameField","nonce","verification_nonce","card_with_order","formOptions","executeCallback","getExecuteCallback","cardFieldsConfig","getInputStyles","vaultSetupToken","liabilityShift","No","Unknown","inputEvents","onChange","event","onChangeHandler","onFocus","onFocusHandler","onBlur","onBlurHandler","onInputSubmitRequest","cardFields","CardFields","stylizeInputContainers","renderVaultedFields","createVaultSetupTokenCallback","createOrderCallback","createVaultSetupToken","paypal_commerce_credit_cards_payment_strategy_awaiter","getCardFieldsOrThrow","cardCode","CVVField","placeholder","cardExpiry","ExpiryField","cardName","NameField","cardNumber","NumberField","cardCodeVerification","cardExpiryVerification","cardNumberVerification","getFieldTypeByEmittedField","emittedBy","fieldType","mapFieldType","submitConfig","submit","cardFieldsState","then","validationData","getValidityData","isValid","call","mapValidationErrors","updatedFields","cardNameField","fieldsKeys","every","fieldsErrors","getInvalidErrorByFieldType","CardCode","validationErrors","commonStyles","default","fontSize","fontFamily","fontWeight","outline","padding","input","values","boxShadow","background","marginBottom","marginLeft","onEnter","paymentProviderCustomer","getPaymentProviderCustomer","paypalCommercePaymentProviderCustomer","customer","isAcceleratedCheckoutEnabled","isPayPalCommerceAnalyticsV2Enabled","connectClientToken","payPalFastlaneSdk","create_paypal_commerce_credit_cards_payment_strategy","PaypalCommerceRatepayPaymentStrategy","paypalCommerceService","paypalcommerceratepay","legalTextContainer","loadingContainerId","createFraudNetScript","loadFraudnetConfig","renderLegalText","paypal_commerce_ratepay_payment_strategy_rest","metadataId","guid","ratepayBirthDate","ratepayPhoneNumber","ratepayPhoneCountryCode","rate_pay","birth_date","normalizeDate","fraudNetScript","querySelectorAll","fraudNetConfig","legalTextContainerElement","date","formattedDate","formatDate","formattedMonth","getMonth","getFullYear","legalTextContainerElementId","legalTextContainerId","buttonContainerId","buttonContainer","buttonContainerParent","parentNode","setAttribute","prepend","ratePayButton","Legal","PAY_UPON_INVOICE","testMode","scriptElement","generateGUID","f","s","sandbox","JSON","stringify","i","Math","floor","characters","random","script","src","useMetadata","PollingStop","create_paypal_commerce_ratepay_payment_strategy","PayPalCommerceRequestSender","isInvalidStyleOption","styleOption","getFastlaneStyles","styleSettings","uiStyles","fastlaneStyles","toggle","textBody","textCaption","caption","branding","cleanUpFastlaneStyles","fastlaneRootSettingsBackgroundColor","errorColor","fastlaneRootSettingsErrorColor","fastlaneRootSettingsFontFamily","fontSizeBase","fastlaneRootSettingsFontSize","fastlaneRootSettingsPadding","_e","primaryColor","fastlaneRootSettingsPrimaryColor","_f","fastlaneInputSettingsBorderRadius","_g","fastlaneInputSettingsBorderColor","_h","focusBorderColor","fastlaneInputSettingsFocusBorderBase","_j","fastlaneInputSettingsBackgroundColor","_k","borderWidth","fastlaneInputSettingsBorderWidth","_l","textColorBase","fastlaneInputSettingsTextColorBase","_m","colorPrimary","fastlaneToggleSettingsColorPrimary","_o","colorSecondary","fastlaneToggleSettingsColorSecondary","_p","fastlaneTextBodySettingsColor","_r","_q","fastlaneTextBodySettingsFontSize","_t","_s","fastlaneTextCaptionSettingsColor","_v","_u","fastlaneTextCaptionSettingsFontSize","_x","_w","fastlaneBrandingSettings","mergeFastlaneStyles","isPayPalFastlaneCustomer","PaypalCommerceFastlanePaymentStrategy","paypalCommerceRequestSender","paypalcommercefastlane","isFastlaneStylingEnabled","threeDSVerificationMethod","shouldRunAuthenticationFlow","runPayPalAuthenticationFlowOrThrow","initializePayPalPaymentComponent","renderPayPalPaymentComponent","handlePayPalStoredInstrumentChange","orderRequest","paypal_commerce_fastlane_payment_strategy_rest","isVaultedFlow","isPaypalFastlaneRequestError","invalidRequestError","translationKey","getCustomerOrThrow","paypalFastlaneCustomer","paypalFastlaneSessionId","isGuest","CANCELED","getCustomer","getBillingAddress","customerEmail","updatePaymentProviderCustomer","trim","cardComponentOptions","cardholderName","prefill","enabled","paypalComponentMethods","FastlaneCardComponent","getPayPalComponentMethodsOrThrow","is3dsEnabled","get3DSNonce","paypal_fastlane_token","getPaymentToken","fastlaneToken","getOrderOrThrow","checkoutUrl","links","checkoutLink","threeDomainSecureComponent","ThreeDomainSecureClient","threeDomainSecureParameters","orderAmount","toFixed","threeDSRequested","Always","transactionContext","experience_context","return_url","cancel_url","isThreeDomainSecureEligible","threeDSNonce","Errored","Cancelled","Succeeded","Yes","Possible","paypalAxoSdk","selectionChanged","selectedCard","profile","showCardSelector","selectedInstrument","create_paypal_commerce_fastlane_payment_strategy","paypal_button_creation_service","createPayPalButton","onPaymentComplete","hostedCheckoutCallbacks","onShippingAddressChange","onShippingOptionsChange","onHostedCheckoutApprove","paypal_button_creation_service_awaiter","buyNowCart","loadCheckout","onComplete","hasPhysicalItems","lineItems","physicalItems","updateBillingAddress","updateShippingAddress","shippingOption","selectShippingOption","PayPalCommerceCustomerStrategy","paypalButtonCreationService","getPaymentMethod","signIn","credentials","signInCustomer","signOut","signOutCustomer","executePaymentMethodCheckout","continueWithCheckoutCallback","checkoutTopButtonStyles","create_paypal_commerce_customer_strategy","PayPalCommerceIntegrationService","paypalCommerceScriptLoader","PayPalCommerceScriptLoader","loadPayPalSDK","paypalSdkScriptConfig_1","create_paypal_commerce_integration_service","PayPalCommerceCreditCustomerStrategy","paypalCommerceCredit","defaultCallbacks","buttonRenderOptions","create_paypal_commerce_credit_customer_strategy","PayPalCommerceVenmoCustomerStrategy","paypalButtonRender","create_paypal_commerce_venmo_customer_strategy","PayPalCommerceFastlaneCustomerStrategy","checkoutPaymentMethodExecuted","isAuthenticationFlowCanceled","updateCustomerDataState","updatedState","isFastlaneShippingOptionAutoSelectEnabled","getConsignments","firstShippingOption","create_paypal_commerce_fastlane_customer_strategy","PayPalCommerceButtonStrategy","isBuyNowFlow","loadDefaultCheckout","onEligibilityFailure","buyNowFlowCallbacks","create_paypal_commerce_button_strategy","PayPalCommerceCreditButtonStrategy","create_paypal_commerce_credit_button_strategy","PayPalCommerceVenmoButtonStrategy","getValidVenmoButtonStyles","validButtonStyle","gold","create_paypal_commerce_venmo_button_strategy","PaypalCommerceWalletService","walletButtonIntegrationService","proxyTokenizationPayment","inputData","paymentWalletData","providerOrderId","cartEntityId","queryParams","getRedirectToCheckoutUrl","redirectUrls","externalCheckoutUrl","createPaymentOrderIntent","paymentWalletEntityId","addBillingAddress","PaypalCommerceWalletStrategy","paypalCommerceHeadlessWalletButtonService","paypalcommercepaypal","parsedInitializationData","parse","atob","cartButtonStyles","actions_1","paypal_commerce_wallet_strategy_awaiter","mapOrderDetailsToBillingAddress","shouldSaveAddress","create_paypal_commerce_wallet_strategy","PayPalCommerceCreditWalletStrategy","paypalcommercepaypalcredit","paypal_commerce_credit_wallet_strategy_awaiter","create_paypal_commerce_credit_wallet_strategy","PayPalCommerceVenmoWalletStrategy","paypal_commerce_venmo_wallet_strategy_awaiter","create_paypal_commerce_venmo_wallet_strategy"],"sourceRoot":""}
|