@bigcommerce/checkout-sdk 1.943.2 → 1.945.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 +26 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrations/braintree.js","mappings":"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","sources":["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/braintree-utils/src/braintree.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-sdk-verison.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-sdk-scripts-integrity.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/not-initialized-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/types.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/isManageableBraintreeSDKVersion.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/unsupported-browser-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/utils/is-braintree-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-sdk.ts","webpack://@bigcommerce/checkout-sdk/./packages/utility/src/is-experiment-enabled/is-experiment-enabled.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-sdk-version-manager.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/to-resolvable-module.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/missing-data-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/payment/is-vaulted-instrument.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/errors/payment-method-failed-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/is-us-bank-account-instrument-like.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-ach/braintree-ach-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-ach/create-braintree-ach-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/create-braintree-sdk.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-invalid-form-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/load-paypal-sdk-once.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/paypal.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-integration-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/utils/is-credit-card-instrument-like.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-messages.ts","webpack://@bigcommerce/checkout-sdk/./packages/ui/src/overlay/overlay.ts","webpack://@bigcommerce/checkout-sdk/./packages/ui/src/overlay/overlay-style.ts","webpack://@bigcommerce/checkout-sdk/./packages/ui/src/loading-indicator/loading-indicator.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal-constants.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-method-cancelled-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/is-braintree-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/map-to-braintree-shipping-address-override.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal/braintree-paypal-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/is-braintree-paypal-provider-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal/create-braintree-paypal-payment-strategy.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/braintree-integration/src/braintree-request-sender.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/errors/request-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/timeout-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-local-payment-methods/braintree-local-methods-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-local-payment-methods/create-braintree-local-methods-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/utils/get-fastlane-styles.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/utils/is-braintree-accelerated-checkout-customer.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/payment/instrument.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-fastlane/braintree-fastlane-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/storage/src/cookie-storage.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-fastlane/braintree-fastlane-utils.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-fastlane/create-braintree-fastlane-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-visa-checkout/braintree-visa-checkout-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-visa-checkout/create-braintree-visa-checkout-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-venmo/braintree-venmo-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-venmo/create-braintree-venmo-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/utils/is-braintree-form-fields-map.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/utils/is-braintree-hosted-form-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-hosted-form/braintree-hosted-form.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/utils/is-braintree-supported-card-brand.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-credit-card/braintree-credit-card-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/is-request-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/utils/is-braintree-payment-request-3ds-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-credit-card/create-braintree-credit-card-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal/braintree-paypal-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/checkout-buttons/default-checkout-button-height.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal/create-braintree-paypal-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal-credit/braintree-paypal-credit-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal-credit/create-braintree-paypal-credit-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-fastlane/braintree-fastlane-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-fastlane/create-braintree-fastlane-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/not-implemented-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-visa-checkout/braintree-visa-checkout-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-visa-checkout/create-braintree-visa-checkout-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/buy-now-cart-creation-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/get-valid-button-style.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal/braintree-paypal-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal/create-braintree-paypal-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal-credit/braintree-paypal-credit-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal-credit/create-braintree-paypal-credit-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-visa-checkout/braintree-visa-checkout-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-visa-checkout/create-braintree-visa-checkout-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/map-to-legacy-billing-address.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/map-to-legacy-shipping-address.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-venmo/braintree-venmo-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/isUnsupportedBrowserError.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-venmo/create-braintree-venmo-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-headless-sdk-version-manager.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-paypal-wallet-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-paypal-wallet-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal/braintree-paypal-wallet-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal/create-braintree-paypal-wallet-strategy.ts"],"sourcesContent":["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 { Omit } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n PaypalAuthorizeData,\n PaypalButtonOptions,\n PaypalButtonRender,\n PaypalSDK,\n PaypalStyleOptions,\n} from './paypal';\nimport {\n BraintreeClientCreator,\n BraintreeDataCollectorCreator,\n BraintreeError,\n BraintreeFastlaneCreator,\n BraintreeGooglePaymentCreator,\n BraintreeHostedFieldsTokenizePayload,\n BraintreeModule,\n BraintreeModuleCreator,\n BraintreeModuleCreatorConfig,\n BraintreeThreeDSecureCreator,\n BraintreeTokenizationDetails,\n BraintreeUsBankAccountCreator,\n BraintreeWindow,\n FastlaneStylesSettings,\n VisaCheckoutSDK,\n} from './types';\nimport {\n VisaCheckoutInitOptions,\n VisaCheckoutPaymentSuccessPayload,\n VisaCheckoutTokenizedPayload,\n} from './visacheckout';\n\n/**\n *\n * Constants\n *\n */\nexport enum BraintreeEnv {\n Sandbox = 'sandbox',\n Production = 'production',\n}\n\n/**\n *\n * Common\n *\n */\nexport enum BraintreeModuleName {\n Client = 'client',\n DataCollector = 'dataCollector',\n Fastlane = 'fastlane',\n GooglePayment = 'googlePayment',\n HostedFields = 'hostedFields',\n LocalPayment = 'localPayment',\n Paypal = 'paypal',\n PaypalCheckout = 'paypalCheckout',\n ThreeDSecure = 'threeDSecure',\n UsBankAccount = 'usBankAccount',\n Venmo = 'venmo',\n VisaCheckout = 'visaCheckout',\n}\n\nexport type BraintreeModuleCreators =\n | BraintreeClientCreator\n | BraintreeFastlaneCreator\n | BraintreeDataCollectorCreator\n | BraintreeGooglePaymentCreator\n | BraintreeHostedFieldsCreator\n | BraintreePaypalCreator\n | BraintreePaypalCheckoutCreator\n | BraintreeThreeDSecureCreator\n | BraintreeVenmoCheckoutCreator\n | BraintreeVisaCheckoutCreator\n | BraintreeUsBankAccountCreator\n | BraintreeLocalPaymentCreator;\n\n// TODO: rename to BraintreeSdkModules\nexport interface BraintreeSDK {\n [BraintreeModuleName.Client]?: BraintreeClientCreator;\n [BraintreeModuleName.Fastlane]?: BraintreeFastlaneCreator;\n [BraintreeModuleName.DataCollector]?: BraintreeDataCollectorCreator;\n [BraintreeModuleName.GooglePayment]?: BraintreeGooglePaymentCreator;\n [BraintreeModuleName.HostedFields]?: BraintreeHostedFieldsCreator;\n [BraintreeModuleName.Paypal]?: BraintreePaypalCreator;\n [BraintreeModuleName.PaypalCheckout]?: BraintreePaypalCheckoutCreator;\n [BraintreeModuleName.ThreeDSecure]?: BraintreeThreeDSecureCreator;\n [BraintreeModuleName.Venmo]?: BraintreeVenmoCheckoutCreator;\n [BraintreeModuleName.VisaCheckout]?: BraintreeVisaCheckoutCreator;\n [BraintreeModuleName.UsBankAccount]?: BraintreeUsBankAccountCreator;\n [BraintreeModuleName.LocalPayment]?: BraintreeLocalPaymentCreator;\n}\n\nexport type BraintreeLocalPaymentCreator = BraintreeModuleCreator<\n BraintreeLocalPayment,\n BraintreeLocalPaymentCreateConfig,\n BraintreeError | undefined\n>;\n\nexport interface BraintreeLocalPaymentCreateConfig extends BraintreeModuleCreatorConfig {\n merchantAccountId: string;\n}\n\nexport interface BraintreeInitializationData {\n clientToken: string;\n enableCheckoutPaywallBanner?: boolean;\n intent?: 'authorize' | 'order' | 'sale';\n isCreditEnabled?: boolean;\n isAcceleratedCheckoutEnabled?: boolean;\n isFastlaneStylingEnabled?: boolean;\n isFastlaneEnabled?: boolean;\n isFastlaneShippingOptionAutoSelectEnabled?: boolean;\n fastlaneStyles?: FastlaneStylesSettings;\n isBraintreeAnalyticsV2Enabled?: boolean;\n shouldRunAcceleratedCheckout?: boolean; // TODO: only for BT AXO A/B testing purposes, hence should be removed after testing\n paymentButtonStyles?: Record<string, PaypalStyleOptions>;\n paypalBNPLConfiguration?: PayPalBNPLConfigurationItem[] | null;\n nonce?: string;\n}\n\nexport interface BraintreePaypalRequest {\n amount: string | number;\n billingAgreementDescription?: string;\n currency?: string;\n displayName?: string;\n enableShippingAddress: true;\n flow: 'checkout' | 'vault';\n intent?: 'authorize' | 'order' | 'sale';\n landingPageType?: 'login' | 'billing';\n locale?: string;\n offerCredit?: boolean;\n shippingAddressEditable?: boolean;\n shippingAddressOverride?: BraintreeShippingAddressOverride;\n useraction?: 'commit';\n}\n\nexport interface BraintreeShippingAddressOverride {\n line1: string;\n line2?: string;\n city: string;\n state: string;\n postalCode: string;\n countryCode: string;\n phone?: string;\n recipientName?: string;\n}\n\nexport interface BraintreeTokenizePayload {\n nonce: string;\n type: 'PaypalAccount' | 'VenmoAccount';\n details: BraintreeTokenizationDetails;\n creditFinancingOffered?: {\n totalCost: {\n value: string;\n currency: string;\n };\n term: number;\n monthlyPayment: {\n value: string;\n currency: string;\n };\n totalInsterest: {\n value: string;\n currency: string;\n };\n payerAcceptance: boolean;\n cartAmountImmutable: boolean;\n };\n}\n\nexport type BraintreeFormErrorData = Omit<BraintreeFormFieldState, 'isFocused'>;\n\nexport type BraintreeFormErrorDataKeys =\n | 'number'\n | 'expirationDate'\n | 'expirationMonth'\n | 'expirationYear'\n | 'cvv'\n | 'postalCode';\n\nexport type BraintreeFormErrorsData = Partial<\n Record<BraintreeFormErrorDataKeys, BraintreeFormErrorData>\n>;\n\n/**\n *\n * Braintree Hosted Fields\n *\n */\nexport type BraintreeHostedFieldsCreator = BraintreeModuleCreator<\n BraintreeHostedFields,\n BraintreeHostedFieldsCreatorConfig\n>;\n\nexport interface BraintreeHostedFields {\n getState(): BraintreeHostedFieldsState;\n teardown(): Promise<void>;\n tokenize(\n options?: BraintreeHostedFieldsTokenizeOptions,\n ): Promise<BraintreeHostedFieldsTokenizePayload>;\n on(eventName: string, callback: (event: BraintreeHostedFieldsState) => void): void;\n}\n\nexport interface BraintreeHostedFieldsCreatorConfig extends BraintreeModuleCreatorConfig {\n fields: {\n number?: BraintreeHostedFieldOption;\n expirationDate?: BraintreeHostedFieldOption;\n expirationMonth?: BraintreeHostedFieldOption;\n expirationYear?: BraintreeHostedFieldOption;\n cvv?: BraintreeHostedFieldOption;\n postalCode?: BraintreeHostedFieldOption;\n cardholderName?: BraintreeHostedFieldOption;\n };\n styles?: {\n input?: { [key: string]: string };\n '.invalid'?: { [key: string]: string };\n '.valid'?: { [key: string]: string };\n ':focus'?: { [key: string]: string };\n };\n preventCursorJumps?: boolean;\n}\n\nexport interface BraintreeHostedFieldOption {\n container: string | HTMLElement;\n placeholder?: string;\n type?: string;\n formatInput?: boolean;\n maskInput?: boolean | { character?: string; showLastFour?: string };\n select?: boolean | { options?: string[] };\n maxCardLength?: number;\n maxlength?: number;\n minlength?: number;\n prefill?: string;\n rejectUnsupportedCards?: boolean;\n supportedCardBrands?: { [key: string]: boolean };\n}\n\nexport interface BraintreeHostedFieldsState {\n cards: BraintreeHostedFieldsCard[];\n emittedBy: string;\n fields: {\n number?: BraintreeHostedFieldsFieldData;\n expirationDate?: BraintreeHostedFieldsFieldData;\n expirationMonth?: BraintreeHostedFieldsFieldData;\n expirationYear?: BraintreeHostedFieldsFieldData;\n cvv?: BraintreeHostedFieldsFieldData;\n postalCode?: BraintreeHostedFieldsFieldData;\n };\n}\n\nexport interface BraintreeHostedFieldsCard {\n type: string;\n niceType: string;\n code: { name: string; size: number };\n}\n\nexport interface BraintreeHostedFieldsFieldData {\n container: HTMLElement;\n isFocused: boolean;\n isEmpty: boolean;\n isPotentiallyValid: boolean;\n isValid: boolean;\n}\n\nexport interface BraintreeHostedFieldsTokenizeOptions {\n vault?: boolean;\n fieldsToTokenize?: string[];\n cardholderName?: string;\n billingAddress?: BraintreeBillingAddressRequestData;\n}\n\nexport interface BraintreeBillingAddressRequestData {\n postalCode?: string;\n firstName?: string;\n lastName?: string;\n company?: string;\n streetAddress?: string;\n extendedAddress?: string;\n locality?: string;\n region?: string;\n countryCodeNumeric?: string;\n countryCodeAlpha2?: string;\n countryCodeAlpha3?: string;\n countryName?: string;\n}\n\nexport interface BraintreeHostedFormError extends BraintreeError {\n details?: {\n invalidFieldKeys?: string[];\n };\n}\n\nexport interface BraintreeFormFieldState {\n isFocused: boolean;\n isEmpty: boolean;\n isPotentiallyValid: boolean;\n isValid: boolean;\n}\n\nexport interface TokenizationPayload {\n nonce: string;\n bin: string;\n}\n\n/**\n *\n * Braintree PayPal\n *\n */\nexport type BraintreePaypalCreator = BraintreeModuleCreator<BraintreePaypal>;\n\nexport interface BraintreePaypal {\n closeWindow(): void;\n focusWindow(): void;\n tokenize(options: BraintreePaypalRequest): Promise<BraintreeTokenizePayload>;\n Buttons?(options: PaypalButtonOptions): PaypalButtonRender;\n}\n\nexport interface BraintreeFormOptions {\n fields: BraintreeFormFieldsMap | BraintreeStoredCardFieldsMap;\n styles?: BraintreeFormFieldStylesMap;\n onBlur?(data: BraintreeFormFieldBlurEventData): void;\n onCardTypeChange?(data: BraintreeFormFieldCardTypeChangeEventData): void;\n onFocus?(data: BraintreeFormFieldFocusEventData): void;\n onValidate?(data: BraintreeFormFieldValidateEventData): void;\n onEnter?(data: BraintreeFormFieldEnterEventData): void;\n}\n\nexport enum BraintreeFormFieldType {\n CardCode = 'cardCode',\n CardCodeVerification = 'cardCodeVerification',\n CardExpiry = 'cardExpiry',\n CardName = 'cardName',\n CardNumber = 'cardNumber',\n CardNumberVerification = 'cardNumberVerification',\n}\n\nexport interface BraintreeFormFieldsMap {\n [BraintreeFormFieldType.CardCode]?: BraintreeFormFieldOptions;\n [BraintreeFormFieldType.CardExpiry]: BraintreeFormFieldOptions;\n [BraintreeFormFieldType.CardName]: BraintreeFormFieldOptions;\n [BraintreeFormFieldType.CardNumber]: BraintreeFormFieldOptions;\n}\n\nexport interface BraintreeStoredCardFieldsMap {\n [BraintreeFormFieldType.CardCodeVerification]?: BraintreeStoredCardFieldOptions;\n [BraintreeFormFieldType.CardNumberVerification]?: BraintreeStoredCardFieldOptions;\n}\n\nexport interface BraintreeFormFieldOptions {\n accessibilityLabel?: string;\n containerId: string;\n placeholder?: string;\n}\n\nexport interface BraintreeStoredCardFieldOptions extends BraintreeFormFieldOptions {\n instrumentId: string;\n}\n\nexport interface BraintreeFormFieldStylesMap {\n default?: BraintreeFormFieldStyles;\n error?: BraintreeFormFieldStyles;\n focus?: BraintreeFormFieldStyles;\n}\n\nexport type BraintreeFormFieldStyles = Partial<\n Pick<CSSStyleDeclaration, 'color' | 'fontFamily' | 'fontSize' | 'fontWeight'>\n>;\n\nexport interface BraintreeFormFieldKeyboardEventData {\n fieldType: string;\n errors?: BraintreeFormErrorsData;\n}\n\nexport type BraintreeFormFieldBlurEventData = BraintreeFormFieldKeyboardEventData;\nexport type BraintreeFormFieldEnterEventData = BraintreeFormFieldKeyboardEventData;\nexport type BraintreeFormFieldFocusEventData = BraintreeFormFieldKeyboardEventData;\n\nexport interface BraintreeFormFieldCardTypeChangeEventData {\n cardType?: string;\n}\n\nexport interface BraintreeFormFieldValidateEventData {\n errors: {\n [BraintreeFormFieldType.CardCode]?: BraintreeFormFieldValidateErrorData[];\n [BraintreeFormFieldType.CardExpiry]?: BraintreeFormFieldValidateErrorData[];\n [BraintreeFormFieldType.CardName]?: BraintreeFormFieldValidateErrorData[];\n [BraintreeFormFieldType.CardNumber]?: BraintreeFormFieldValidateErrorData[];\n [BraintreeFormFieldType.CardCodeVerification]?: BraintreeFormFieldValidateErrorData[];\n [BraintreeFormFieldType.CardNumberVerification]?: BraintreeFormFieldValidateErrorData[];\n };\n isValid: boolean;\n}\n\nexport interface BraintreeFormFieldValidateErrorData {\n fieldType: string;\n message: string;\n type: string;\n}\n\n/**\n *\n * Braintree PayPal Checkout\n *\n */\nexport type BraintreePaypalCheckoutCreator = BraintreeModuleCreator<BraintreePaypalCheckout>;\n\nexport interface BraintreePaypalCheckout {\n loadPayPalSDK(\n config: BraintreePaypalSdkCreatorConfig,\n callback: (err: null | undefined | BraintreeError) => void,\n ): void;\n createPayment(options: BraintreePaypalRequest): Promise<string>;\n teardown(): Promise<void>;\n tokenizePayment(options: PaypalAuthorizeData): Promise<BraintreeTokenizePayload>;\n}\n\nexport interface BraintreePaypalSdkCreatorConfig {\n components?: string;\n currency?: string;\n intent?: string;\n isCreditEnabled?: boolean;\n commit?: boolean;\n}\n\n/**\n *\n * Braintree Venmo\n *\n */\nexport type BraintreeVenmoCheckoutCreator = BraintreeModuleCreator<\n BraintreeVenmoCheckout,\n BraintreeVenmoCreatorConfig\n>;\n\nexport interface BraintreeVenmoCheckout extends BraintreeModule {\n tokenize(callback: (error: BraintreeError, payload: BraintreeTokenizePayload) => unknown): void;\n isBrowserSupported(): boolean;\n}\n\nexport interface BraintreeVenmoCreatorConfig extends BraintreeModuleCreatorConfig {\n allowDesktop?: boolean;\n paymentMethodUsage?: string;\n}\n\n/**\n *\n * Braintree Visa Checkout\n *\n */\nexport type BraintreeVisaCheckoutCreator = BraintreeModuleCreator<BraintreeVisaCheckout>;\n\nexport interface BraintreeVisaCheckout extends BraintreeModule {\n tokenize(payment: VisaCheckoutPaymentSuccessPayload): Promise<VisaCheckoutTokenizedPayload>;\n createInitOptions(options: Partial<VisaCheckoutInitOptions>): VisaCheckoutInitOptions;\n}\n\n/**\n *\n * Braintree BNPL Configurator related types\n *\n */\nexport interface PayPalBNPLConfigurationItem {\n id: string;\n name: string;\n status: boolean;\n styles: Record<string, string>;\n}\n\n/**\n *\n * Braintree Local Methods\n *\n */\nexport interface BraintreeLocalPaymentConfig {\n paymentType: string;\n amount: number;\n fallback: {\n url: string;\n buttonText: string;\n };\n currencyCode: string;\n shippingAddressRequired: boolean;\n email: string;\n givenName: string;\n surname: string;\n address: {\n countryCode: string;\n };\n onPaymentStart(data: BraintreeLPMPaymentStartData, start: () => Promise<void>): Promise<void>;\n}\n\nexport interface BraintreeLPMStartPaymentError {\n code: string;\n}\n\nexport interface BraintreeLPMPaymentStartData {\n paymentId: string;\n}\n\nexport interface BraintreeLocalPaymentsPayload {\n nonce: string;\n}\n\nexport interface BraintreeLocalPayment extends BraintreeModule {\n startPayment(\n config: BraintreeLocalPaymentConfig,\n callback: (\n startPaymentError: BraintreeLPMStartPaymentError | undefined,\n payload: BraintreeLocalPaymentsPayload,\n ) => Promise<void>,\n ): void;\n}\n\n/**\n *\n * Other\n *\n */\nexport interface BraintreeHostWindow extends BraintreeWindow {\n braintree?: BraintreeSDK;\n paypal?: PaypalSDK;\n V?: VisaCheckoutSDK;\n}\n","export const BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION = '3.128.0';\nexport const BRAINTREE_SDK_DEFAULT_VERSION = '3.123.2';\nexport const BRAINTREE_SDK_STABLE_VERSION = '3.106.0';\n","import { BraintreeModuleName } from './braintree';\nimport {\n BRAINTREE_SDK_DEFAULT_VERSION,\n BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n BRAINTREE_SDK_STABLE_VERSION,\n} from './braintree-sdk-verison';\n\nexport const BRAINTREE_SDK_SCRIPTS_INTEGRITY = {\n [BRAINTREE_SDK_STABLE_VERSION]: {\n [BraintreeModuleName.Client]:\n 'sha384-26BXDNnJI23JYRyFBj4xe4sVNrUSSiSSu11kxVXNM/vEPONm4LuL00w6ZaTgQewt',\n [BraintreeModuleName.PaypalCheckout]:\n 'sha384-B+vzbZwnQtzWBthpkT4TXKUibO65tyeK7eCxSvpblgprTep2+IAXB2Cxxjrn710O',\n [BraintreeModuleName.Paypal]:\n 'sha384-uyAGL1/3+XJAHnGoNy4eCoXdzJ4f7Ilzp+6w9PNnEjs6DCCz9WMyJjMN1gzc78U+',\n [BraintreeModuleName.LocalPayment]:\n 'sha384-LIvOEMkIVEwVuYBdVOQc1AC5YbGGlwyfUheS0ACK218D2STuVYQlZ4FyEPowAEfT',\n [BraintreeModuleName.DataCollector]:\n 'sha384-1bo9JDz+Kscthc085cCKWur8CLwUoBpoNyxsDi7932mCl0zFq3A5mv+FQLw9GHpV',\n [BraintreeModuleName.UsBankAccount]:\n 'sha384-xmHBVaU+w74V+OebD3AaPONFxHUGMf+QRs8G/JxVPXNNP7MDa2jL0ICWHIe2tTfJ',\n [BraintreeModuleName.GooglePayment]:\n 'sha384-WKDJl8mqoP82qZpMGH6AbZxnvXnSW8ILV4M64CyMLiugGMwu7LyP89wjCkHqsiBe',\n [BraintreeModuleName.ThreeDSecure]:\n 'sha384-VQUlpGHzsGvs5XeiGFip7EXRsvoHWEXDVmgCacfbyieZI9mdBOqq3NSoyo28OCOB',\n [BraintreeModuleName.VisaCheckout]:\n 'sha384-yx7mADfzTN0T43Q6rlH49LIg1EJ0iUZgBp/EczX9LXsUGkySgxrD+nWHQRBkyfoT',\n [BraintreeModuleName.Venmo]:\n 'sha384-QX4rPjoj1ZDhuG0aSyKs56lEKDqTMTcjYxUHY1SzO5VZDsqIE2NTkqot7KNSCyov',\n [BraintreeModuleName.HostedFields]:\n 'sha384-VvYBACfSu0Cr/J32uKmxG7AXcNOJE1AzIIL3kbikyS7YKp5fz5Is+NzNP/lyauNy',\n [BraintreeModuleName.Fastlane]:\n 'sha384-9oGsZMRZwpGtDEDYa/dFt76dECqj1xAni9gIKgc3KfMIiRnR73nEeeUDLiBzxhFa',\n },\n [BRAINTREE_SDK_DEFAULT_VERSION]: {\n [BraintreeModuleName.Client]:\n 'sha384-o+nbQGcwNNxIBeXeu3+XmbSq+Cg8R3EN3N0l5hXCgMMU2RGY0t1z0LroSEIAbfAO',\n [BraintreeModuleName.PaypalCheckout]:\n 'sha384-WrfbWPBS4mH86GAoycPSgiH8hQ8KH7A67C93Hjhunv/xhNk2YpBn3wbFA4Fhg9U/',\n [BraintreeModuleName.Paypal]:\n 'sha384-VF389nvvrRUgDsTXMxTYORDtVegB9IQa3Cxr//DyJnLYnz8/X8VCzEvck2c+Megt',\n [BraintreeModuleName.LocalPayment]:\n 'sha384-tZKx2rEQbfmZpoPSY5VPmJEhaq4X75dLvwHMs3VE9U+C8lPyw+hWTIL1+GPvWCIH',\n [BraintreeModuleName.DataCollector]:\n 'sha384-E6k3wOpP7syCDDwaRDLF06942Y00NkbwJvWi2OQXwwKzGwG5fd3E7RFUvCCecfvO',\n [BraintreeModuleName.UsBankAccount]:\n 'sha384-258FON8LZGG0W9Qaz4Jij83pZHu30YnKjJA7gNulLBh6CclkucgF+tHDQuYFRYfW',\n [BraintreeModuleName.GooglePayment]:\n 'sha384-taJ2p/0+n0VH328POAoBiuEbL3tnHUTE9S42hK1V+Txs3X+QYjZOyKW35JgHRFfO',\n [BraintreeModuleName.ThreeDSecure]:\n 'sha384-+NSZH4Zj3sO5bdWvPKhU5N16QDxeueTVTnUVeleeESkhLSaz4Ob1hh/5myecc9Ym',\n [BraintreeModuleName.VisaCheckout]:\n 'sha384-66DiBjghxk1OmBj8aksN8gbQ+CwoQcx1vPfiXUN08g1iQVM+BwewF0p7toM3i7SS',\n [BraintreeModuleName.Venmo]:\n 'sha384-B5UwY42kE4RoLoWbQ7YpqosUlUad2/DlGWiw0HhoZbSPk30CQAaSA10ohyLDTkDU',\n [BraintreeModuleName.HostedFields]:\n 'sha384-Aw9EesSaUeWxe36PqEHiOyOyOq8M6CIb1gw7/yHNVPRzGtFXXcd2OQ8qXrIlOj2P',\n [BraintreeModuleName.Fastlane]:\n 'sha384-rhBL1hpZ71JqG+2TsT0Dih47mbjx8cjJCpeZjk9tw3df1gFMKfCTmMyZunhr7H4Y',\n },\n [BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION]: {\n [BraintreeModuleName.Client]:\n 'sha384-0WNxksIpRP+fYZiIdr12g6DBUQfLDzYCQJZtR/C8KkcwSGhPHfcFp3tTaGcMyFTq',\n [BraintreeModuleName.PaypalCheckout]:\n 'sha384-lWM1jk4BOxoDNV6Kop7tVNvQgINlmEVz0c/OwM+HNHK3QC8xqwd54Ovrt2QRDTjh',\n [BraintreeModuleName.Paypal]:\n 'sha384-fXUmVxC2EMZBDXZ7eTHSTL/LFBrHej/MSXT/vTBXvra4lzgLNGvREAp+x0GYObuH',\n [BraintreeModuleName.LocalPayment]:\n 'sha384-pha1xGuGSkmZH5x9aqHvRaO4xLea7rmQ/79PFj9zxNzxuFcOWZg7gOP7FibygOEC',\n [BraintreeModuleName.DataCollector]:\n 'sha384-Q6PI2F9eekWbAxhroybl+aEcvqhdowN/EQlGwBUyJOzPFn9982u9xl6SU6XfGKzc',\n [BraintreeModuleName.UsBankAccount]:\n 'sha384-W3RLQSKJL1tQ3+Y7mP6tmkamtZ8bV4Yw/XxL9Jj5JtXHraD8loMF8hAIG5m2zK7F',\n [BraintreeModuleName.GooglePayment]:\n 'sha384-TITQMsFWA3elDNGP2mWz2oKBo4qjt+TlqzovcaPoeBiAh/wPBi6nae50ADdgU1/i',\n [BraintreeModuleName.ThreeDSecure]:\n 'sha384-YiycYN89ZlL/Evcaq4y1ajW1mhd7JYfZBDuOwHtIn4/Jnm20GL+/XCM+zYAwWD8D',\n [BraintreeModuleName.VisaCheckout]:\n 'sha384-/OdaTv9qrkKzjObtUe6yzfDhHozFW/+uXlrSl736sOZRJpjGQETvpYXqMFFg69xv',\n [BraintreeModuleName.Venmo]:\n 'sha384-dA+ojdW9vbJS4JavcXyOs9d5uZHJg5dNtYupoPSH2zsXIiYDVS5amLb/u8qmQ6oz',\n [BraintreeModuleName.HostedFields]:\n 'sha384-31ZkS58+iaWsW06ftW52zzVZFp43WPd7pNYRiddYynSNg6Oh7WGbSFGorAUH6T1z',\n [BraintreeModuleName.Fastlane]:\n 'sha384-jlbrwNvL3HvLAUCtLSmrnQ2GH1udCUrRS/bVmReAS5fuIVvcW8Pko/Gkg82tlgtr',\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 { Address } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport * from './braintree';\nexport * from './paypal';\nexport * from './visacheckout';\n\n/**\n *\n * Braintree Module\n *\n */\nexport interface BraintreeModuleCreator<\n TInstance,\n TOptions = BraintreeModuleCreatorConfig,\n TError = BraintreeError,\n> {\n create(\n config: TOptions,\n callback?: (error: TError, instance: TInstance) => void,\n ): Promise<TInstance>;\n}\n\nexport interface BraintreeModuleCreatorConfig {\n client?: BraintreeClient;\n authorization?: string; // Info: authorization uses clientToken as a value\n}\n\nexport interface BraintreeModule {\n teardown(): Promise<void>;\n}\n\n/**\n *\n * Braintree Window\n *\n */\nexport interface BraintreeWindow extends Window {\n client?: BraintreeClientCreator;\n braintreeFastlane?: BraintreeFastlane;\n}\n\n/**\n *\n * Braintree Client\n *\n */\nexport type BraintreeClientCreator = BraintreeModuleCreator<BraintreeClient>;\n\nexport interface BraintreeClient {\n request(payload: BraintreeClientRequestPayload): Promise<BraintreeClientRequestResponse>;\n}\n\nexport interface BraintreeClientRequestPayload {\n data: {\n creditCard: {\n billingAddress?: {\n countryCodeAlpha2: string;\n locality: string;\n countryName: string;\n postalCode: string;\n streetAddress: string;\n };\n cardholderName: string;\n cvv?: string;\n expirationDate: string;\n number: string;\n options: {\n validate: boolean;\n };\n };\n };\n endpoint: string;\n method: string;\n}\n\nexport interface BraintreeHostedFieldsTokenizePayload {\n nonce: string;\n details: {\n bin: string;\n cardType: string;\n expirationMonth: string;\n expirationYear: string;\n lastFour: string;\n lastTwo: string;\n };\n description: string;\n type: string;\n binData: {\n commercial: string;\n countryOfIssuance: string;\n debit: string;\n durbinRegulated: string;\n healthcare: string;\n issuingBank: string;\n payroll: string;\n prepaid: string;\n productId: string;\n };\n}\n\nexport interface BraintreeClientRequestResponse {\n creditCards: BraintreeHostedFieldsTokenizePayload[];\n}\n\n/**\n *\n * Braintree Data Collector\n *\n */\nexport type BraintreeDataCollectorCreator = BraintreeModuleCreator<\n BraintreeDataCollector,\n BraintreeDataCollectorCreatorConfig\n>;\n\nexport interface BraintreeDataCollectorCreatorConfig extends BraintreeModuleCreatorConfig {\n kount?: boolean; // Info: this param is needed for fraud detection (should always be 'true')\n paypal?: boolean; // TODO: based on braintree documentation, this param is deprecated, so we dont need it anymore\n riskCorrelationId?: string; // Info: the option is needed for PayPal Analytics\n}\n\nexport interface BraintreeDataCollector extends BraintreeModule {\n deviceData?: string;\n}\n\n// TODO: remove this interface when BraintreeIntegrationService will be removed\nexport interface BraintreeDataCollectors {\n default?: BraintreeDataCollector;\n paypal?: BraintreeDataCollector;\n}\n\n/**\n *\n * Braintree Google Payment\n *\n */\ntype BraintreeGooglePaymentAddressFormat = 'FULL' | 'MIN';\n\nexport enum TotalPriceStatusType {\n ESTIMATED = 'ESTIMATED',\n FINAL = 'FINAL',\n NOT_CURRENTLY_KNOWN = 'NOT_CURRENTLY_KNOWN',\n}\n\nexport interface BraintreeGooglePaymentDataRequestOptions {\n merchantInfo: {\n authJwt?: string;\n merchantId?: string;\n merchantName?: string;\n };\n transactionInfo: {\n currencyCode: string;\n totalPriceStatus: TotalPriceStatusType;\n totalPrice: string;\n };\n cardRequirements: {\n billingAddressRequired: boolean;\n billingAddressFormat: BraintreeGooglePaymentAddressFormat;\n };\n emailRequired?: boolean;\n phoneNumberRequired?: boolean;\n shippingAddressRequired?: boolean;\n}\n\nexport interface BraintreeGooglePaymentDataRequest {\n allowedPaymentMethods: string[];\n apiVersion: number;\n cardRequirements: {\n allowedCardNetworks: string[];\n billingAddressFormat: string;\n billingAddressRequired: boolean;\n };\n environment: string;\n i: {\n googleTransactionId: string;\n startTimeMs: number;\n };\n merchantInfo: {\n merchantId: string;\n merchantName: string;\n authJwt?: string;\n };\n paymentMethodTokenizationParameters: {\n parameters: {\n 'braintree:apiVersion': string;\n 'braintree:authorizationFingerprint': string;\n 'braintree:merchantId': string;\n 'braintree:metadata': string;\n 'braintree:sdkVersion': string;\n gateway: string;\n };\n tokenizationType: string;\n };\n shippingAddressRequired: boolean;\n phoneNumberRequired: boolean;\n transactionInfo: {\n currencyCode: string;\n totalPrice: string;\n totalPriceStatus: TotalPriceStatusType;\n };\n}\n\nexport type BraintreeGooglePaymentCreator = BraintreeModuleCreator<BraintreeGooglePayment>;\n\nexport interface BraintreeGooglePayment extends BraintreeModule {\n createPaymentDataRequest(\n options?: BraintreeGooglePaymentDataRequestOptions,\n ): BraintreeGooglePaymentDataRequest;\n}\n\nexport interface BraintreeGooglePayThreeDSecure {\n verifyCard(options: BraintreeGooglePayThreeDSecureOptions): Promise<BraintreeVerifyPayload>;\n}\n\nexport interface BraintreeGooglePayThreeDSecureOptions {\n nonce: string;\n amount: number;\n bin: string;\n showLoader?: boolean;\n onLookupComplete(data: BraintreeThreeDSecureVerificationData, next: () => void): void;\n}\n\n/**\n *\n * Braintree 3D Secure\n *\n */\nexport type BraintreeThreeDSecureCreator = BraintreeModuleCreator<\n BraintreeThreeDSecure,\n BraintreeThreeDSecureCreatorConfig\n>;\n\nexport interface BraintreeThreeDSecure extends BraintreeModule {\n verifyCard(\n options: BraintreeThreeDSecureOptions,\n callback?: Braintree3DSVerifyCardCallback,\n ): Promise<BraintreeVerifyPayload>;\n cancelVerifyCard(): Promise<BraintreeVerifyPayload>;\n on<K extends keyof BraintreeThreeDSecureEventMap>(\n event: K,\n handler: BraintreeThreeDSecureEventMap[K],\n ): void;\n}\n\nexport type Braintree3DSVerifyCardCallback = (\n verifyError: Braintree3DSVerifyCardError,\n payload: Braintree3DSVerifyCardPayload,\n) => void;\n\nexport interface BraintreeThreeDSecureEventMap {\n 'customer-canceled': () => void;\n}\n\nexport interface Braintree3DSVerifyCardError {\n code: string;\n}\n\nexport interface Braintree3DSVerifyCardPayload {\n nonce: string;\n}\n\nexport interface BraintreeThreeDSecureCreatorConfig extends BraintreeModuleCreatorConfig {\n version?: number;\n}\n\nexport interface BraintreeThreeDSecureOptions {\n nonce: string;\n amount: number | string;\n challengeRequested?: boolean;\n showLoader?: boolean;\n bin?: string;\n additionalInformation?: {\n acsWindowSize?: '01' | '02' | '03' | '04' | '05';\n };\n collectDeviceData?: boolean;\n onLookupComplete?(data: BraintreeThreeDSecureVerificationData, next: () => void): void;\n}\n\nexport interface BraintreeThreeDSecureVerificationData {\n lookup: {\n threeDSecureVersion: string;\n };\n paymentMethod: BraintreeVerifyPayload;\n requiresUserAuthentication: boolean;\n threeDSecureInfo: {\n liabilityShiftPossible: boolean;\n liabilityShifted: boolean;\n };\n}\n\nexport enum BraintreeOrderStatus {\n Completed = 'COMPLETED',\n Pending = 'PENDING',\n Failed = 'FAILED',\n}\n\nexport interface BraintreeOrderStatusData {\n status: BraintreeOrderStatus;\n}\n\n/**\n *\n * Braintree US Bank Account (ACH)\n *\n */\nexport type BraintreeUsBankAccountCreator = BraintreeModuleCreator<BraintreeUsBankAccount>;\n\nexport interface BraintreeUsBankAccount {\n tokenize(\n options: BraintreeUsBankAccountTokenizationOptions,\n ): Promise<BraintreeUsBankAccountTokenizationResponse>;\n}\n\nexport interface BraintreeUsBankAccountTokenizationOptions {\n bankDetails: BraintreeUsBankAccountDetails;\n mandateText: string;\n}\n\nexport interface BraintreeUsBankAccountTokenizationResponse {\n nonce: string;\n details: BraintreeTokenizationDetails;\n}\n\nexport interface BraintreeUsBankAccountDetails {\n accountNumber: string;\n routingNumber: string;\n ownershipType: string;\n accountType: string;\n firstName?: string;\n lastName?: string;\n businessName?: string;\n billingAddress: {\n streetAddress: string;\n extendedAddress: string;\n locality: string;\n region: string;\n postalCode: string;\n };\n}\n\n// TODO: move this interface in separate types group if it will be used in another (not ACH) strategies\n// This seems to be an interface which will be used in different places\nexport interface BraintreeTokenizationDetails {\n username?: string;\n email?: string;\n payerId?: string;\n firstName?: string;\n lastName?: string;\n countryCode?: string;\n phone?: string;\n shippingAddress?: BraintreeShippingAddress;\n billingAddress?: BraintreeAddress;\n}\n\nexport interface BraintreeAddress {\n line1: string;\n line2: string;\n city: string;\n state: string;\n postalCode: string;\n countryCode: string;\n}\n\nexport interface BraintreeShippingAddress extends BraintreeAddress {\n recipientName: string;\n}\n\n/**\n *\n * Braintree non-instant payment methods\n *\n */\nexport enum NonInstantLocalPaymentMethods {\n TRUSTLY = 'trustly',\n}\n\nexport interface BraintreeLocalPaymentMethodRedirectAction {\n body: {\n additional_action_required: {\n type: 'offsite_redirect';\n data: {\n redirect_url: string;\n };\n };\n };\n}\n\nexport interface BraintreeOrderSavedResponse {\n body: {\n additional_action_required: {\n data: {\n order_id_saved_successfully: string;\n };\n };\n };\n}\n\n/**\n *\n * Braintree Fastlane\n *\n */\nexport type BraintreeFastlaneCreator = BraintreeModuleCreator<\n BraintreeFastlane,\n BraintreeFastlaneConfig\n>;\n\nexport interface BraintreeFastlaneConfig {\n authorization: string;\n client: BraintreeClient;\n deviceData?: string;\n styles?: BraintreeFastlaneStylesOption;\n}\n\nexport interface BraintreeFastlane {\n identity: BraintreeFastlaneIdentity;\n profile: BraintreeFastlaneProfile;\n FastlaneCardComponent: (\n options: BraintreeFastlaneCardComponentOptions,\n ) => Promise<BraintreeFastlaneCardComponent>;\n events: BraintreeFastlaneEvents;\n}\n\nexport interface BraintreeFastlaneProfile {\n showCardSelector(): Promise<BraintreeFastlaneCardSelectorResponse>;\n showShippingAddressSelector(): Promise<BraintreeFastlaneShippingAddressSelectorResponse>;\n}\n\nexport interface BraintreeFastlaneShippingAddressSelectorResponse {\n selectionChanged: boolean;\n selectedAddress: BraintreeFastlaneShippingAddress;\n}\n\nexport interface BraintreeFastlaneShippingAddress {\n name: BraintreeFastlaneProfileName;\n phoneNumber: string;\n id?: string;\n firstName?: string;\n lastName?: string;\n company?: string;\n streetAddress: string;\n extendedAddress?: string;\n locality: string;\n region: string;\n postalCode: string;\n countryCodeNumeric?: number;\n countryCodeAlpha2: string;\n countryCodeAlpha3?: string;\n}\n\nexport interface BraintreeFastlaneProfileName {\n fullName: string;\n firstName?: string;\n lastName?: string;\n}\n\nexport interface BraintreeFastlaneCardSelectorResponse {\n selectionChanged: boolean;\n selectedCard: BraintreeFastlaneVaultedInstrument;\n}\n\nexport interface BraintreeFastlaneWindow extends Window {\n braintreeFastlane: BraintreeFastlane;\n}\n\nexport interface BraintreeFastlaneIdentity {\n lookupCustomerByEmail(email: string): Promise<BraintreeFastlaneLookupCustomerByEmailResult>;\n triggerAuthenticationFlow(\n customerId: string,\n options?: BraintreeFastlaneAuthenticationOptions,\n ): Promise<BraintreeFastlaneAuthenticationCustomerResult>;\n}\n\nexport interface BraintreeFastlaneLookupCustomerByEmailResult {\n customerContextId?: string;\n}\n\nexport interface BraintreeFastlaneAuthenticationOptions {\n styles?: BraintreeFastlaneStylesOption;\n}\n\nexport interface BraintreeFastlaneStylesOption {\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 enum BraintreeFastlaneAuthenticationState {\n SUCCEEDED = 'succeeded',\n FAILED = 'failed',\n CANCELED = 'cancelled',\n UNRECOGNIZED = 'unrecognized',\n}\n\nexport interface BraintreeFastlaneAuthenticationCustomerResult {\n authenticationState: BraintreeFastlaneAuthenticationState;\n profileData: BraintreeFastlaneProfileData;\n}\n\nexport interface BraintreeFastlaneProfileData {\n fastlaneCustomerAuthAssertionToken: string;\n fastlaneCustomerId: string;\n shippingAddress: BraintreeFastlaneAddress;\n card: BraintreeFastlaneVaultedInstrument;\n name: BraintreeFastlaneName;\n}\n\nexport interface BraintreeFastlaneName {\n firstName: string;\n lastName: string;\n}\n\nexport interface BraintreeFastlaneAddress {\n id?: string;\n firstName?: string;\n lastName?: string;\n company?: string;\n streetAddress: string;\n extendedAddress?: string;\n locality: string;\n region: string;\n postalCode: string;\n countryCodeNumeric?: number;\n countryCodeAlpha2: string;\n countryCodeAlpha3?: string;\n phoneNumber?: string;\n}\n\nexport interface BraintreeFastlaneCardPaymentSource {\n brand: string;\n expiry: string;\n lastDigits: string;\n name?: string;\n billingAddress: BraintreeFastlaneAddress;\n binDetails?: {\n bin: string;\n };\n}\n\nexport interface BraintreeFastlanePaymentSource {\n card: BraintreeFastlaneCardPaymentSource;\n}\n\nexport interface BraintreeFastlaneVaultedInstrument {\n id: string; // This is the nonce / token\n paymentSource: BraintreeFastlanePaymentSource;\n}\n\nexport interface BraintreeFastlaneCardComponentOptions {\n styles: BraintreeFastlaneStylesOption;\n fields: BraintreeFastlaneCardComponentFields;\n}\n\nexport interface BraintreeFastlaneCardComponentFields {\n cardholderName?: {\n enabled?: boolean;\n prefill?: string;\n };\n phoneNumber?: {\n placeholder?: string;\n prefill?: 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 fastlaneInputSettingsBorderColor?: string;\n fastlaneInputSettingsFocusBorderBase?: string;\n fastlaneInputSettingsTextColorBase?: string;\n fastlaneToggleSettingsColorPrimary?: string;\n fastlaneToggleSettingsColorSecondary?: string;\n fastlaneTextBodySettingsColor?: string;\n fastlaneTextBodySettingsFontSize?: string;\n fastlaneTextCaptionSettingsFontSize?: string;\n fastlaneTextCaptionSettingsColor?: string;\n fastlaneBrandingSettings?: string;\n}\n\nexport interface BraintreeFastlaneTokenizeOptions {\n name?: {\n fullName: string;\n };\n billingAddress?: BraintreeFastlaneAddress;\n shippingAddress?: BraintreeFastlaneAddress;\n}\n\nexport interface BraintreeFastlaneEvents {\n apmSelected: (options: BraintreeFastlaneApmSelectedEventOptions) => void;\n emailSubmitted: (options: BraintreeFastlaneEmailEnteredEventOptions) => void;\n orderPlaced: (options: BraintreeFastlaneOrderPlacedEventOptions) => void;\n}\n\nexport interface BraintreeFastlaneEventCommonOptions {\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 BraintreeFastlaneApmSelectedEventOptions\n extends BraintreeFastlaneEventCommonOptions {\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 BraintreeFastlaneEmailEnteredEventOptions\n extends BraintreeFastlaneEventCommonOptions {\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 BraintreeFastlaneOrderPlacedEventOptions\n extends BraintreeFastlaneEventCommonOptions {\n selected_payment_method: string;\n currency_code: string;\n}\n\nexport interface BraintreeFastlaneCardComponent {\n (options: BraintreeFastlaneCardComponentOptions): BraintreeFastlaneCardComponent;\n getPaymentToken(\n options: BraintreeFastlaneTokenizeOptions,\n ): Promise<BraintreeFastlaneVaultedInstrument>;\n render(element: string): void;\n}\n\n/**\n *\n * Braintree Payload Verification\n *\n */\nexport interface BraintreeVerifyPayload {\n nonce: string;\n details: {\n cardType: string;\n lastFour: string;\n lastTwo: string;\n };\n description: string;\n liabilityShiftPossible: boolean;\n liabilityShifted: boolean;\n}\n\n/**\n *\n * Braintree Errors\n *\n */\nexport enum BraintreeErrorType {\n Customer = 'CUSTOMER',\n Merchant = 'MERCHANT',\n Network = 'NETWORK',\n Internal = 'INTERNAL',\n Unknown = 'UNKNOWN',\n}\n\nexport enum BraintreeErrorCode {\n KountNotEnabled = 'DATA_COLLECTOR_KOUNT_NOT_ENABLED',\n}\n\nexport interface BraintreeError extends Error {\n type: BraintreeErrorType;\n code: string | BraintreeErrorCode.KountNotEnabled;\n details?: unknown;\n}\n\nexport interface BraintreeRedirectError {\n body: {\n additional_action_required: {\n data: {\n redirect_url: string;\n };\n };\n };\n}\n\nexport default interface BillingAddress extends Address {\n id: string;\n email?: string;\n}\n\nexport enum BraintreeSupportedCardBrands {\n Visa = 'visa',\n Mastercard = 'mastercard',\n AmericanExpress = 'american-express',\n DinersClub = 'diners-club',\n Discover = 'discover',\n Jcb = 'jcb',\n UnionPay = 'union-pay',\n Maestro = 'maestro',\n Elo = 'elo',\n Mir = 'mir',\n Hiper = 'hiper',\n Hipercard = 'hipercard',\n}\n\nexport interface BillingAddressState {\n data?: BillingAddress;\n errors: BillingAddressErrorsState;\n statuses: BillingAddressStatusesState;\n}\n\nexport interface BillingAddressErrorsState {\n loadError?: Error;\n updateError?: Error;\n continueAsGuestError?: Error;\n}\n\nexport interface BillingAddressStatusesState {\n isLoading?: boolean;\n isUpdating?: boolean;\n isContinuingAsGuest?: boolean;\n}\n\nexport interface BraintreeRequestData {\n data: {\n creditCard: {\n billingAddress?: {\n countryCodeAlpha2: string;\n locality: string;\n countryName: string;\n postalCode: string;\n streetAddress: string;\n };\n cardholderName: string;\n cvv?: string;\n expirationDate: string;\n number: string;\n options: {\n validate: boolean;\n };\n };\n };\n endpoint: string;\n method: string;\n}\n\nexport interface SDKVersionManager {\n getSDKVersion(): string;\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BRAINTREE_SDK_SCRIPTS_INTEGRITY } from './braintree-sdk-scripts-integrity';\nimport isManageableBraintreeSDKVersion from './isManageableBraintreeSDKVersion';\nimport {\n BraintreeClientCreator,\n BraintreeDataCollectorCreator,\n BraintreeFastlaneCreator,\n BraintreeGooglePaymentCreator,\n BraintreeHostedFieldsCreator,\n BraintreeHostWindow,\n BraintreeLocalPaymentCreator,\n BraintreeModuleCreators,\n BraintreeModuleName,\n BraintreePaypalCheckoutCreator,\n BraintreePaypalCreator,\n BraintreeThreeDSecureCreator,\n BraintreeUsBankAccountCreator,\n BraintreeVenmoCheckoutCreator,\n BraintreeVisaCheckoutCreator,\n SDKVersionManager,\n} from './types';\nimport { VisaCheckoutSDK } from './visacheckout';\n\nexport default class BraintreeScriptLoader {\n constructor(\n private scriptLoader: ScriptLoader,\n private braintreeHostWindow: BraintreeHostWindow,\n private braintreeSDKVersionManager: SDKVersionManager,\n ) {}\n\n async loadClient(): Promise<BraintreeClientCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeClientCreator>(\n BraintreeModuleName.Client,\n 'client.min.js',\n );\n }\n\n async loadFastlane(): Promise<BraintreeFastlaneCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeFastlaneCreator>(\n BraintreeModuleName.Fastlane,\n 'fastlane.min.js',\n );\n }\n\n async loadPaypalCheckout(): Promise<BraintreePaypalCheckoutCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreePaypalCheckoutCreator>(\n BraintreeModuleName.PaypalCheckout,\n 'paypal-checkout.min.js',\n );\n }\n\n async loadPaypal(): Promise<BraintreePaypalCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreePaypalCreator>(\n BraintreeModuleName.Paypal,\n 'paypal.min.js',\n );\n }\n\n async loadLocalPayment(): Promise<BraintreeLocalPaymentCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeLocalPaymentCreator>(\n BraintreeModuleName.LocalPayment,\n 'local-payment.min.js',\n );\n }\n\n async loadDataCollector(): Promise<BraintreeDataCollectorCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeDataCollectorCreator>(\n BraintreeModuleName.DataCollector,\n 'data-collector.min.js',\n );\n }\n\n async loadUsBankAccount(): Promise<BraintreeUsBankAccountCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeUsBankAccountCreator>(\n BraintreeModuleName.UsBankAccount,\n 'us-bank-account.min.js',\n );\n }\n\n async loadGooglePayment(): Promise<BraintreeGooglePaymentCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeGooglePaymentCreator>(\n BraintreeModuleName.GooglePayment,\n 'google-payment.min.js',\n );\n }\n\n async load3DS(): Promise<BraintreeThreeDSecureCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeThreeDSecureCreator>(\n BraintreeModuleName.ThreeDSecure,\n 'three-d-secure.min.js',\n );\n }\n\n loadVisaCheckout(): Promise<BraintreeVisaCheckoutCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeVisaCheckoutCreator>(\n BraintreeModuleName.VisaCheckout,\n 'visa-checkout.min.js',\n );\n }\n\n loadVenmoCheckout(): Promise<BraintreeVenmoCheckoutCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeVenmoCheckoutCreator>(\n BraintreeModuleName.Venmo,\n 'venmo.min.js',\n );\n }\n\n async loadHostedFields(): Promise<BraintreeHostedFieldsCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeHostedFieldsCreator>(\n BraintreeModuleName.HostedFields,\n 'hosted-fields.min.js',\n );\n }\n\n async loadVisaCheckoutSdk(testMode?: boolean): Promise<VisaCheckoutSDK> {\n if (this.braintreeHostWindow.V) {\n return this.braintreeHostWindow.V;\n }\n\n const hash = testMode\n ? 'sha384-0eu1s1GtqzXlL9DtLgmwzC5WWlEH/ADRM0n38cVQkvtT+W/gey96rcb1LwuUOPDm'\n : 'sha384-1f1csvP3ZFxg4dILH1GaY4LHlZ0oX7Rk83rxmLlwbnIi4TM0NYzXoev1VoEiVDS6';\n\n return this.scriptLoader\n .loadScript(\n `//${\n testMode ? 'sandbox-' : ''\n }assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js`,\n {\n async: true,\n attributes: {\n integrity: hash,\n crossorigin: 'anonymous',\n },\n },\n )\n .then(() => {\n if (!this.braintreeHostWindow.V) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.braintreeHostWindow.V;\n });\n }\n\n private async loadBraintreeModuleOrThrow<T extends BraintreeModuleCreators>(\n braintreeModuleName: BraintreeModuleName,\n fileName: string,\n ): Promise<T> {\n let module = this.getBraintreeModule(braintreeModuleName);\n\n if (module) {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return module as T;\n }\n\n const braintreeSdkVersion = this.braintreeSDKVersionManager.getSDKVersion();\n\n const scriptPath = `//js.braintreegateway.com/web/${braintreeSdkVersion}/js/${fileName}`;\n\n const integrity = isManageableBraintreeSDKVersion(braintreeSdkVersion)\n ? this.getIntegrityValuesByModuleName(braintreeModuleName, braintreeSdkVersion)\n : undefined;\n\n await this.scriptLoader.loadScript(\n scriptPath,\n integrity\n ? {\n async: true,\n attributes: {\n integrity,\n crossorigin: 'anonymous',\n },\n }\n : undefined,\n );\n\n module = this.getBraintreeModule(braintreeModuleName);\n\n if (!module) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return module as T;\n }\n\n private getBraintreeModule(\n braintreeModuleName: BraintreeModuleName,\n ): BraintreeModuleCreators | undefined {\n return this.braintreeHostWindow.braintree?.[braintreeModuleName];\n }\n\n private getIntegrityValuesByModuleName(\n moduleName: BraintreeModuleName,\n version: keyof typeof BRAINTREE_SDK_SCRIPTS_INTEGRITY,\n ): string {\n const integrity = BRAINTREE_SDK_SCRIPTS_INTEGRITY[version][moduleName];\n\n if (!integrity) {\n throw new Error('Unexpected fileName value');\n }\n\n return integrity;\n }\n}\n","import { BRAINTREE_SDK_SCRIPTS_INTEGRITY } from './braintree-sdk-scripts-integrity';\n\nfunction isManageableBraintreeSDKVersion(\n version: string,\n): version is keyof typeof BRAINTREE_SDK_SCRIPTS_INTEGRITY {\n return version in BRAINTREE_SDK_SCRIPTS_INTEGRITY;\n}\n\nexport default isManageableBraintreeSDKVersion;\n","import { StandardError } from './index';\n\n/**\n * Throw this error if the shopper is using a browser version that is not\n * supported by us or any third party provider we use.\n */\nexport default class UnsupportedBrowserError extends StandardError {\n constructor(message?: string) {\n super(message || 'Unsupported browser error');\n\n this.name = 'UnsupportedBrowserError';\n this.type = 'unsupported_browser';\n }\n}\n","import { BraintreeError } from '../types';\n\nexport default function isBraintreeError(error: unknown): error is BraintreeError {\n return Boolean(\n typeof error === 'object' &&\n error !== null &&\n ('type' in error || 'message' in error || 'code' in error),\n );\n}\n","import {\n NotInitializedError,\n NotInitializedErrorType,\n UnsupportedBrowserError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeScriptLoader from './braintree-script-loader';\nimport {\n BraintreeClient,\n BraintreeDataCollector,\n BraintreeDataCollectorCreatorConfig,\n BraintreeError,\n BraintreeErrorCode,\n BraintreeGooglePayment,\n BraintreeLocalPayment,\n BraintreeModule,\n BraintreeThreeDSecure,\n BraintreeUsBankAccount,\n BraintreeVenmoCheckout,\n BraintreeVisaCheckout,\n} from './types';\nimport isBraintreeError from './utils/is-braintree-error';\nimport { VisaCheckoutSDK } from './visacheckout';\n\nexport default class BraintreeSdk {\n private braintreeVenmo?: BraintreeVenmoCheckout;\n private braintreeLocalPayment?: BraintreeLocalPayment;\n private client?: BraintreeClient;\n private clientToken?: string;\n private dataCollector?: BraintreeDataCollector;\n private googlePayment?: BraintreeGooglePayment;\n private threeDS?: BraintreeThreeDSecure;\n private visaCheckout?: Promise<BraintreeVisaCheckout>;\n private visaCheckoutSDK?: VisaCheckoutSDK;\n private usBankAccount?: BraintreeUsBankAccount;\n\n constructor(private braintreeScriptLoader: BraintreeScriptLoader) {}\n\n initialize(clientToken: string): void {\n this.setClientToken(clientToken);\n }\n\n async deinitialize(): Promise<void> {\n await this.teardownModule(this.dataCollector);\n\n this.dataCollector = undefined;\n }\n\n /**\n *\n * Braintree Client\n * braintree doc: https://braintree.github.io/braintree-web/current/module-braintree-web_client.html\n *\n */\n async getClient(): Promise<BraintreeClient> {\n if (!this.client) {\n const clientToken = this.getClientTokenOrThrow();\n const clientCreator = await this.braintreeScriptLoader.loadClient();\n\n this.client = await clientCreator.create({ authorization: clientToken });\n }\n\n return this.client;\n }\n\n /**\n *\n * Braintree Data collector\n * braintree doc: https://braintree.github.io/braintree-web/current/module-braintree-web_data-collector.html\n *\n */\n async getDataCollectorOrThrow(\n options?: Partial<BraintreeDataCollectorCreatorConfig>,\n ): Promise<BraintreeDataCollector> {\n const emptyDataCollector = {\n deviceData: undefined,\n teardown: () => Promise.resolve(),\n };\n\n if (!this.dataCollector) {\n try {\n const client = await this.getClient();\n const dataCollector = await this.braintreeScriptLoader.loadDataCollector();\n\n const dataCollectorConfig: BraintreeDataCollectorCreatorConfig = {\n client,\n kount: true,\n ...options,\n };\n\n this.dataCollector = await dataCollector.create(dataCollectorConfig);\n } catch (error) {\n if (isBraintreeError(error) && error.code === BraintreeErrorCode.KountNotEnabled) {\n return emptyDataCollector;\n }\n\n throw error;\n }\n }\n\n return this.dataCollector;\n }\n\n /**\n *\n * Braintree Google Payment\n * braintree doc: https://braintree.github.io/braintree-web/current/module-braintree-web_google-payment.html\n *\n */\n async getBraintreeGooglePayment(): Promise<BraintreeGooglePayment> {\n if (!this.googlePayment) {\n const [client, braintreeGooglePayment] = await Promise.all([\n this.getClient(),\n this.braintreeScriptLoader.loadGooglePayment(),\n ]);\n\n this.googlePayment = await braintreeGooglePayment.create({ client });\n }\n\n return this.googlePayment;\n }\n\n /**\n *\n * Braintree 3DS\n * braintree doc: https://braintree.github.io/braintree-web/current/module-braintree-web_three-d-secure.html\n *\n */\n async getBraintreeThreeDS(): Promise<BraintreeThreeDSecure> {\n if (!this.threeDS) {\n const [client, threeDSecure] = await Promise.all([\n this.getClient(),\n this.braintreeScriptLoader.load3DS(),\n ]);\n\n this.threeDS = await threeDSecure.create({ client, version: 2 });\n }\n\n return this.threeDS;\n }\n\n /**\n *\n * Braintree Local Payment Methods\n * braintree doc: https://braintree.github.io/braintree-web/current/module-braintree-web_local-payment.html\n *\n */\n async getBraintreeLocalPayment(\n merchantAccountId: string,\n ): Promise<BraintreeLocalPayment | undefined> {\n if (!this.braintreeLocalPayment) {\n const [client, localPaymentCreator] = await Promise.all([\n this.getClient(),\n this.braintreeScriptLoader.loadLocalPayment(),\n ]);\n\n this.braintreeLocalPayment = await new Promise(\n (\n resolve: (braintreeLocalPayment: BraintreeLocalPayment) => void,\n reject: (error: BraintreeError) => void,\n ) => {\n void localPaymentCreator.create(\n { client, merchantAccountId },\n (\n error: BraintreeError | undefined,\n braintreeLocalPayment: BraintreeLocalPayment,\n ) => {\n if (error) {\n reject(error);\n }\n\n resolve(braintreeLocalPayment);\n },\n );\n },\n );\n }\n\n return this.braintreeLocalPayment;\n }\n\n /**\n *\n * Braintree UsBankAccount\n * braintree doc: https://braintree.github.io/braintree-web/current/module-braintree-web_us-bank-account.html\n *\n */\n async getUsBankAccount() {\n if (!this.usBankAccount) {\n const client = await this.getClient();\n const usBankAccount = await this.braintreeScriptLoader.loadUsBankAccount();\n\n this.usBankAccount = await usBankAccount.create({ client });\n }\n\n return this.usBankAccount;\n }\n\n /**\n *\n * Braintree Visa Checkout\n * braintree doc: https://braintree.github.io/braintree-web/current/module-braintree-web_visa-checkout.html\n *\n */\n getBraintreeVisaCheckout() {\n if (!this.visaCheckout) {\n this.visaCheckout = Promise.all([\n this.getClient(),\n this.braintreeScriptLoader.loadVisaCheckout(),\n ]).then(([client, paypal]) => paypal.create({ client }));\n }\n\n return this.visaCheckout;\n }\n\n /**\n *\n * Braintree Visa Checkout SDK\n * visa checkout doc: https://developer.visa.com/capabilities/visa_checkout/docs-how-to\n *\n */\n async getVisaCheckoutSdk(testMode?: boolean) {\n if (!this.visaCheckoutSDK) {\n this.visaCheckoutSDK = await this.braintreeScriptLoader.loadVisaCheckoutSdk(testMode);\n }\n\n return this.visaCheckoutSDK;\n }\n\n /**\n *\n * Braintree Venmo Checkout\n * braintree venmo checkout doc: https://braintree.github.io/braintree-web/current/module-braintree-web_venmo.html\n *\n */\n async getVenmoCheckoutOrThrow() {\n if (!this.braintreeVenmo) {\n const client = await this.getClient();\n const venmoCheckout = await this.braintreeScriptLoader.loadVenmoCheckout();\n\n const venmoCheckoutConfig = {\n client,\n allowDesktop: true,\n paymentMethodUsage: 'multi_use',\n };\n\n const braintreeVenmoCheckout = await venmoCheckout.create(venmoCheckoutConfig);\n\n if (braintreeVenmoCheckout.isBrowserSupported()) {\n this.braintreeVenmo = braintreeVenmoCheckout;\n } else {\n throw new UnsupportedBrowserError();\n }\n }\n\n return this.braintreeVenmo;\n }\n\n /**\n *\n * Private methods\n *\n */\n private setClientToken(clientToken: string): void {\n this.clientToken = clientToken;\n }\n\n private getClientTokenOrThrow(): string {\n if (!this.clientToken) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n return this.clientToken;\n }\n\n private teardownModule(module?: BraintreeModule): Promise<void> {\n return module ? module.teardown() : Promise.resolve();\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 { find } from 'lodash';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport { BraintreeHostWindow } from './braintree';\nimport {\n BRAINTREE_SDK_DEFAULT_VERSION,\n BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n BRAINTREE_SDK_STABLE_VERSION,\n} from './braintree-sdk-verison';\nimport { SDKVersionManager } from './types';\n\nexport default class BraintreeSDKVersionManager implements SDKVersionManager {\n private braintreeWindow: BraintreeHostWindow = window;\n\n constructor(private paymentIntegrationService: PaymentIntegrationService) {}\n\n getSDKVersion() {\n const state = this.paymentIntegrationService.getState();\n const storeConfig = state.getStoreConfig();\n const features = storeConfig?.checkoutSettings.features || {};\n\n const preloadedVersion = this.getPreloadedSDKVersion();\n\n if (preloadedVersion) {\n return preloadedVersion;\n }\n\n if (isExperimentEnabled(features, 'PAYPAL-5809.braintree_hosted_fields_fix_version')) {\n return BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION;\n }\n\n if (isExperimentEnabled(features, 'PAYPAL-5636.update_braintree_sdk_version')) {\n return BRAINTREE_SDK_DEFAULT_VERSION;\n }\n\n return BRAINTREE_SDK_STABLE_VERSION;\n }\n\n private getPreloadedSDKVersion(): void | string {\n const braintree = this.braintreeWindow.braintree;\n\n if (braintree) {\n const preloadedVersion = find<{ VERSION?: string }>(\n Object.values(braintree),\n (module) => !!module.VERSION,\n );\n\n return preloadedVersion?.VERSION;\n }\n }\n}\n","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 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 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","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 {\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 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 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 {\n PaymentInstrumentPayload,\n WithBankAccountInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function isUsBankAccountInstrumentLike(\n instrument?: PaymentInstrumentPayload,\n): instrument is WithBankAccountInstrument {\n if (!instrument) {\n return false;\n }\n\n return (\n 'accountNumber' in instrument &&\n 'routingNumber' in instrument &&\n 'ownershipType' in instrument &&\n 'accountType' in instrument\n );\n}\n","import {\n BraintreeInitializationData,\n BraintreeSdk,\n BraintreeUsBankAccount,\n BraintreeUsBankAccountDetails,\n isBraintreeError,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n InvalidArgumentError,\n isHostedInstrumentLike,\n isVaultedInstrument,\n MissingDataError,\n MissingDataErrorType,\n NotInitializedError,\n NotInitializedErrorType,\n OrderFinalizationNotRequiredError,\n OrderPaymentRequestBody,\n OrderRequestBody,\n Payment,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethodFailedError,\n PaymentRequestOptions,\n PaymentStrategy,\n WithBankAccountInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport isUsBankAccountInstrumentLike from '../is-us-bank-account-instrument-like';\n\nimport { WithBraintreeAchPaymentInitializeOptions } from './braintree-ach-initialize-options';\n\nexport default class BraintreeAchPaymentStrategy implements PaymentStrategy {\n private usBankAccount?: BraintreeUsBankAccount;\n private getMandateText?: () => string;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private braintreeSdk: BraintreeSdk,\n ) {}\n\n async initialize(\n options: PaymentInitializeOptions & WithBraintreeAchPaymentInitializeOptions,\n ): Promise<void> {\n const { methodId, braintreeach } = 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 this.getMandateText = braintreeach?.getMandateText;\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<BraintreeInitializationData>(methodId);\n const { clientToken, initializationData } = paymentMethod;\n\n if (!clientToken || !initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n this.braintreeSdk.initialize(clientToken);\n\n try {\n this.usBankAccount = await this.braintreeSdk.getUsBankAccount();\n } catch (error) {\n this.handleBraintreeError(error);\n }\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 isSubmittingWithVaultingInstrument = isVaultedInstrument(payment.paymentData || {});\n\n const nonce = isSubmittingWithVaultingInstrument\n ? await this.tokenizePaymentForVaultedInstrument(payment)\n : await this.tokenizePayment(payment);\n\n const submitPaymentPayload = isSubmittingWithVaultingInstrument\n ? await this.preparePaymentDataForVaultedInstrument(nonce, payment)\n : await this.preparePaymentData(nonce, payment);\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.braintreeSdk.deinitialize();\n\n return Promise.resolve();\n }\n\n private async tokenizePayment({ paymentData }: OrderPaymentRequestBody): Promise<string> {\n const usBankAccount = this.getUsBankAccountOrThrow();\n\n if (!isUsBankAccountInstrumentLike(paymentData)) {\n throw new PaymentArgumentInvalidError(['payment.paymentData']);\n }\n\n const mandateText = isVaultedInstrument(paymentData)\n ? 'The data are used for stored instrument verification'\n : typeof this.getMandateText === 'function' && this.getMandateText();\n\n if (!mandateText) {\n throw new InvalidArgumentError(\n 'Unable to proceed because getMandateText is not provided or returned undefined value.',\n );\n }\n\n try {\n const { nonce } = await usBankAccount.tokenize({\n bankDetails: this.getBankDetails(paymentData),\n mandateText,\n });\n\n return nonce;\n } catch (error) {\n this.handleBraintreeError(error);\n }\n }\n\n private async tokenizePaymentForVaultedInstrument(\n payment: OrderPaymentRequestBody,\n ): Promise<string | null> {\n const { methodId, paymentData = {} } = payment;\n\n const state = this.paymentIntegrationService.getState();\n const { config } = state.getPaymentMethodOrThrow(methodId);\n\n if (!config.isVaultingEnabled) {\n throw new InvalidArgumentError(\n 'Vaulting is disabled but a vaulted instrument was being used for this transaction',\n );\n }\n\n const shouldVerifyVaultingInstrument = isUsBankAccountInstrumentLike(paymentData);\n\n return shouldVerifyVaultingInstrument ? this.tokenizePayment(payment) : null;\n }\n\n private async preparePaymentData(\n nonce: string | null,\n payment: OrderPaymentRequestBody,\n ): Promise<Payment> {\n const { methodId, paymentData = {} } = payment;\n\n if (!isUsBankAccountInstrumentLike(paymentData)) {\n throw new PaymentArgumentInvalidError(['payment.paymentData']);\n }\n\n const { deviceData } = await this.braintreeSdk.getDataCollectorOrThrow();\n const { shouldSaveInstrument, shouldSetAsDefaultInstrument, routingNumber, accountNumber } =\n paymentData;\n\n return {\n methodId,\n paymentData: {\n deviceSessionId: deviceData,\n shouldSetAsDefaultInstrument,\n shouldSaveInstrument,\n formattedPayload: {\n tokenized_bank_account: {\n issuer: routingNumber,\n masked_account_number: accountNumber.substr(-4),\n token: nonce,\n },\n },\n },\n };\n }\n\n private async preparePaymentDataForVaultedInstrument(\n nonce: string | null,\n payment: OrderPaymentRequestBody,\n ): Promise<Payment> {\n const { methodId, paymentData = {} } = payment;\n\n if (!isVaultedInstrument(paymentData) || !isHostedInstrumentLike(paymentData)) {\n throw new PaymentArgumentInvalidError(['payment.paymentData']);\n }\n\n const { deviceData } = await this.braintreeSdk.getDataCollectorOrThrow();\n const { instrumentId, shouldSetAsDefaultInstrument } = paymentData;\n\n return {\n methodId,\n paymentData: {\n deviceSessionId: deviceData,\n instrumentId,\n shouldSetAsDefaultInstrument,\n ...(nonce && { nonce }),\n },\n };\n }\n\n private getBankDetails(paymentData: WithBankAccountInstrument): BraintreeUsBankAccountDetails {\n const state = this.paymentIntegrationService.getState();\n const billingAddress = state.getBillingAddressOrThrow();\n\n const ownershipType = paymentData.ownershipType.toLowerCase();\n const accountType = paymentData.accountType.toLowerCase();\n\n return {\n accountNumber: paymentData.accountNumber,\n routingNumber: paymentData.routingNumber,\n ownershipType,\n ...(ownershipType === 'personal'\n ? {\n firstName: paymentData.firstName,\n lastName: paymentData.lastName,\n }\n : {\n businessName: paymentData.businessName,\n }),\n accountType,\n billingAddress: {\n streetAddress: billingAddress.address1,\n extendedAddress: billingAddress.address2,\n locality: billingAddress.city,\n region: billingAddress.stateOrProvinceCode,\n postalCode: billingAddress.postalCode,\n },\n };\n }\n\n private getUsBankAccountOrThrow(): BraintreeUsBankAccount {\n if (!this.usBankAccount) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n return this.usBankAccount;\n }\n\n private handleBraintreeError(error: unknown): never {\n if (!isBraintreeError(error)) {\n throw error;\n }\n\n throw new PaymentMethodFailedError(error.message);\n }\n}\n","import { createBraintreeSdk } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeAchPaymentStrategy from './braintree-ach-payment-strategy';\n\nconst createBraintreeAchPaymentStrategy: PaymentStrategyFactory<BraintreeAchPaymentStrategy> = (\n paymentIntegrationService,\n) => {\n return new BraintreeAchPaymentStrategy(\n paymentIntegrationService,\n createBraintreeSdk(paymentIntegrationService),\n );\n};\n\nexport default toResolvableModule(createBraintreeAchPaymentStrategy, [{ id: 'braintreeach' }]);\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeScriptLoader from './braintree-script-loader';\nimport BraintreeSdk from './braintree-sdk';\nimport BraintreeSDKVersionManager from './braintree-sdk-version-manager';\n\nconst createBraintreeSdk = (paymentIntegrationService: PaymentIntegrationService) => {\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeScriptLoader = new BraintreeScriptLoader(\n getScriptLoader(),\n window,\n braintreeSDKVersionManager,\n );\n\n return new BraintreeSdk(braintreeScriptLoader);\n};\n\nexport default createBraintreeSdk;\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 { BraintreePaypalCheckout, BraintreePaypalSdkCreatorConfig } from './braintree';\nimport { BraintreeError } from './types';\n\nlet paypalSdkPromise: Promise<BraintreePaypalCheckout | null> | null = null;\n\nexport default function loadPayPalSDKOnce(\n paypalCheckout: BraintreePaypalCheckout,\n config: BraintreePaypalSdkCreatorConfig,\n): Promise<BraintreePaypalCheckout | null> {\n if (!paypalSdkPromise) {\n paypalSdkPromise = new Promise((resolve, reject) => {\n paypalCheckout.loadPayPalSDK(config, (err: null | undefined | BraintreeError) => {\n if (err) {\n paypalSdkPromise = null;\n\n reject(err);\n } else {\n resolve(paypalCheckout);\n }\n });\n });\n }\n\n return paypalSdkPromise;\n}\n\n// for testing purposes\nexport function resetLoadPayPalSDKOncePromise() {\n paypalSdkPromise = null;\n}\n","// the PayPal side of things uses uppercase keys instead of camel case\n\n/**\n *\n * PayPal constants\n *\n */\nexport const PAYPAL_COMPONENTS = ['buttons', 'messages'];\n\nexport enum PaypalButtonStyleLayoutOption {\n HORIZONTAL = 'horizontal',\n VERTICAL = 'vertical',\n}\n\nexport enum PaypalButtonStyleSizeOption {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large',\n RESPONSIVE = 'responsive',\n}\n\nexport enum PaypalButtonStyleColorOption {\n GOLD = 'gold',\n BLUE = 'blue',\n SIlVER = 'silver',\n BLACK = 'black',\n WHITE = 'white',\n}\n\nexport enum PaypalButtonStyleLabelOption {\n CHECKOUT = 'checkout',\n PAY = 'pay',\n BUYNOW = 'buynow',\n PAYPAL = 'paypal',\n CREDIT = 'credit',\n}\n\nexport enum PaypalButtonStyleShapeOption {\n PILL = 'pill',\n RECT = 'rect',\n}\n\n/**\n *\n * PayPal interfaces\n *\n */\nexport interface PaypalSDK {\n Button: PaypalButton;\n checkout: PaypalExpressCheckout;\n FUNDING: PaypalFundingTypeList;\n Buttons(options: PaypalButtonOptions): PaypalButtonRender;\n Messages(options: MessagingOptions): MessagingRender;\n}\n\nexport interface PaypalButton {\n render(options: PaypalButtonOptions, container: string): void;\n}\n\nexport interface PaypalExpressCheckout {\n initXO(): void;\n startFlow(url: string): void;\n closeFlow(): void;\n setup(merchantId: string, options: PaypalExpressCheckoutOptions): void;\n}\n\nexport interface PaypalExpressCheckoutOptions {\n button: string;\n environment: string;\n}\n\nexport interface MessagingOptions {\n amount: number;\n buyerCountry?: string;\n placement: string;\n style?: MessagesStyleOptions;\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 enum MessagingPlacements {\n CART = 'cart',\n HOME = 'homepage',\n PAYMENT = 'payment',\n PRODUCT = 'product',\n}\n\nexport interface MessagingRender {\n render(container: string): void;\n}\n\nexport interface PaypalButtonOptions {\n env?: string;\n commit?: boolean;\n style?: PaypalStyleOptions;\n funding?: PaypalFundingType;\n fundingSource?: string;\n client?: PaypalClientToken;\n payment?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise<unknown>;\n onAuthorize?(data: PaypalAuthorizeData, actions?: PaypalActions): Promise<unknown>;\n createOrder?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise<unknown>;\n onApprove?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise<unknown>;\n onClick?(payload: ClickCallbackPayload, actions: ClickButtonActions): void;\n onInit?(payload: InitCallbackPayload, actions: InitButtonActions): void;\n onCancel?(): void;\n onError?(error: Error): void;\n}\n\nexport interface PaypalStyleOptions {\n layout?: PaypalButtonStyleLayoutOption;\n size?: PaypalButtonStyleSizeOption;\n color?: PaypalButtonStyleColorOption;\n label?: PaypalButtonStyleLabelOption;\n shape?: PaypalButtonStyleShapeOption;\n tagline?: boolean;\n fundingicons?: boolean;\n height?: number | string;\n}\n\nexport interface PaypalClientToken {\n production?: string;\n sandbox?: string;\n}\n\nexport interface PaypalFundingType {\n allowed?: string[];\n disallowed?: string[];\n}\n\nexport interface PaypalActions {\n payment: PaypalPaymentActions;\n request: PaypalRequestActions;\n}\n\nexport interface PaypalButtonRender {\n render(container: string): void;\n isEligible(): boolean;\n close(): void;\n}\n\nexport interface PaypalAuthorizeData {\n payerId: string;\n paymentId?: string;\n billingToken?: string;\n payerID?: string;\n paymentID?: string;\n}\n\nexport interface PaypalFundingTypeList {\n CARD?: string;\n CREDIT?: string;\n PAYPAL?: string;\n PAYLATER?: string;\n}\n\nexport interface PaypalPaymentActions {\n get(id: string): Promise<unknown>;\n}\n\nexport interface PaypalRequestActions {\n post(url: string, payload?: object, options?: object): Promise<{ id: string }>;\n}\n\nexport interface InitCallbackPayload {\n correlationID: string;\n}\n\nexport interface ClickCallbackPayload {\n fundingSource: string;\n}\n\nexport interface InitButtonActions {\n enable(): void;\n disable(): void;\n}\n\nexport interface ClickButtonActions {\n reject(): void;\n resolve(): void;\n}\n","import { supportsPopups } from '@braintree/browser-detection';\nimport { isEmpty } from 'lodash';\n\nimport {\n Address,\n CreditCardInstrument,\n LegacyAddress,\n NonceInstrument,\n NotInitializedError,\n NotInitializedErrorType,\n Payment,\n PaymentArgumentInvalidError,\n PaymentInvalidFormError,\n PaymentInvalidFormErrorDetails,\n UnsupportedBrowserError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { Overlay } from '@bigcommerce/checkout-sdk/ui';\n\nimport BraintreeScriptLoader from './braintree-script-loader';\nimport loadPayPalSDKOnce from './load-paypal-sdk-once';\nimport {\n BraintreeClient,\n BraintreeDataCollector,\n BraintreeDataCollectorCreatorConfig,\n BraintreeDataCollectors,\n BraintreeEnv,\n BraintreeError,\n BraintreeFastlane,\n BraintreeFastlaneStylesOption,\n BraintreeHostWindow,\n BraintreeModule,\n BraintreePaypal,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeRequestData,\n BraintreeShippingAddressOverride,\n BraintreeThreeDSecure,\n BraintreeThreeDSecureOptions,\n BraintreeTokenizationDetails,\n BraintreeTokenizePayload,\n BraintreeVenmoCheckout,\n BraintreeVenmoCreatorConfig,\n BraintreeVerifyPayload,\n PAYPAL_COMPONENTS,\n TokenizationPayload,\n} from './types';\nimport isBraintreeError from './utils/is-braintree-error';\nimport isCreditCardInstrumentLike from './utils/is-credit-card-instrument-like';\n\nexport interface PaypalConfig {\n amount: number;\n currency: string;\n locale: string;\n offerCredit?: boolean;\n shippingAddressEditable?: boolean;\n shippingAddressOverride?: BraintreeShippingAddressOverride;\n shouldSaveInstrument?: boolean;\n}\n\n// Info: this class is deprecated and will be removed in a nearest future. Please, do not add anything here.\nexport default class BraintreeIntegrationService {\n private client?: Promise<BraintreeClient>;\n private clientToken?: string;\n private dataCollectors: BraintreeDataCollectors = {};\n private paypalCheckout?: BraintreePaypalCheckout;\n private braintreePaypal?: Promise<BraintreePaypal>;\n private threeDSecureOptions?: BraintreeThreeDSecureOptions;\n private threeDS?: Promise<BraintreeThreeDSecure>;\n private venmoCheckout?: BraintreeVenmoCheckout;\n\n constructor(\n private braintreeScriptLoader: BraintreeScriptLoader,\n private braintreeHostWindow: BraintreeHostWindow,\n private overlay?: Overlay,\n ) {}\n\n initialize(clientToken: string, threeDSecureOptions?: BraintreeThreeDSecureOptions) {\n this.clientToken = clientToken;\n this.threeDSecureOptions = threeDSecureOptions;\n }\n\n async getBraintreeFastlane(\n cardId?: string,\n isTestModeEnabled?: boolean,\n styles?: BraintreeFastlaneStylesOption,\n ): Promise<BraintreeFastlane> {\n if (isTestModeEnabled) {\n window.localStorage.setItem('axoEnv', 'sandbox');\n window.localStorage.setItem('fastlaneEnv', 'sandbox');\n }\n\n if (!this.braintreeHostWindow.braintreeFastlane) {\n const clientToken = this.getClientTokenOrThrow();\n const client = await this.getClient();\n const deviceData = await this.getSessionId(cardId);\n\n const braintreeFastlaneCreator = await this.braintreeScriptLoader.loadFastlane();\n\n const defaultStyles = {\n root: {\n backgroundColorPrimary: 'transparent',\n },\n };\n\n this.braintreeHostWindow.braintreeFastlane = await braintreeFastlaneCreator.create({\n authorization: clientToken,\n client,\n deviceData,\n styles: styles || defaultStyles,\n });\n }\n\n return this.braintreeHostWindow.braintreeFastlane;\n }\n\n // Info: This method is deprecated. Use getClient method from BraintreeSdk class instead\n async getClient(): Promise<BraintreeClient> {\n if (!this.client) {\n const clientToken = this.getClientTokenOrThrow();\n const clientCreator = await this.braintreeScriptLoader.loadClient();\n\n this.client = clientCreator.create({ authorization: clientToken });\n }\n\n return this.client;\n }\n\n getPaypal(): Promise<BraintreePaypal> {\n if (!this.braintreePaypal) {\n this.braintreePaypal = Promise.all([\n this.getClient(),\n this.braintreeScriptLoader.loadPaypal(),\n ]).then(([client, paypal]) => paypal.create({ client }));\n }\n\n return this.braintreePaypal;\n }\n\n paypal({ shouldSaveInstrument, ...config }: PaypalConfig): Promise<BraintreeTokenizePayload> {\n const newWindowFlow = supportsPopups();\n\n return this.getPaypal()\n .then((paypal) => {\n if (newWindowFlow) {\n this.overlay?.show({\n onClick: () => paypal.focusWindow(),\n });\n }\n\n return paypal.tokenize({\n enableShippingAddress: true,\n flow: shouldSaveInstrument ? 'vault' : 'checkout',\n useraction: 'commit',\n ...config,\n });\n })\n .then((response) => {\n this.overlay?.remove();\n\n return response;\n })\n .catch((error) => {\n this.overlay?.remove();\n\n throw error;\n });\n }\n\n async getPaypalCheckout(\n config: Partial<BraintreePaypalSdkCreatorConfig>,\n onSuccess: (instance: BraintreePaypalCheckout) => void,\n onError: (error: BraintreeError) => void,\n ): Promise<BraintreePaypalCheckout> {\n const client = await this.getClient();\n const paypalCheckout = await this.braintreeScriptLoader.loadPaypalCheckout();\n\n const paypalCheckoutConfig = { client };\n const paypalCheckoutCallback = (\n error: BraintreeError | undefined,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n ) => {\n if (error) {\n return onError(error);\n }\n\n const paypalSdkLoadCallback = () => onSuccess(braintreePaypalCheckout);\n const paypalSdkLoadConfig = {\n currency: config.currency,\n ...(config.isCreditEnabled && { 'enable-funding': 'paylater' }),\n components: PAYPAL_COMPONENTS.toString(),\n intent: config.intent,\n commit: config.commit ?? true,\n };\n\n if (!this.braintreeHostWindow.paypal) {\n void loadPayPalSDKOnce(braintreePaypalCheckout, paypalSdkLoadConfig).then(\n paypalSdkLoadCallback,\n );\n } else {\n onSuccess(braintreePaypalCheckout);\n }\n };\n\n this.paypalCheckout = await paypalCheckout.create(\n paypalCheckoutConfig,\n paypalCheckoutCallback,\n );\n\n return this.paypalCheckout;\n }\n\n async getDataCollector(\n options?: Partial<BraintreeDataCollectorCreatorConfig>,\n ): Promise<BraintreeDataCollector> {\n const cacheKey: keyof BraintreeDataCollectors = options?.paypal ? 'paypal' : 'default';\n\n let cached = this.dataCollectors[cacheKey];\n\n if (!cached) {\n try {\n const client = await this.getClient();\n const dataCollector = await this.braintreeScriptLoader.loadDataCollector();\n\n const dataCollectorConfig: BraintreeDataCollectorCreatorConfig = {\n client,\n kount: true,\n ...options,\n };\n\n cached = await dataCollector.create(dataCollectorConfig);\n } catch (error) {\n if (isBraintreeError(error) && error.code === 'DATA_COLLECTOR_KOUNT_NOT_ENABLED') {\n cached = {\n deviceData: undefined,\n teardown: () => Promise.resolve(),\n };\n } else {\n throw error;\n }\n }\n\n this.dataCollectors[cacheKey] = cached;\n }\n\n return cached;\n }\n\n getBraintreeEnv(isTestMode = false): BraintreeEnv {\n return isTestMode ? BraintreeEnv.Sandbox : BraintreeEnv.Production;\n }\n\n mapToBraintreeShippingAddressOverride(address: Address): BraintreeShippingAddressOverride {\n return {\n recipientName: `${address.firstName} ${address.lastName}`,\n line1: address.address1,\n line2: address.address2,\n city: address.city,\n state: address.stateOrProvinceCode,\n postalCode: address.postalCode,\n countryCode: address.countryCode,\n phone: address.phone,\n };\n }\n\n mapToLegacyShippingAddress(details: BraintreeTokenizationDetails): Partial<LegacyAddress> {\n const { email, phone, shippingAddress } = details;\n const recipientName = shippingAddress?.recipientName || '';\n const [firstName, lastName] = recipientName.split(' ');\n\n return {\n email,\n first_name: firstName || '',\n last_name: lastName || '',\n phone_number: phone,\n address_line_1: shippingAddress?.line1,\n address_line_2: shippingAddress?.line2,\n city: shippingAddress?.city,\n state: shippingAddress?.state,\n country_code: shippingAddress?.countryCode,\n postal_code: shippingAddress?.postalCode,\n };\n }\n\n mapToLegacyBillingAddress(details: BraintreeTokenizationDetails): Partial<LegacyAddress> {\n const { billingAddress, email, firstName, lastName, phone, shippingAddress } = details;\n\n const address = billingAddress || shippingAddress;\n\n return {\n email,\n first_name: firstName,\n last_name: lastName,\n phone_number: phone,\n address_line_1: address?.line1,\n address_line_2: address?.line2,\n city: address?.city,\n state: address?.state,\n country_code: address?.countryCode,\n postal_code: address?.postalCode,\n };\n }\n\n removeElement(elementId?: string): void {\n const element = elementId && document.getElementById(elementId);\n\n if (element) {\n element.remove();\n }\n }\n\n async getSessionId(cartId?: string): Promise<string | undefined> {\n const { deviceData } = await this.getDataCollector({\n riskCorrelationId: cartId,\n });\n\n return deviceData;\n }\n\n async teardown(): Promise<void> {\n await this.teardownModule(this.dataCollectors.default);\n await this.teardownModule(this.dataCollectors.paypal);\n this.dataCollectors = {};\n\n await this.teardownModule(this.paypalCheckout);\n this.paypalCheckout = undefined;\n\n // await this.teardownModule(this._venmoCheckout);\n // this._venmoCheckout = undefined;\n\n // await this.teardownModule(this._visaCheckout);\n // this._visaCheckout = undefined;\n }\n\n async get3DS(): Promise<BraintreeThreeDSecure> {\n if (!this.threeDS) {\n this.threeDS = Promise.all([\n this.getClient(),\n this.braintreeScriptLoader.load3DS(),\n ]).then(([client, threeDSecure]) => threeDSecure.create({ client, version: 2 }));\n }\n\n return this.threeDS;\n }\n\n async getVenmoCheckout(\n venmoConfig?: BraintreeVenmoCreatorConfig,\n ): Promise<BraintreeVenmoCheckout> {\n if (!this.venmoCheckout) {\n const client = await this.getClient();\n const venmoCheckout = await this.braintreeScriptLoader.loadVenmoCheckout();\n\n const venmoCheckoutConfig = {\n client,\n allowDesktop: true,\n paymentMethodUsage: 'multi_use',\n ...(venmoConfig || {}),\n };\n\n this.venmoCheckout = await new Promise<BraintreeVenmoCheckout>((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n venmoCheckout.create(\n venmoCheckoutConfig,\n (error: BraintreeError, braintreeVenmoCheckout: BraintreeVenmoCheckout) => {\n if (error) {\n return reject(error);\n }\n\n if (!braintreeVenmoCheckout.isBrowserSupported()) {\n return reject(new UnsupportedBrowserError());\n }\n\n resolve(braintreeVenmoCheckout);\n },\n );\n });\n }\n\n return this.venmoCheckout;\n }\n\n /*\n Braintree Credit Card and Braintree Hosted Form\n */\n async verifyCard(\n payment: Payment,\n billingAddress: Address,\n amount: number,\n ): Promise<NonceInstrument> {\n const tokenizationPayload = await this.tokenizeCard(payment, billingAddress);\n\n return this.challenge3DSVerification(tokenizationPayload, amount);\n }\n\n async tokenizeCard(payment: Payment, billingAddress: Address): Promise<TokenizationPayload> {\n const { paymentData } = payment;\n\n if (!isCreditCardInstrumentLike(paymentData)) {\n throw new PaymentArgumentInvalidError(['payment.paymentData']);\n }\n\n const errors = this.getErrorsRequiredFields(paymentData);\n\n if (!isEmpty(errors)) {\n throw new PaymentInvalidFormError(errors);\n }\n\n const requestData = this.mapToCreditCard(paymentData, billingAddress);\n const client = await this.getClient();\n const { creditCards } = await client.request(requestData);\n\n return {\n nonce: creditCards[0].nonce,\n bin: creditCards[0].details.bin,\n };\n }\n\n async challenge3DSVerification(\n tokenizationPayload: TokenizationPayload,\n amount: number,\n ): Promise<BraintreeVerifyPayload> {\n const threeDSecure = await this.get3DS();\n\n return this.present3DSChallenge(threeDSecure, amount, tokenizationPayload);\n }\n\n private teardownModule(module?: BraintreeModule) {\n return module ? module.teardown() : Promise.resolve();\n }\n\n private getClientTokenOrThrow(): string {\n if (!this.clientToken) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n return this.clientToken;\n }\n\n private getErrorsRequiredFields(\n paymentData: CreditCardInstrument,\n ): PaymentInvalidFormErrorDetails {\n const { ccNumber, ccExpiry } = paymentData;\n const errors: PaymentInvalidFormErrorDetails = {};\n\n if (!ccNumber) {\n errors.ccNumber = [\n {\n message: 'Credit card number is required',\n type: 'required',\n },\n ];\n }\n\n if (!ccExpiry) {\n errors.ccExpiry = [\n {\n message: 'Expiration date is required',\n type: 'required',\n },\n ];\n }\n\n return errors;\n }\n\n private mapToCreditCard(\n creditCard: CreditCardInstrument,\n billingAddress?: Address,\n ): BraintreeRequestData {\n return {\n data: {\n creditCard: {\n cardholderName: creditCard.ccName,\n number: creditCard.ccNumber,\n cvv: creditCard.ccCvv,\n expirationDate: `${creditCard.ccExpiry.month}/${creditCard.ccExpiry.year}`,\n options: {\n validate: false,\n },\n billingAddress: billingAddress && {\n countryCodeAlpha2: billingAddress.countryCode,\n locality: billingAddress.city,\n countryName: billingAddress.country,\n postalCode: billingAddress.postalCode,\n streetAddress: billingAddress.address2\n ? `${billingAddress.address1} ${billingAddress.address2}`\n : billingAddress.address1,\n },\n },\n },\n endpoint: 'payment_methods/credit_cards',\n method: 'post',\n };\n }\n\n private present3DSChallenge(\n threeDSecure: BraintreeThreeDSecure,\n amount: number,\n tokenizationPayload: TokenizationPayload,\n ): Promise<BraintreeVerifyPayload> {\n const { nonce, bin } = tokenizationPayload;\n\n if (!nonce) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n const { challengeRequested = true, additionalInformation = undefined } =\n this.threeDSecureOptions || {};\n\n const roundedAmount = amount.toFixed(2);\n\n return threeDSecure.verifyCard({\n amount: Number(roundedAmount),\n bin,\n challengeRequested,\n nonce,\n onLookupComplete: (_data, next) => {\n next();\n },\n collectDeviceData: true,\n additionalInformation,\n });\n }\n}\n","import { CreditCardInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function isCreditCardInstrumentLike(\n instrument: unknown,\n): instrument is CreditCardInstrument {\n if (typeof instrument !== 'object' || instrument === null) {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const creditCardInstrument = instrument as Partial<Record<string, unknown>>;\n\n return (\n typeof creditCardInstrument.ccExpiry === 'object' &&\n creditCardInstrument.ccExpiry !== null &&\n typeof creditCardInstrument.ccNumber === 'string' &&\n typeof creditCardInstrument.ccName === 'string'\n );\n}\n","import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n BraintreeHostWindow,\n BraintreeInitializationData,\n PayPalBNPLConfigurationItem,\n} from './braintree';\nimport { MessagesStyleOptions, MessagingPlacements } from './paypal';\n\nexport default class BraintreeMessages {\n private braintreeHostWindow: BraintreeHostWindow = window;\n\n constructor(private paymentIntegrationService: PaymentIntegrationService) {}\n\n render(methodId: string, containerId: string, placement: MessagingPlacements): void {\n const messagingContainer = containerId && document.getElementById(containerId);\n\n if (this.braintreeHostWindow.paypal && messagingContainer) {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const billingAddress = state.getBillingAddressOrThrow();\n const paymentMethod =\n state.getPaymentMethodOrThrow<BraintreeInitializationData>(methodId);\n\n if (!paymentMethod.initializationData) {\n return;\n }\n\n const { paypalBNPLConfiguration = [] } = paymentMethod.initializationData;\n\n const bannedId = placement === MessagingPlacements.PAYMENT ? 'checkout' : placement;\n const bannerConfiguration =\n paypalBNPLConfiguration &&\n paypalBNPLConfiguration.find(({ id }) => id === bannedId);\n\n if (!bannerConfiguration || !bannerConfiguration.status) {\n return;\n }\n\n // TODO: remove this code when this data attributes will be removed from banner div container in content service\n if (placement === MessagingPlacements.CART) {\n messagingContainer.removeAttribute('data-pp-style-logo-type');\n messagingContainer.removeAttribute('data-pp-style-logo-position');\n messagingContainer.removeAttribute('data-pp-style-text-color');\n messagingContainer.removeAttribute('data-pp-style-text-size');\n }\n\n this.braintreeHostWindow.paypal\n .Messages({\n amount: cart.cartAmount,\n buyerCountry: billingAddress.countryCode,\n placement,\n style: this.getPaypalMessagesStylesFromBNPLConfig(bannerConfiguration),\n })\n .render(`#${containerId}`);\n }\n }\n\n private 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}\n","import getOverlayStyle from './overlay-style';\n\nexport interface OverlayOptions {\n background?: string;\n id?: string;\n transitionDuration?: number;\n hasCloseButton?: boolean;\n innerHtml?: HTMLElement | DocumentFragment;\n}\n\nexport interface OverlayShowOptions {\n onClick?(event: MouseEvent): void;\n onClickClose?(event: MouseEvent): void;\n}\n\nexport interface Elements {\n element: HTMLElement;\n mainElement: HTMLElement;\n closeElement?: HTMLElement;\n}\n\nexport default class Overlay {\n private _element: HTMLElement;\n private _mainElement: HTMLElement;\n private _closeElement?: HTMLElement;\n private _unregisterClick?: () => void;\n\n constructor(options?: OverlayOptions) {\n const { element, closeElement, mainElement } = this._createElements(options);\n\n this._element = element;\n this._closeElement = closeElement;\n this._mainElement = mainElement;\n }\n\n show(options?: OverlayShowOptions): void {\n if (this._mainElement.parentElement) {\n return;\n }\n\n this._registerClick(options);\n\n document.body.appendChild(this._mainElement);\n\n // Fade In\n setTimeout(() => (this._element.style.opacity = '1'));\n }\n\n remove(): void {\n if (!this._mainElement.parentElement) {\n return;\n }\n\n if (this._unregisterClick) {\n this._unregisterClick();\n }\n\n this._removeAfterTransition();\n\n setTimeout(() => (this._element.style.opacity = '0'));\n }\n\n private _createElements(options?: OverlayOptions): Elements {\n const element = document.createElement('div');\n const {\n background = 'rgba(0, 0, 0, 0.8)',\n id = 'checkoutOverlay',\n transitionDuration = 400,\n hasCloseButton = false,\n innerHtml = null,\n } = options || {};\n let mainElement = element;\n let closeElement: HTMLElement | undefined;\n let classLayout: string | undefined;\n let classClose: string | undefined;\n let classOverlayText: string | undefined;\n\n if (id) {\n element.id = id;\n }\n\n if (innerHtml) {\n const overlayText = document.createElement('div');\n\n classOverlayText = `${id}--overlayText`;\n overlayText.className = classOverlayText;\n overlayText.appendChild(innerHtml);\n\n element.appendChild(overlayText);\n }\n\n if (hasCloseButton) {\n classClose = `${id}--close`;\n closeElement = document.createElement('div');\n closeElement.className = classClose;\n\n classLayout = `${id}--layout`;\n mainElement = document.createElement('div');\n mainElement.className = classLayout;\n\n mainElement.appendChild(element);\n mainElement.appendChild(closeElement);\n }\n\n mainElement.appendChild(\n getOverlayStyle({\n id,\n background,\n transitionDuration,\n classLayout,\n classOverlayText,\n classClose,\n }),\n );\n\n return { element, closeElement, mainElement };\n }\n\n private _addEventListener(element?: HTMLElement, onClick?: (event: MouseEvent) => void): void {\n if (!element || !onClick) {\n return;\n }\n\n element.addEventListener('click', onClick);\n }\n\n private _removeEventListener(\n element?: HTMLElement,\n onClick?: (event: MouseEvent) => void,\n ): void {\n if (!element || !onClick) {\n return;\n }\n\n element.removeEventListener('click', onClick);\n }\n\n private _registerClick(options?: OverlayShowOptions): void {\n if (this._unregisterClick) {\n this._unregisterClick();\n }\n\n if (options) {\n const { onClick, onClickClose } = options;\n\n this._addEventListener(this._element, onClick);\n this._addEventListener(this._closeElement, onClickClose);\n\n this._unregisterClick = () => {\n this._removeEventListener(this._element, onClick);\n this._removeEventListener(this._closeElement, onClickClose);\n this._unregisterClick = undefined;\n };\n }\n }\n\n private _removeAfterTransition(): void {\n const handleTransition: (event: Event) => void = (event) => {\n // NOTE: `event` is not correctly typed in this version of TS\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n if ((event as TransitionEvent).propertyName !== 'opacity') {\n return;\n }\n\n if (this._mainElement.parentElement) {\n this._mainElement.remove();\n }\n\n this._element.removeEventListener('transitionend', handleTransition);\n };\n\n this._element.addEventListener('transitionend', handleTransition);\n }\n}\n","interface OverlayStyleOptions {\n background?: string;\n id?: string;\n transitionDuration?: number;\n classLayout?: string;\n classOverlayText?: string;\n classClose?: string;\n}\n\nexport default function getOverlayStyle(options: OverlayStyleOptions): HTMLElement {\n const { id, background, transitionDuration, classLayout, classOverlayText, classClose } =\n options;\n const styles = document.createElement('style');\n const addClassLayout = classLayout ? `, .${classLayout}` : '';\n\n styles.id = `${id}--styles`;\n styles.type = 'text/css';\n styles.innerText = `\n #${id}${addClassLayout} {\n display: block;\n height: 100%;\n width: 100%;\n left: 0;\n top: 0;\n position: fixed;\n z-index: 2147483647;\n }\n #${id} {\n transition: opacity ${transitionDuration}ms ease-out;\n background: ${background};\n opacity: 0;\n }\n `;\n\n if (classOverlayText) {\n styles.innerText += `\n #${id} {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n #${id} .${classOverlayText} {\n color: white;\n max-width: 330px;\n font-size: 1.2em;\n text-align: center;\n }\n `;\n }\n\n if (classClose) {\n styles.innerText += `\n #${id} {\n opacity: 1;\n }\n .${classLayout} .${classClose} {\n position: fixed;\n right: 16px;\n top: 16px;\n width: 16px;\n height: 16px;\n opacity: 0.6;\n cursor: pointer;\n z-index: 3147483647;\n }\n .${classLayout} .${classClose}::after, .${classLayout} .${classClose}::before {\n position: absolute;\n left: 8px;\n content: '';\n height: 16px;\n width: 2px;\n background-color: #fff;\n }\n .${classLayout} .${classClose}::after {\n transform: rotate(-45deg);\n }\n .${classLayout} .${classClose}::before {\n transform: rotate(45deg);\n }\n `;\n }\n\n return styles;\n}\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","export const LOADING_INDICATOR_STYLES = {\n 'background-color': 'rgba(0, 0, 0, 0.4)',\n 'z-index': '1000',\n};\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when the payment flow is cancelled. It could be\n * due to a deliberate user interaction, i.e.: the user clicks on a cancel\n * button which dismisses the payment modal.\n */\nexport default class PaymentMethodCancelledError extends StandardError {\n constructor(message?: string) {\n super(message || 'Payment process was cancelled.');\n\n this.name = 'PaymentMethodCancelledError';\n this.type = 'payment_cancelled';\n }\n}\n","import { BraintreeError } from '@bigcommerce/checkout-sdk/braintree-utils';\n\nexport default function isBraintreeError(\n error: BraintreeError | Error | unknown,\n): error is BraintreeError {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'name' in error &&\n (error as BraintreeError).name === 'BraintreeError'\n );\n}\n","import { BraintreeShippingAddressOverride } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { Address } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function mapToBraintreeShippingAddressOverride(\n address: Address,\n): BraintreeShippingAddressOverride {\n return {\n recipientName: `${address.firstName} ${address.lastName}`,\n line1: address.address1,\n line2: address.address2,\n city: address.city,\n state: address.stateOrProvinceCode,\n postalCode: address.postalCode,\n countryCode: address.countryCode,\n phone: address.phone,\n };\n}\n","import {\n BraintreeError,\n BraintreeHostWindow,\n BraintreeInitializationData,\n BraintreeIntegrationService,\n BraintreeMessages,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeTokenizePayload,\n MessagingPlacements,\n PaypalAuthorizeData,\n PaypalButtonRender,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n FormattedPayload,\n InvalidArgumentError,\n isHostedInstrumentLike,\n isHostedVaultedInstrument,\n isVaultedInstrument,\n MissingDataError,\n MissingDataErrorType,\n NotInitializedError,\n NotInitializedErrorType,\n OrderFinalizationNotRequiredError,\n OrderPaymentRequestBody,\n OrderRequestBody,\n Payment,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethod,\n PaymentMethodCancelledError,\n PaymentMethodFailedError,\n PaymentRequestOptions,\n PaymentStrategy,\n PaypalInstrument,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport isBraintreeError from '../is-braintree-error';\nimport isBraintreePaypalProviderError from '../is-braintree-paypal-provider-error';\nimport mapToBraintreeShippingAddressOverride from '../map-to-braintree-shipping-address-override';\n\nimport {\n BraintreePaypalPaymentInitializeOptions,\n WithBraintreePaypalPaymentInitializeOptions,\n} from './braintree-paypal-payment-initialize-options';\n\nexport default class BraintreePaypalPaymentStrategy implements PaymentStrategy {\n private paymentMethod?: PaymentMethod<BraintreeInitializationData>;\n private braintreeHostWindow: BraintreeHostWindow = window;\n private braintreeButtonOptions?: BraintreePaypalPaymentInitializeOptions;\n private braintreeTokenizePayload?: BraintreeTokenizePayload;\n private paypalButtonRender?: PaypalButtonRender;\n private loadingIndicatorContainer?: string;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private braintreeIntegrationService: BraintreeIntegrationService,\n private braintreeMessages: BraintreeMessages,\n private loadingIndicator: LoadingIndicator,\n ) {}\n\n async initialize(\n options: PaymentInitializeOptions & WithBraintreePaypalPaymentInitializeOptions,\n ) {\n const { braintree: braintreeOptions, methodId } = options;\n\n if (braintreeOptions?.containerId) {\n this.braintreeButtonOptions = braintreeOptions;\n }\n\n if (!this.paymentMethod || !this.paymentMethod.nonce) {\n this.paymentMethod = this.paymentIntegrationService\n .getState()\n .getPaymentMethodOrThrow(methodId);\n }\n\n if (this.paymentMethod.clientToken && braintreeOptions?.bannerContainerId) {\n await this.loadPaypal();\n\n return this.loadPaypalCheckoutInstance(braintreeOptions);\n }\n\n if (this.paymentMethod.clientToken) {\n return this.loadPaypal();\n }\n\n const state = await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n this.paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n if (braintreeOptions?.bannerContainerId) {\n return this.loadPaypalCheckoutInstance(braintreeOptions);\n }\n\n if (!this.paymentMethod.clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n return this.loadPaypal();\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 { onError } = this.braintreeButtonOptions || {};\n\n try {\n const paymentData = await this.preparePaymentData(payment, order.useStoreCredit);\n\n await this.paymentIntegrationService.submitOrder(order, options);\n await this.paymentIntegrationService.submitPayment(paymentData);\n } catch (error) {\n if (this.isProviderError(error)) {\n await this.loadPaypal();\n\n this.paypalButtonRender?.close();\n\n await this.loadPaypalCheckoutInstance(this.braintreeButtonOptions);\n\n await new Promise((_resolve, reject) => {\n if (onError && typeof onError === 'function') {\n onError(new Error('INSTRUMENT_DECLINED'));\n }\n\n reject();\n });\n }\n\n this.handleError(error);\n }\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n deinitialize(): Promise<void> {\n this.braintreeTokenizePayload = undefined;\n\n this.paypalButtonRender?.close();\n\n return this.braintreeIntegrationService.teardown();\n }\n\n private async preparePaymentData(\n payment: OrderPaymentRequestBody,\n useStoreCredit?: boolean,\n ): Promise<Payment> {\n const state = this.paymentIntegrationService.getState();\n\n const grandTotal = state.getOutstandingBalance(useStoreCredit);\n const config = state.getStoreConfig();\n\n if (!grandTotal) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n if (!config) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n }\n\n if (!this.paymentMethod) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n const {\n currency,\n storeProfile: { storeLanguage },\n } = config;\n const {\n nonce,\n config: { isVaultingEnabled },\n } = this.paymentMethod;\n const { methodId, paymentData = {} } = payment;\n\n const token = this.braintreeTokenizePayload?.nonce || nonce;\n\n if (token) {\n const state = await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n this.paymentMethod = state.getPaymentMethod(methodId);\n\n return {\n ...payment,\n paymentData: this.formattedPayload(token),\n };\n }\n\n if (isVaultedInstrument(paymentData) || isHostedVaultedInstrument(paymentData)) {\n if (!isVaultingEnabled) {\n throw new InvalidArgumentError(\n 'Vaulting is disabled but a vaulted instrument was being used for this transaction',\n );\n }\n\n return Promise.resolve(payment);\n }\n\n if (!isHostedInstrumentLike(paymentData)) {\n throw new MissingDataError(MissingDataErrorType.MissingPayment);\n }\n\n const { shouldSaveInstrument, shouldSetAsDefaultInstrument } = paymentData;\n\n if (shouldSaveInstrument && !isVaultingEnabled) {\n throw new InvalidArgumentError(\n 'Vaulting is disabled but shouldSaveInstrument is set to true',\n );\n }\n\n const shippingAddress = state.getShippingAddress();\n\n const shippingAddressOverride = shippingAddress\n ? mapToBraintreeShippingAddressOverride(shippingAddress)\n : undefined;\n\n return Promise.all([\n this.braintreeIntegrationService.paypal({\n amount: grandTotal,\n locale: storeLanguage,\n currency: currency.code,\n offerCredit: this.paymentMethod.id === 'braintreepaypalcredit',\n shippingAddressOverride,\n shouldSaveInstrument: shouldSaveInstrument || false,\n shippingAddressEditable: false,\n }),\n this.braintreeIntegrationService.getSessionId(),\n ]).then(([{ nonce, details } = {} as any, sessionId]) => ({\n ...payment,\n paymentData: this.formattedPayload(\n nonce,\n details && details.email,\n sessionId,\n shouldSaveInstrument,\n shouldSetAsDefaultInstrument,\n ),\n }));\n }\n\n private formattedPayload(\n token: string,\n email?: string,\n sessionId?: string,\n vaultPaymentInstrument?: boolean,\n shouldSetAsDefaultInstrument?: boolean,\n ): FormattedPayload<PaypalInstrument> {\n return {\n formattedPayload: {\n vault_payment_instrument: vaultPaymentInstrument || null,\n set_as_default_stored_instrument: shouldSetAsDefaultInstrument || null,\n device_info: sessionId || null,\n paypal_account: {\n token,\n email: email || null,\n },\n },\n };\n }\n\n private async loadPaypalCheckoutInstance(options?: BraintreePaypalPaymentInitializeOptions) {\n const { clientToken, initializationData, id: paymentMethodId } = this.paymentMethod || {};\n\n if (!clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n try {\n this.braintreeIntegrationService.initialize(clientToken);\n\n const currencyCode = this.paymentIntegrationService.getState().getCartOrThrow()\n .currency.code;\n\n const paypalCheckoutConfig: Partial<BraintreePaypalSdkCreatorConfig> = {\n currency: currencyCode,\n intent: initializationData?.intent,\n isCreditEnabled: initializationData?.isCreditEnabled,\n };\n\n const isBraintreePaypalCredit = paymentMethodId === 'braintreepaypalcredit';\n const shouldShowPayPalCreditBanner =\n isBraintreePaypalCredit || !initializationData?.isCreditEnabled;\n\n await this.braintreeIntegrationService.getPaypalCheckout(\n paypalCheckoutConfig,\n (braintreePaypalCheckout) => {\n if (\n shouldShowPayPalCreditBanner &&\n paymentMethodId &&\n options?.bannerContainerId\n ) {\n this.renderPayPalMessages(paymentMethodId, options.bannerContainerId);\n }\n\n this.renderPayPalButton(braintreePaypalCheckout, options);\n },\n this.handleError,\n );\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private renderPayPalMessages(methodId: string, containerId: string) {\n this.braintreeMessages.render(methodId, containerId, MessagingPlacements.PAYMENT);\n }\n\n private renderPayPalButton(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n options?: BraintreePaypalPaymentInitializeOptions,\n ) {\n const { onPaymentError, submitForm, onRenderButton, containerId, onError } = options || {};\n\n if (!containerId) {\n return;\n }\n\n const container = this.getSmartButtonContainerId(containerId);\n const smartButtonContainer = document.getElementById(container);\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 if (!this.paymentMethod) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n this.loadingIndicatorContainer = containerId.split('#')[1];\n\n const {\n id,\n config: { testMode },\n } = this.paymentMethod;\n\n const { paypal } = this.braintreeHostWindow;\n const fundingSource = paypal?.FUNDING.PAYPAL;\n\n if (paypal && fundingSource) {\n this.paypalButtonRender = paypal.Buttons({\n env: testMode ? 'sandbox' : 'production',\n commit: false,\n fundingSource,\n onInit: (_, actions) => {\n options?.onInitButton?.(actions);\n },\n onClick: (_, actions) => {\n const { resolve, reject } = actions;\n\n const onValidationPassed = () => {\n this.toggleLoadingIndicator(true);\n\n return resolve();\n };\n\n return typeof options?.onValidate !== 'undefined'\n ? options.onValidate(onValidationPassed, reject)\n : onValidationPassed();\n },\n createOrder: () => this.setupPayment(braintreePaypalCheckout, id, onPaymentError),\n onApprove: async (authorizeData: PaypalAuthorizeData) => {\n this.braintreeTokenizePayload = await this.tokenizePaymentOrThrow(\n authorizeData,\n braintreePaypalCheckout,\n );\n\n if (submitForm && typeof submitForm === 'function') {\n submitForm();\n }\n },\n onCancel: () => {\n this.toggleLoadingIndicator(false);\n },\n onError: (error: Error) => {\n this.toggleLoadingIndicator(false);\n\n onError?.(error);\n },\n });\n\n if (onRenderButton && typeof onRenderButton === 'function') {\n onRenderButton();\n }\n\n if (this.paypalButtonRender.isEligible()) {\n this.paypalButtonRender.render(`${containerId}`);\n }\n } else {\n this.removeElement(containerId.split('#')[1]);\n }\n }\n\n private async setupPayment(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n method: string,\n onPaymentError: BraintreePaypalPaymentInitializeOptions['onPaymentError'],\n ): Promise<string> {\n const state = this.paymentIntegrationService.getState();\n\n try {\n const customer = state.getCustomer();\n\n const paymentMethod: PaymentMethod = state.getPaymentMethodOrThrow(method);\n\n const amount = state.getCheckoutOrThrow().outstandingBalance;\n const currencyCode = state.getStoreConfigOrThrow().currency.code;\n\n const shippingAddress = state.getShippingAddress();\n\n const address = shippingAddress || customer?.addresses[0];\n\n const shippingAddressOverride = address\n ? mapToBraintreeShippingAddressOverride(address)\n : undefined;\n\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n shippingAddressOverride,\n amount,\n currency: currencyCode,\n offerCredit: false,\n intent: paymentMethod.initializationData.intent,\n });\n } catch (error) {\n if (onPaymentError && (isBraintreeError(error) || error instanceof StandardError)) {\n onPaymentError(error);\n }\n\n throw error;\n }\n }\n\n private async tokenizePaymentOrThrow(\n authorizeData: PaypalAuthorizeData,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n onError?: (error: BraintreeError | StandardError) => void,\n ): Promise<BraintreeTokenizePayload> {\n try {\n return await braintreePaypalCheckout.tokenizePayment(authorizeData);\n } catch (error) {\n if (onError && (isBraintreeError(error) || error instanceof StandardError)) {\n onError(error);\n }\n\n throw error;\n }\n }\n\n private async loadPaypal() {\n const { clientToken, initializationData } = this.paymentMethod || {};\n\n if (!clientToken || !initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n try {\n this.braintreeIntegrationService.initialize(clientToken);\n\n await this.braintreeIntegrationService.getPaypal();\n } catch (error) {\n this.handleError(error);\n }\n\n return Promise.resolve();\n }\n\n private handleError(error: BraintreeError | Error | unknown): never {\n if (!isBraintreeError(error)) {\n throw error;\n }\n\n if (error.code === 'PAYPAL_POPUP_CLOSED') {\n throw new PaymentMethodCancelledError(error.message);\n }\n\n throw new PaymentMethodFailedError(error.message);\n }\n\n private isProviderError(error: unknown): boolean {\n if (isBraintreePaypalProviderError(error)) {\n const paypalProviderError = error?.errors?.filter((e) => e.provider_error) || [];\n\n return paypalProviderError[0]?.provider_error?.code === '2046';\n }\n\n return false;\n }\n\n private removeElement(elementId?: string): void {\n const element = elementId && document.getElementById(elementId);\n\n if (element) {\n element.remove();\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 private getSmartButtonContainerId(container: string) {\n return container.split('#')[1] ?? container;\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 isBraintreePaypalProviderError(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 BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeMessages,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator, Overlay } from '@bigcommerce/checkout-sdk/ui';\n\nimport { LOADING_INDICATOR_STYLES } from '../braintree-paypal-constants';\n\nimport BraintreePaypalPaymentStrategy from './braintree-paypal-payment-strategy';\n\nconst createBraintreePaypalPaymentStrategy: PaymentStrategyFactory<\n BraintreePaypalPaymentStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const overlay = new Overlay();\n\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n ),\n braintreeHostWindow,\n overlay,\n );\n const braintreeMessages = new BraintreeMessages(paymentIntegrationService);\n\n return new BraintreePaypalPaymentStrategy(\n paymentIntegrationService,\n braintreeIntegrationService,\n braintreeMessages,\n new LoadingIndicator({\n containerStyles: LOADING_INDICATOR_STYLES,\n }),\n );\n};\n\nexport default toResolvableModule(createBraintreePaypalPaymentStrategy, [\n { id: 'braintreepaypal' },\n { id: 'braintreepaypalcredit' },\n]);\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 { BraintreeOrderStatusData } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n ContentType,\n INTERNAL_USE_ONLY,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class BraintreeRequestSender {\n constructor(private requestSender: RequestSender) {}\n\n async getOrderStatus(\n methodId = 'braintreelocalmethods',\n options?: RequestOptions,\n ): Promise<BraintreeOrderStatusData> {\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<BraintreeOrderStatusData>(url, {\n headers,\n ...options,\n });\n\n return res.body;\n }\n}\n","export const INTERNAL_USE_ONLY =\n 'This API endpoint is for internal use only and may change in the future';\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","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 { 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 { noop } from 'lodash';\n\nimport {\n BraintreeInitializationData,\n BraintreeLocalPayment,\n BraintreeLocalPaymentConfig,\n BraintreeLocalPaymentMethodRedirectAction,\n BraintreeLocalPaymentsPayload,\n BraintreeLPMPaymentStartData,\n BraintreeLPMStartPaymentError,\n BraintreeOrderSavedResponse,\n BraintreeOrderStatus,\n BraintreeRedirectError,\n BraintreeSdk,\n NonInstantLocalPaymentMethods,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n OrderFinalizationNotRequiredError,\n OrderRequestBody,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentInstrumentMeta,\n PaymentIntegrationService,\n PaymentMethodInvalidError,\n PaymentRequestOptions,\n PaymentStrategy,\n RequestOptions,\n TimeoutError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport BraintreeRequestSender from '../braintree-request-sender';\n\nimport {\n BraintreeLocalMethodsPaymentInitializeOptions,\n WithBraintreeLocalMethodsPaymentInitializeOptions,\n} from './braintree-local-methods-payment-initialize-options';\n\nconst POLLING_INTERVAL = 3000;\nconst MAX_POLLING_TIME = 300000;\n\nexport default class BraintreeLocalMethodsPaymentStrategy implements PaymentStrategy {\n private braintreelocalmethods?: BraintreeLocalMethodsPaymentInitializeOptions;\n private braintreeLocalPayment?: BraintreeLocalPayment;\n private loadingIndicatorContainer?: string;\n private orderId?: string;\n private gatewayId?: string;\n private isLPMsUpdateExperimentEnabled = false;\n private pollingTimer = 0;\n private stopPolling = noop;\n private isPollingEnabled = false;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private braintreeSdk: BraintreeSdk,\n private braintreeRequestSender: BraintreeRequestSender,\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 & WithBraintreeLocalMethodsPaymentInitializeOptions,\n ): Promise<void> {\n const { gatewayId, methodId, braintreelocalmethods } = options;\n\n this.gatewayId = gatewayId;\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 (!braintreelocalmethods) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreelocalmethods\" argument is not provided.`,\n );\n }\n\n this.braintreelocalmethods = braintreelocalmethods;\n this.loadingIndicatorContainer = braintreelocalmethods.container.split('#')[1];\n\n await this.paymentIntegrationService.loadPaymentMethod(gatewayId);\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<BraintreeInitializationData>(gatewayId);\n const { clientToken, config, initializationData } = paymentMethod;\n const features = state.getStoreConfigOrThrow().checkoutSettings.features;\n\n this.isPollingEnabled = isExperimentEnabled(\n features,\n 'PAYPAL-5258.braintree_local_methods_polling',\n );\n\n this.isLPMsUpdateExperimentEnabled = isExperimentEnabled(\n features,\n 'PAYPAL-4853.add_new_payment_flow_for_braintree_lpms',\n );\n\n if (!clientToken || !initializationData || !config.merchantId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n try {\n this.braintreeSdk.initialize(clientToken);\n\n if (!this.isNonInstantPaymentMethod(methodId)) {\n this.braintreeLocalPayment = await this.braintreeSdk.getBraintreeLocalPayment(\n config.merchantId,\n );\n }\n } catch (error: unknown) {\n this.handleError(error);\n }\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n async deinitialize(): Promise<void> {\n this.toggleLoadingIndicator(false);\n\n return Promise.resolve();\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 } = payment;\n\n this.toggleLoadingIndicator(true);\n\n if (this.isNonInstantPaymentMethod(methodId)) {\n await this.executeWithNotInstantLPM(methodId);\n } else {\n await this.executeWithInstantLPM(methodId, order, options);\n }\n }\n\n private async executeWithNotInstantLPM(methodId: string): Promise<void> {\n try {\n const basicPaymentData = await this.getLPMsBasicPaymentData();\n\n await this.paymentIntegrationService.submitOrder();\n await this.paymentIntegrationService.submitPayment({\n methodId,\n paymentData: {\n ...basicPaymentData,\n formattedPayload: {\n method: methodId,\n },\n },\n });\n } catch (error: unknown) {\n if (this.isBraintreeRedirectError(error)) {\n const redirectUrl = error.body.additional_action_required.data.redirect_url;\n\n return new Promise((_, reject) => {\n window.location.replace(redirectUrl);\n\n this.toggleLoadingIndicator(false);\n\n reject();\n });\n }\n\n this.handleError(error);\n\n return Promise.reject(error);\n }\n }\n\n private async executeWithInstantLPM(\n methodId: string,\n order: Omit<OrderRequestBody, 'payment'>,\n options?: PaymentRequestOptions,\n ): Promise<void> {\n if (!this.braintreeLocalPayment) {\n throw new PaymentMethodInvalidError();\n }\n\n await new Promise((resolve, reject): void => {\n this.braintreeLocalPayment?.startPayment(\n this.getInstantLPMConfig(methodId, order, options),\n this.getInstantLPMCallback(resolve, reject, methodId, order, options),\n );\n });\n }\n\n private async getLPMsBasicPaymentData(): Promise<PaymentInstrumentMeta> {\n const { deviceData } = await this.braintreeSdk.getDataCollectorOrThrow();\n\n return { deviceSessionId: deviceData };\n }\n\n private getInstantLPMConfig(\n methodId: string,\n order: Omit<OrderRequestBody, 'payment'>,\n options?: RequestOptions,\n ): BraintreeLocalPaymentConfig {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const billing = state.getBillingAddressOrThrow();\n const { firstName, lastName, countryCode } = billing;\n const { currency, email, lineItems } = cart;\n const isShippingRequired = lineItems.physicalItems.length > 0;\n const grandTotal = state.getCheckoutOrThrow().outstandingBalance;\n const checkoutUrl = state.getStoreConfigOrThrow().links.checkoutLink;\n\n return {\n paymentType: methodId,\n amount: grandTotal,\n fallback: {\n url: checkoutUrl,\n buttonText: 'Complete Payment',\n },\n currencyCode: currency.code,\n shippingAddressRequired: isShippingRequired,\n email,\n givenName: firstName,\n surname: lastName,\n address: {\n countryCode,\n },\n onPaymentStart: async (data: BraintreeLPMPaymentStartData, start: () => void) => {\n if (!this.isLPMsUpdateExperimentEnabled) {\n this.orderId = data.paymentId;\n\n start();\n\n return;\n }\n\n const basicPaymentData = await this.getLPMsBasicPaymentData();\n const paymentData = {\n ...basicPaymentData,\n formattedPayload: {\n method: methodId,\n [`${methodId}_account`]: {\n order_id: data.paymentId,\n },\n },\n };\n\n try {\n // Submit order and payment should be performed to pass order_id to the backend\n await this.paymentIntegrationService.submitOrder(order, options);\n await this.paymentIntegrationService.submitPayment({\n methodId,\n paymentData,\n });\n } catch (error: unknown) {\n if (\n this.isBraintreeOrderSavedResponse(error) &&\n error.body.additional_action_required.data.order_id_saved_successfully\n ) {\n // Start method call initiates the popup\n start();\n\n if (this.isPollingEnabled) {\n return new Promise((resolve, reject) => {\n void this.initializePollingMechanism(\n methodId,\n resolve,\n reject,\n this.gatewayId,\n );\n });\n }\n\n return;\n }\n\n throw error;\n }\n },\n };\n }\n\n private getInstantLPMCallback(\n resolve: (value: unknown) => void,\n reject: (reason?: unknown) => void,\n methodId: string,\n order: Omit<OrderRequestBody, 'payment'>,\n options?: RequestOptions,\n ) {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n\n return async (\n startPaymentError: BraintreeLPMStartPaymentError | undefined,\n payloadData: BraintreeLocalPaymentsPayload,\n ) => {\n if (startPaymentError) {\n if (startPaymentError.code === 'LOCAL_PAYMENT_WINDOW_CLOSED') {\n this.toggleLoadingIndicator(false);\n this.resetPollingMechanism();\n\n return reject();\n }\n\n if (this.isPollingEnabled) {\n this.resetPollingMechanism();\n }\n\n this.toggleLoadingIndicator(false);\n\n return reject(new PaymentMethodInvalidError());\n }\n\n const basicPaymentData = await this.getLPMsBasicPaymentData();\n const paymentData = {\n ...basicPaymentData,\n formattedPayload: {\n method: methodId,\n [`${methodId}_account`]: {\n email: cart.email,\n token: payloadData.nonce,\n ...(!this.isLPMsUpdateExperimentEnabled ? { order_id: this.orderId } : {}),\n },\n },\n };\n\n try {\n if (!this.isLPMsUpdateExperimentEnabled) {\n await this.paymentIntegrationService.submitOrder(order, options);\n }\n\n await this.paymentIntegrationService.submitPayment({\n methodId,\n paymentData,\n });\n\n return resolve(undefined);\n } catch (error: unknown) {\n this.handleError(error);\n\n return reject(error);\n }\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 private handleError(error: unknown) {\n const { onError } = this.braintreelocalmethods || {};\n\n if (this.isPollingEnabled) {\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 * Utils\n *\n * */\n private isNonInstantPaymentMethod(methodId: string): boolean {\n return methodId.toUpperCase() in NonInstantLocalPaymentMethods;\n }\n\n private isBraintreeRedirectError(error: unknown): error is BraintreeRedirectError {\n if (typeof error !== 'object' || error === null) {\n return false;\n }\n\n const { body }: Partial<BraintreeLocalPaymentMethodRedirectAction> = error;\n\n if (!body) {\n return false;\n }\n\n return !!body.additional_action_required?.data.redirect_url;\n }\n\n private isBraintreeOrderSavedResponse(\n response: unknown,\n ): response is BraintreeOrderSavedResponse {\n if (typeof response !== 'object' || response === null) {\n return false;\n }\n\n const { body }: Partial<BraintreeOrderSavedResponse> = response;\n\n if (!body) {\n return false;\n }\n\n return body.additional_action_required?.data.hasOwnProperty('order_id_saved_successfully');\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.braintreeRequestSender.getOrderStatus(gatewayId, {\n params: {\n useMetadata: false,\n },\n });\n\n const isOrderPending = orderStatus.status === BraintreeOrderStatus.Pending;\n const isOrderApproved = orderStatus.status === BraintreeOrderStatus.Completed;\n const isPollingError = orderStatus.status === BraintreeOrderStatus.Failed;\n\n if (isOrderApproved) {\n this.deinitializePollingMechanism();\n\n return resolvePromise();\n }\n\n if (isPollingError) {\n return rejectPromise();\n }\n\n if (\n !isOrderApproved &&\n isOrderPending &&\n this.pollingTimer < this.maxPollingIntervalTime\n ) {\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 braintreelocalmethods: this.braintreelocalmethods,\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 & WithBraintreeLocalMethodsPaymentInitializeOptions,\n ) {\n await this.deinitialize();\n await this.initialize(options);\n }\n}\n","import { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeScriptLoader,\n BraintreeSdk,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport BraintreeRequestSender from '../braintree-request-sender';\n\nimport BraintreeLocalMethodsPaymentStrategy from './braintree-local-methods-payment-strategy';\n\nconst createBraintreeLocalMethodsPaymentStrategy: PaymentStrategyFactory<\n BraintreeLocalMethodsPaymentStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeSdk = new BraintreeSdk(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n ),\n );\n const requestSender = createRequestSender();\n const braintreeRequestSender = new BraintreeRequestSender(requestSender);\n\n return new BraintreeLocalMethodsPaymentStrategy(\n paymentIntegrationService,\n braintreeSdk,\n braintreeRequestSender,\n new LoadingIndicator({ styles: { backgroundColor: 'black' } }),\n );\n};\n\nexport default toResolvableModule(createBraintreeLocalMethodsPaymentStrategy, [\n { gateway: 'braintreelocalmethods' },\n]);\n","import { omitBy } from 'lodash';\n\nimport { BraintreeFastlaneStylesOption, FastlaneStylesSettings } from '../index';\n\nfunction isInvalidStyleOption(styleOption: unknown) {\n return typeof styleOption !== 'string';\n}\n\nexport default function getFastlaneStyles(\n styleSettings?: FastlaneStylesSettings,\n uiStyles?: BraintreeFastlaneStylesOption,\n): BraintreeFastlaneStylesOption | undefined {\n if (!uiStyles && !styleSettings) {\n return undefined;\n }\n\n return cleanUpFastlaneStyles(mergeFastlaneStyles(styleSettings, uiStyles));\n}\n\nfunction mergeFastlaneStyles(\n styleSettings?: FastlaneStylesSettings,\n uiStyles?: BraintreeFastlaneStylesOption,\n): BraintreeFastlaneStylesOption {\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: BraintreeFastlaneStylesOption) {\n const fastlaneStyles: BraintreeFastlaneStylesOption = {};\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\nexport default function isBraintreeAcceleratedCheckoutCustomer(\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 { 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","import {\n Braintree3DSVerifyCardError,\n Braintree3DSVerifyCardPayload,\n BraintreeFastlaneAddress,\n BraintreeFastlaneAuthenticationState,\n BraintreeFastlaneCardComponent,\n BraintreeFastlaneCardComponentOptions,\n BraintreeInitializationData,\n BraintreeSdk,\n getFastlaneStyles,\n isBraintreeAcceleratedCheckoutCustomer,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n Address,\n CardInstrument,\n InvalidArgumentError,\n OrderFinalizationNotRequiredError,\n OrderRequestBody,\n Payment,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethodCancelledError,\n PaymentMethodClientUnavailableError,\n PaymentRequestOptions,\n PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport { WithBraintreeFastlanePaymentInitializeOptions } from './braintree-fastlane-payment-initialize-options';\nimport BraintreeFastlaneUtils from './braintree-fastlane-utils';\n\nexport default class BraintreeFastlanePaymentStrategy implements PaymentStrategy {\n private braintreeCardComponent?: BraintreeFastlaneCardComponent;\n private is3DSEnabled?: boolean;\n private onError?: (error: Error) => void;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private braintreeFastlaneUtils: BraintreeFastlaneUtils,\n private braintreeSdk: BraintreeSdk,\n ) {}\n\n /**\n *\n * Default methods\n *\n */\n async initialize(\n options: PaymentInitializeOptions & WithBraintreeFastlanePaymentInitializeOptions,\n ): Promise<void> {\n const { methodId, braintreefastlane } = 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 (!braintreefastlane) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.braintreefastlane\" argument is not provided.',\n );\n }\n\n if (!braintreefastlane.onInit || typeof braintreefastlane.onInit !== 'function') {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.braintreefastlane.onInit\" argument is not provided or it is not a function.',\n );\n }\n\n if (!braintreefastlane.onChange || typeof braintreefastlane.onChange !== 'function') {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.braintreefastlane.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 paymentMethod = state.getPaymentMethodOrThrow<BraintreeInitializationData>(methodId);\n const { initializationData, clientToken } = paymentMethod || {};\n const { isFastlaneStylingEnabled } = initializationData || {};\n const features = state.getStoreConfigOrThrow().checkoutSettings.features;\n const isThreeDSExperimentEnabled = isExperimentEnabled(\n features,\n 'PROJECT-7080.braintree_fastlane_three_ds',\n );\n\n this.is3DSEnabled = paymentMethod.config.is3dsEnabled;\n\n if (clientToken && isThreeDSExperimentEnabled) {\n this.braintreeSdk.initialize(clientToken);\n }\n\n const paypalFastlaneStyleSettings = isFastlaneStylingEnabled\n ? paymentMethod.initializationData?.fastlaneStyles\n : undefined;\n\n const fastlaneStyles = getFastlaneStyles(\n paypalFastlaneStyleSettings,\n braintreefastlane.styles,\n );\n\n await this.braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow(\n methodId,\n fastlaneStyles,\n );\n\n if (this.shouldRunAuthenticationFlow()) {\n await this.braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow();\n }\n\n await this.initializeCardComponent();\n\n this.onError = braintreefastlane.onError;\n\n braintreefastlane.onInit((container) => this.renderBraintreeCardComponent(container));\n braintreefastlane.onChange(() => this.handleBraintreeStoredInstrumentChange(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 await this.paymentIntegrationService.submitOrder(order, options);\n\n const paymentPayload = await this.preparePaymentPayload(payment.methodId);\n\n await this.paymentIntegrationService.submitPayment(paymentPayload);\n\n this.braintreeFastlaneUtils.removeSessionIdFromCookies();\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n async deinitialize(): Promise<void> {\n this.braintreeCardComponent = undefined;\n\n return Promise.resolve();\n }\n\n /**\n *\n * Braintree Fastlane Component rendering method\n *\n */\n private async initializeCardComponent() {\n const state = this.paymentIntegrationService.getState();\n const { phone, firstName, lastName } = state.getBillingAddressOrThrow();\n const fullName = `${firstName} ${lastName}`;\n\n const cardComponentOptions: BraintreeFastlaneCardComponentOptions = {\n styles: {},\n fields: {\n cardholderName: {\n prefill: fullName,\n enabled: true,\n },\n ...(phone && {\n phoneNumber: {\n prefill: phone,\n },\n }),\n },\n };\n\n const paypalPaymentComponent =\n this.braintreeFastlaneUtils.getBraintreeFastlaneComponentOrThrow();\n\n this.braintreeCardComponent = await paypalPaymentComponent(cardComponentOptions);\n }\n\n private renderBraintreeCardComponent(container?: string) {\n const braintreeCardComponent = this.getBraintreeCardComponentOrThrow();\n\n if (!container) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"container\" argument is not provided.',\n );\n }\n\n braintreeCardComponent.render(container);\n }\n\n /**\n *\n * Payment Payload preparation methods\n *\n */\n private async preparePaymentPayload(methodId: string): Promise<Payment> {\n const state = this.paymentIntegrationService.getState();\n const billingAddress = state.getBillingAddressOrThrow();\n const fullName = `${billingAddress.firstName} ${billingAddress.lastName}`;\n\n const paypalInstrument = this.getPayPalInstruments()[0];\n\n const deviceSessionId = await this.braintreeFastlaneUtils.getDeviceSessionId();\n const features = state.getStoreConfigOrThrow().checkoutSettings.features;\n const isThreeDSExperimentEnabled = isExperimentEnabled(\n features,\n 'PROJECT-7080.braintree_fastlane_three_ds',\n );\n\n if (paypalInstrument) {\n const threeDSToken =\n this.is3DSEnabled && isThreeDSExperimentEnabled\n ? await this.get3DS(paypalInstrument.bigpayToken, paypalInstrument?.iin || '')\n : undefined;\n\n return {\n methodId,\n paymentData: {\n deviceSessionId,\n formattedPayload: {\n paypal_fastlane_token: {\n token: threeDSToken || paypalInstrument.bigpayToken,\n },\n },\n },\n };\n }\n\n const { getPaymentToken } = this.getBraintreeCardComponentOrThrow();\n\n const paymentToken = await getPaymentToken({\n name: { fullName },\n billingAddress: this.mapToPayPalAddress(billingAddress),\n });\n\n const binGuest = paymentToken.paymentSource.card?.binDetails?.bin || '';\n const threeDSToken =\n this.is3DSEnabled && isThreeDSExperimentEnabled\n ? await this.get3DS(paymentToken.id, binGuest)\n : undefined;\n\n return {\n methodId,\n paymentData: {\n deviceSessionId,\n nonce: threeDSToken || paymentToken.id,\n },\n };\n }\n\n /**\n * 3DS\n */\n private async get3DS(nonce: string, bin: string): Promise<string> {\n const state = this.paymentIntegrationService.getState();\n const threeDSecure = await this.braintreeSdk.getBraintreeThreeDS();\n const order = state.getOrderOrThrow();\n\n return new Promise<string>((resolve, reject) => {\n void threeDSecure.verifyCard(\n {\n amount: order?.orderAmount,\n nonce,\n bin,\n onLookupComplete: (_data, next) => {\n threeDSecure.on('customer-canceled', () => {\n if (typeof this.onError === 'function') {\n this.onError(new PaymentMethodCancelledError());\n }\n\n reject(new PaymentMethodCancelledError());\n });\n\n next();\n },\n },\n (\n verifyError: Braintree3DSVerifyCardError,\n payload: Braintree3DSVerifyCardPayload,\n ) => {\n if (\n verifyError &&\n verifyError.code === 'THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT'\n ) {\n if (typeof this.onError === 'function') {\n this.onError(new PaymentMethodCancelledError());\n }\n\n reject(new PaymentMethodCancelledError());\n }\n\n return resolve(payload.nonce);\n },\n );\n });\n }\n\n /**\n *\n * Mapper methods\n *\n */\n private mapToPayPalAddress(address?: Address): BraintreeFastlaneAddress {\n return {\n streetAddress: address?.address1 || '',\n locality: address?.city || '',\n region: address?.stateOrProvinceCode || address?.stateOrProvince || '',\n postalCode: address?.postalCode || '',\n countryCodeAlpha2: address?.countryCode || '',\n };\n }\n\n /**\n *\n * Other 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 braintreePaymentProviderCustomer = isBraintreeAcceleratedCheckoutCustomer(\n paymentProviderCustomer,\n )\n ? paymentProviderCustomer\n : {};\n\n const paypalFastlaneSessionId = this.braintreeFastlaneUtils.getSessionIdFromCookies();\n\n if (\n !customer.isGuest ||\n braintreePaymentProviderCustomer?.authenticationState ===\n BraintreeFastlaneAuthenticationState.CANCELED\n ) {\n return false;\n }\n\n return (\n !braintreePaymentProviderCustomer?.authenticationState &&\n paypalFastlaneSessionId === cart.id\n );\n }\n\n private getBraintreeCardComponentOrThrow() {\n if (!this.braintreeCardComponent) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.braintreeCardComponent;\n }\n\n private getPayPalInstruments(): CardInstrument[] {\n const state = this.paymentIntegrationService.getState();\n const paymentProviderCustomer = state.getPaymentProviderCustomerOrThrow();\n const braintreePaymentProviderCustomer = isBraintreeAcceleratedCheckoutCustomer(\n paymentProviderCustomer,\n )\n ? paymentProviderCustomer\n : {};\n\n return braintreePaymentProviderCustomer.instruments || [];\n }\n\n /**\n *\n * Braintree Fastlane instrument change\n *\n */\n private async handleBraintreeStoredInstrumentChange(\n methodId: string,\n ): Promise<CardInstrument | undefined> {\n const paypalAxoSdk = this.braintreeFastlaneUtils.getBraintreeFastlaneOrThrow();\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 braintreeFastlaneCustomer = isBraintreeAcceleratedCheckoutCustomer(\n paymentProviderCustomer,\n )\n ? paymentProviderCustomer\n : {};\n\n const selectedInstruments = this.braintreeFastlaneUtils.mapPayPalToBcInstrument(\n methodId,\n [selectedCard],\n );\n\n if (selectedInstruments && selectedInstruments.length > 0) {\n await this.paymentIntegrationService.updatePaymentProviderCustomer({\n ...braintreeFastlaneCustomer,\n instruments: [...selectedInstruments],\n });\n\n return selectedInstruments[0];\n }\n }\n\n return undefined;\n }\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","import { isEqual, omit } from 'lodash';\n\nimport {\n BraintreeFastlane,\n BraintreeFastlaneAddress,\n BraintreeFastlaneAuthenticationState,\n BraintreeFastlaneProfileData,\n BraintreeFastlaneStylesOption,\n BraintreeFastlaneVaultedInstrument,\n BraintreeInitializationData,\n BraintreeIntegrationService,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CardInstrument,\n CustomerAddress,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethodClientUnavailableError,\n UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { CookieStorage } from '@bigcommerce/checkout-sdk/storage';\n\nexport default class BraintreeFastlaneUtils {\n private braintreeFastlane?: BraintreeFastlane;\n private methodId?: string;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private braintreeIntegrationService: BraintreeIntegrationService,\n ) {}\n\n async getDeviceSessionId(): Promise<string | undefined> {\n const cart = this.paymentIntegrationService.getState().getCart();\n\n return this.braintreeIntegrationService.getSessionId(cart?.id);\n }\n\n /**\n *\n * Initialization method\n *\n */\n async initializeBraintreeFastlaneOrThrow(\n methodId: string,\n styles?: BraintreeFastlaneStylesOption,\n ) {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCart();\n const { clientToken, config } =\n state.getPaymentMethodOrThrow<BraintreeInitializationData>(methodId);\n\n if (!clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n this.methodId = methodId;\n\n this.braintreeIntegrationService.initialize(clientToken);\n\n this.braintreeFastlane = await this.braintreeIntegrationService.getBraintreeFastlane(\n cart?.id,\n config.testMode,\n styles,\n );\n }\n\n getBraintreeFastlaneOrThrow(): BraintreeFastlane {\n if (!this.braintreeFastlane) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.braintreeFastlane;\n }\n\n getBraintreeFastlaneComponentOrThrow(): BraintreeFastlane['FastlaneCardComponent'] {\n const braintreeFastlane = this.getBraintreeFastlaneOrThrow();\n\n return braintreeFastlane.FastlaneCardComponent;\n }\n\n /**\n *\n * Authentication methods\n *\n * */\n // Remove this rule disabling after method refactor\n // eslint-disable-next-line complexity\n async runPayPalAuthenticationFlowOrThrow(\n email?: string,\n shouldSetShippingOption?: boolean,\n ): Promise<void> {\n try {\n const methodId = this.getMethodIdOrThrow();\n const braintreeFastlane = this.getBraintreeFastlaneOrThrow();\n const { lookupCustomerByEmail, triggerAuthenticationFlow } = braintreeFastlane.identity;\n\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const customer = state.getCustomer();\n const billingAddress = state.getBillingAddress();\n const { isFastlaneShippingOptionAutoSelectEnabled } =\n state.getPaymentMethodOrThrow<BraintreeInitializationData>(methodId)\n .initializationData || {};\n\n const customerEmail = email || customer?.email || billingAddress?.email || '';\n\n const { customerContextId } = await lookupCustomerByEmail(customerEmail);\n\n if (!customerContextId) {\n // Info: we should clean up previous experience with default data and related authenticationState\n await this.paymentIntegrationService.updatePaymentProviderCustomer({\n authenticationState: BraintreeFastlaneAuthenticationState.UNRECOGNIZED,\n addresses: [],\n instruments: [],\n });\n\n this.saveSessionIdToCookies(cart.id);\n\n return;\n }\n\n const { authenticationState, profileData } = await triggerAuthenticationFlow(\n customerContextId,\n );\n\n const phoneNumber = profileData?.shippingAddress?.phoneNumber || '';\n\n if (authenticationState === BraintreeFastlaneAuthenticationState.CANCELED) {\n await this.paymentIntegrationService.updatePaymentProviderCustomer({\n authenticationState,\n addresses: [],\n instruments: [],\n });\n\n this.removeSessionIdFromCookies();\n\n return;\n }\n\n const shippingAddresses =\n this.mapPayPalToBcAddress([profileData.shippingAddress], [phoneNumber]) || [];\n const paypalBillingAddress = this.getPayPalBillingAddresses(profileData);\n const billingAddresses = paypalBillingAddress\n ? this.mapPayPalToBcAddress([paypalBillingAddress], [phoneNumber])\n : [];\n const instruments = profileData.card\n ? this.mapPayPalToBcInstrument(methodId, [profileData.card])\n : [];\n const addresses = this.mergeShippingAndBillingAddresses(\n shippingAddresses,\n billingAddresses,\n );\n\n this.saveSessionIdToCookies(cart.id);\n\n await this.paymentIntegrationService.updatePaymentProviderCustomer({\n authenticationState,\n addresses,\n instruments,\n });\n\n if (billingAddresses.length > 0 && cart.lineItems.physicalItems.length > 0) {\n await this.paymentIntegrationService.updateBillingAddress(billingAddresses[0]);\n }\n\n // Prefill billing form if only digital items in cart with billing data and firstName and lastName\n // from shippingAddresses because there are empty in billing\n if (\n billingAddresses.length > 0 &&\n cart.lineItems.digitalItems.length > 0 &&\n cart.lineItems.physicalItems.length === 0\n ) {\n const { firstName, lastName } = addresses[0];\n const digitalItemBilling = {\n ...billingAddresses[0],\n firstName,\n lastName,\n };\n\n await this.paymentIntegrationService.updateBillingAddress(digitalItemBilling);\n }\n\n if (shippingAddresses.length > 0 && cart.lineItems.physicalItems.length > 0) {\n await this.paymentIntegrationService.updateShippingAddress(shippingAddresses[0]);\n\n if (shouldSetShippingOption && isFastlaneShippingOptionAutoSelectEnabled) {\n await this.setShippingOption();\n }\n }\n } catch (error) {\n // TODO: we should figure out what to do here\n // TODO: because we should not to stop the flow if the error occurs on paypal side\n }\n }\n\n /**\n *\n * Session id management\n *\n */\n getSessionIdFromCookies(): string {\n return CookieStorage.get('bc-fastlane-sessionId') || '';\n }\n\n saveSessionIdToCookies(sessionId: string): void {\n const expires = new Date();\n\n expires.setDate(expires.getDate() + 14); // 2 weeks expiry\n\n CookieStorage.set('bc-fastlane-sessionId', sessionId, {\n expires,\n secure: true,\n });\n }\n\n removeSessionIdFromCookies(): void {\n CookieStorage.remove('bc-fastlane-sessionId');\n }\n\n /**\n *\n * PayPal to BC data mappers\n *\n * */\n mapPayPalToBcInstrument(\n methodId: string,\n instruments?: BraintreeFastlaneVaultedInstrument[],\n ): CardInstrument[] | undefined {\n if (!instruments) {\n return;\n }\n\n return instruments.map((instrument) => {\n const { id, paymentSource } = instrument;\n const { brand, expiry, lastDigits, binDetails } = paymentSource.card;\n\n const [expiryYear, expiryMonth] = expiry.split('-');\n\n return {\n bigpayToken: id,\n brand,\n defaultInstrument: false,\n expiryMonth,\n expiryYear,\n iin: binDetails?.bin || '',\n last4: lastDigits,\n method: methodId,\n provider: methodId,\n trustedShippingAddress: false,\n type: 'card',\n untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n };\n });\n }\n\n private mapPayPalToBcAddress(\n addresses?: BraintreeFastlaneAddress[],\n phones?: string[],\n ): CustomerAddress[] {\n if (!addresses) {\n return [];\n }\n\n const countries = this.paymentIntegrationService.getState().getCountries() || [];\n\n const getCountryNameByCountryCode = (countryCode: string) => {\n const matchedCountry = countries.find((country) => country.code === countryCode);\n\n return matchedCountry?.name || '';\n };\n\n return addresses.map((address) => ({\n id: Date.now(),\n type: 'paypal-address',\n firstName: address.firstName || '',\n lastName: address.lastName || '',\n company: address.company || '',\n address1: address.streetAddress,\n address2: address.extendedAddress || '',\n city: address.locality,\n stateOrProvince: address.region,\n stateOrProvinceCode: address.region,\n country: getCountryNameByCountryCode(address.countryCodeAlpha2),\n countryCode: address.countryCodeAlpha2,\n postalCode: address.postalCode,\n phone: (phones && phones[0]) || '',\n customFields: [],\n }));\n }\n\n /**\n *\n * Get PayPal billing addresses from stored braintree instruments info\n *\n * */\n private getPayPalBillingAddresses(\n profileData?: BraintreeFastlaneProfileData,\n ): BraintreeFastlaneAddress | undefined {\n const { card, name } = profileData || {};\n\n if (!card) {\n return;\n }\n\n const { firstName, lastName } = card.paymentSource.card.billingAddress;\n const { firstName: given_name, lastName: surname } = name || {};\n const { shippingAddress } = profileData || {};\n const address = {\n ...card.paymentSource.card.billingAddress,\n firstName: firstName || given_name,\n lastName: lastName || surname,\n };\n\n const isAddressExist =\n shippingAddress &&\n isEqual(this.normalizeAddress(address), this.normalizeAddress(shippingAddress));\n\n return isAddressExist ? shippingAddress : address;\n }\n\n private normalizeAddress(address: CustomerAddress | BraintreeFastlaneAddress) {\n return omit(address, ['id']);\n }\n\n private mergeShippingAndBillingAddresses(\n shippingAddresses: CustomerAddress[],\n billingAddresses: CustomerAddress[],\n ): CustomerAddress[] {\n const filteredBillingAddresses = billingAddresses.filter(\n (billingAddress: CustomerAddress) =>\n !shippingAddresses.some((shippingAddress: CustomerAddress) => {\n return isEqual(\n this.normalizeAddress(shippingAddress),\n this.normalizeAddress(billingAddress),\n );\n }),\n );\n\n return [...shippingAddresses, ...filteredBillingAddresses];\n }\n\n /**\n *\n * Other\n *\n * */\n private getMethodIdOrThrow(): string {\n if (!this.methodId) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"methodId\" argument is not provided.',\n );\n }\n\n return this.methodId;\n }\n\n private async setShippingOption(): Promise<void> {\n const state = this.paymentIntegrationService.getState();\n const consignments = state.getConsignments() || [];\n const availableShippingOptions = consignments[0]?.availableShippingOptions || [];\n const recommendedShippingOption = availableShippingOptions.find(\n (option) => option.isRecommended,\n );\n\n if (recommendedShippingOption || availableShippingOptions.length) {\n const selectedOption = recommendedShippingOption || availableShippingOptions[0];\n\n await this.paymentIntegrationService.selectShippingOption(selectedOption.id);\n }\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeScriptLoader,\n BraintreeSdk,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeFastlanePaymentStrategy from './braintree-fastlane-payment-strategy';\nimport BraintreeFastlaneUtils from './braintree-fastlane-utils';\n\nconst createBraintreeFastlanePaymentStrategy: PaymentStrategyFactory<\n BraintreeFastlanePaymentStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n ),\n braintreeHostWindow,\n );\n\n const braintreeFastlaneUtils = new BraintreeFastlaneUtils(\n paymentIntegrationService,\n braintreeIntegrationService,\n );\n\n const braintreeScriptLoader = new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n );\n\n const braintreeSdk = new BraintreeSdk(braintreeScriptLoader);\n\n return new BraintreeFastlanePaymentStrategy(\n paymentIntegrationService,\n braintreeFastlaneUtils,\n braintreeSdk,\n );\n};\n\nexport default toResolvableModule(createBraintreeFastlanePaymentStrategy, [\n { id: 'braintreeacceleratedcheckout' },\n]);\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { noop } from 'lodash';\n\nimport {\n BraintreeDataCollector,\n BraintreeInitializationData,\n BraintreeSdk,\n BraintreeVisaCheckout,\n VisaCheckoutAddress,\n VisaCheckoutPaymentSuccessPayload,\n VisaCheckoutTokenizedPayload,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n Address,\n InvalidArgumentError,\n LegacyAddress,\n MissingDataError,\n MissingDataErrorType,\n OrderFinalizationNotRequiredError,\n OrderRequestBody,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethod,\n PaymentMethodFailedError,\n PaymentRequestOptions,\n PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithBraintreeVisaCheckoutPaymentInitializeOptions } from './braintree-visa-checkout-payment-options';\n\nexport default class BraintreeVisaCheckoutPaymentStrategy implements PaymentStrategy {\n private paymentMethod?: PaymentMethod<BraintreeInitializationData>;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private formPoster: FormPoster,\n private braintreeSdk: BraintreeSdk,\n ) {}\n\n async initialize(\n options: PaymentInitializeOptions & WithBraintreeVisaCheckoutPaymentInitializeOptions,\n ): Promise<void> {\n const { braintreevisacheckout: visaCheckoutOptions, methodId } = options;\n\n if (!visaCheckoutOptions) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.braintreevisacheckout\" argument is not provided.',\n );\n }\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n\n this.paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n const checkout = state.getCheckoutOrThrow();\n const storeConfig = state.getStoreConfigOrThrow();\n\n const { clientToken, config } = this.paymentMethod || {};\n\n if (!clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const { onError = noop, onPaymentSelect = noop } = visaCheckoutOptions;\n\n this.braintreeSdk.initialize(clientToken);\n\n const braintreeVisaCheckout = await this.braintreeSdk.getBraintreeVisaCheckout();\n\n const visaCheckoutSdk = await this.braintreeSdk.getVisaCheckoutSdk(config?.testMode);\n\n const initOptions = braintreeVisaCheckout.createInitOptions({\n settings: {\n locale: storeConfig.storeProfile.storeLanguage,\n shipping: {\n collectShipping: false,\n },\n },\n paymentRequest: {\n currencyCode: storeConfig.currency.code,\n subtotal: String(checkout.subtotal),\n },\n });\n\n await visaCheckoutSdk.init(initOptions);\n\n visaCheckoutSdk.on(\n 'payment.success',\n (paymentSuccessPayload: VisaCheckoutPaymentSuccessPayload) =>\n this.tokenizePayment(braintreeVisaCheckout, paymentSuccessPayload)\n .then(() =>\n Promise.all([\n this.paymentIntegrationService.loadCheckout(),\n this.paymentIntegrationService.loadPaymentMethod(methodId),\n ]),\n )\n .then(() => onPaymentSelect())\n .catch((error) => onError(error)),\n );\n visaCheckoutSdk.on('payment.error', (_, error) => onError(error));\n }\n\n async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n const { payment, ...order } = payload;\n\n if (!payment) {\n throw new InvalidArgumentError(\n 'Unable to submit payment because \"payload.payment\" argument is not provided.',\n );\n }\n\n if (!this.paymentMethod?.initializationData?.nonce) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const { nonce } = this.paymentMethod.initializationData;\n\n try {\n await this.paymentIntegrationService.submitOrder(order, options);\n await this.paymentIntegrationService.submitPayment({\n ...payment,\n paymentData: { nonce },\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n finalize(): Promise<any> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreeSdk.deinitialize();\n }\n\n private async tokenizePayment(\n braintreeVisaCheckout: BraintreeVisaCheckout,\n payment: VisaCheckoutPaymentSuccessPayload,\n ) {\n return Promise.all([\n braintreeVisaCheckout.tokenize(payment),\n this.braintreeSdk.getDataCollectorOrThrow(),\n ]).then(([payload, deviceData]) => {\n const state = this.paymentIntegrationService.getState();\n\n const shipping = state.getShippingAddress();\n const billing = state.getBillingAddress();\n\n const {\n shippingAddress = this.mapToVisaCheckoutAddress(shipping),\n billingAddress = this.mapToVisaCheckoutAddress(billing),\n } = payload;\n\n return this.postForm(\n {\n ...payload,\n shippingAddress,\n billingAddress,\n },\n deviceData,\n );\n });\n }\n\n private mapToVisaCheckoutAddress(address?: Address): VisaCheckoutAddress {\n if (!address) {\n return {};\n }\n\n return {\n firstName: address.firstName,\n lastName: address.lastName,\n phoneNumber: address.phone,\n streetAddress: address.address1,\n extendedAddress: address.address2,\n locality: address.city,\n region: address.stateOrProvinceCode,\n countryCode: address.countryCode,\n postalCode: address.postalCode,\n };\n }\n\n private postForm(\n paymentData: VisaCheckoutTokenizedPayload,\n dataCollector: BraintreeDataCollector,\n ) {\n const { userData, billingAddress, shippingAddress, details: cardInformation } = paymentData;\n const { userEmail } = userData;\n const { deviceData } = dataCollector;\n\n return this.formPoster.postForm('/checkout.php', {\n payment_type: paymentData.type,\n nonce: paymentData.nonce,\n provider: 'braintreevisacheckout',\n action: 'set_external_checkout',\n device_data: deviceData,\n card_information: JSON.stringify({\n type: cardInformation.cardType,\n number: cardInformation.lastTwo,\n }),\n billing_address: JSON.stringify(this.getAddress(userEmail, billingAddress)),\n shipping_address: JSON.stringify(this.getAddress(userEmail, shippingAddress)),\n });\n }\n\n private getAddress(email: string, address: VisaCheckoutAddress = {}): Partial<LegacyAddress> {\n return {\n email,\n first_name: address.firstName,\n last_name: address.lastName,\n phone_number: address.phoneNumber,\n address_line_1: address.streetAddress,\n address_line_2: address.extendedAddress,\n city: address.locality,\n state: address.region,\n country_code: address.countryCode,\n postal_code: address.postalCode,\n };\n }\n\n private handleError(error: unknown): never {\n if (error instanceof Error && error.name === 'BraintreeError') {\n throw new PaymentMethodFailedError(error.message);\n }\n\n throw error;\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeScriptLoader,\n BraintreeSdk,\n BraintreeSDKVersionManager,\n VisaCheckoutHostWindow,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeVisaCheckoutPaymentStrategy from './braintree-visa-checkout-payment-strategy';\n\nconst createBraintreeVisaCheckoutPaymentStrategy: PaymentStrategyFactory<\n BraintreeVisaCheckoutPaymentStrategy\n> = (paymentIntegrationService) => {\n const hostWindow: VisaCheckoutHostWindow & BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeSdk = new BraintreeSdk(\n new BraintreeScriptLoader(getScriptLoader(), hostWindow, braintreeSDKVersionManager),\n );\n\n return new BraintreeVisaCheckoutPaymentStrategy(\n paymentIntegrationService,\n createFormPoster(),\n braintreeSdk,\n );\n};\n\nexport default toResolvableModule(createBraintreeVisaCheckoutPaymentStrategy, [\n { id: 'braintreevisacheckout' },\n]);\n","import {\n BraintreeError,\n BraintreeIntegrationService,\n BraintreeTokenizePayload,\n BraintreeVenmoCheckout,\n isBraintreeError,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n FormattedPayload,\n MissingDataError,\n MissingDataErrorType,\n OrderFinalizationNotRequiredError,\n OrderPaymentRequestBody,\n OrderRequestBody,\n Payment,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethod,\n PaymentMethodCancelledError,\n PaymentMethodFailedError,\n PaymentStrategy,\n PaypalInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport BraintreeVenmoPaymentStrategyInitializeOptions, {\n WithBraintreeVenmoInitializeOptions,\n} from './braintree-venmo-payment-strategy-initialize-options';\n\nexport default class BraintreeVenmoPaymentStrategy implements PaymentStrategy {\n private braintreeVenmoCheckout?: BraintreeVenmoCheckout;\n private venmoOptions?: BraintreeVenmoPaymentStrategyInitializeOptions;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private braintreeIntegrationService: BraintreeIntegrationService,\n ) {}\n\n async initialize(\n options: PaymentInitializeOptions & WithBraintreeVenmoInitializeOptions,\n ): Promise<void> {\n const { methodId } = options;\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n\n this.venmoOptions = options.braintreevenmo;\n\n const paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n await this.initializeBraintreeVenmo(paymentMethod);\n }\n\n async execute(orderRequest: OrderRequestBody): Promise<void> {\n const { payment, ...order } = orderRequest;\n\n if (!payment) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n try {\n const paymentData = await this.preparePaymentData(payment);\n\n await this.paymentIntegrationService.submitOrder(order);\n await this.paymentIntegrationService.submitPayment(paymentData);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreeIntegrationService.teardown();\n\n return Promise.resolve();\n }\n\n private handleError(error: unknown): never {\n if (!isBraintreeError(error)) {\n throw error;\n }\n\n if (error.code === 'PAYPAL_POPUP_CLOSED') {\n throw new PaymentMethodCancelledError(error.message);\n }\n\n throw new PaymentMethodFailedError(error.message);\n }\n\n private async initializeBraintreeVenmo(paymentMethod: PaymentMethod): Promise<void> {\n const { clientToken } = paymentMethod;\n\n if (!clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const state = this.paymentIntegrationService.getState();\n const features = state.getStoreConfigOrThrow().checkoutSettings.features;\n const isBraintreeVenmoWebFallbackSupport = isExperimentEnabled(\n features,\n 'PAYPAL-5406.braintree_venmo_web_fallback_support',\n );\n\n try {\n this.braintreeIntegrationService.initialize(clientToken);\n this.braintreeVenmoCheckout = await this.braintreeIntegrationService.getVenmoCheckout({\n ...(this.venmoOptions?.allowDesktop !== undefined\n ? { allowDesktop: this.venmoOptions.allowDesktop }\n : {}),\n ...(isBraintreeVenmoWebFallbackSupport\n ? {\n mobileWebFallBack: isBraintreeVenmoWebFallbackSupport,\n }\n : {}),\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private async preparePaymentData(payment: OrderPaymentRequestBody): Promise<Payment> {\n const state = this.paymentIntegrationService.getState();\n const { nonce } = state.getPaymentMethodOrThrow(payment.methodId);\n\n if (nonce) {\n return { ...payment, paymentData: this.formattedPayload(nonce) };\n }\n\n const tokenizeResult = await this.braintreeVenmoTokenize();\n const sessionId = await this.braintreeIntegrationService.getSessionId();\n\n return {\n ...payment,\n paymentData: this.formattedPayload(\n tokenizeResult.nonce,\n tokenizeResult.details.email,\n sessionId,\n ),\n };\n }\n\n private formattedPayload(\n token: string,\n email?: string,\n sessionId?: string,\n ): FormattedPayload<PaypalInstrument> {\n return {\n formattedPayload: {\n vault_payment_instrument: null,\n set_as_default_stored_instrument: null,\n device_info: sessionId || null,\n paypal_account: {\n token,\n email: email || null,\n },\n },\n };\n }\n\n private braintreeVenmoTokenize(): Promise<BraintreeTokenizePayload> {\n return new Promise((resolve, reject) => {\n this.braintreeVenmoCheckout?.tokenize(\n (error: BraintreeError | undefined, payload: BraintreeTokenizePayload) => {\n if (error) {\n return reject(error);\n }\n\n resolve(payload);\n },\n );\n });\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeVenmoPaymentStrategy from './braintree-venmo-payment-strategy';\n\nconst createBraintreeVenmoPaymentStrategy: CheckoutButtonStrategyFactory<\n BraintreeVenmoPaymentStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const scriptLoader = getScriptLoader();\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeScriptLoader = new BraintreeScriptLoader(\n scriptLoader,\n braintreeHostWindow,\n braintreeSDKVersionManager,\n );\n const braintreeIntegrationService = new BraintreeIntegrationService(\n braintreeScriptLoader,\n braintreeHostWindow,\n );\n\n return new BraintreeVenmoPaymentStrategy(\n paymentIntegrationService,\n braintreeIntegrationService,\n );\n};\n\nexport default toResolvableModule(createBraintreeVenmoPaymentStrategy, [{ id: 'braintreevenmo' }]);\n","import { BraintreeFormFieldsMap, BraintreeStoredCardFieldsMap } from '../index';\n\nexport function isBraintreeFormFieldsMap(\n fields: BraintreeFormFieldsMap | BraintreeStoredCardFieldsMap,\n): fields is BraintreeFormFieldsMap {\n return 'cardNumber' in fields;\n}\n\nexport function isBraintreeStoredCardFieldsMap(\n fields: BraintreeFormFieldsMap | BraintreeStoredCardFieldsMap,\n): fields is BraintreeStoredCardFieldsMap {\n return !!(\n Object.keys(fields).length > 0 &&\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n ((fields as BraintreeStoredCardFieldsMap).cardCodeVerification ||\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n (fields as BraintreeStoredCardFieldsMap).cardNumberVerification)\n );\n}\n","import { BraintreeHostedFormError } from '../types';\n\nimport isBraintreeError from './is-braintree-error';\n\nfunction isValidInvalidFieldKeys(invalidFieldKeys: unknown): invalidFieldKeys is string[] {\n return (\n Array.isArray(invalidFieldKeys) && invalidFieldKeys.every((key) => typeof key === 'string')\n );\n}\n\nexport default function isBraintreeHostedFormError(\n error: unknown,\n): error is BraintreeHostedFormError {\n if (!isBraintreeError(error)) {\n return false;\n }\n\n const { details } = error;\n\n return (\n details === undefined ||\n (typeof details === 'object' &&\n details !== null &&\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n (details as { invalidFieldKeys?: unknown }).invalidFieldKeys === undefined) ||\n isValidInvalidFieldKeys(details)\n );\n}\n","import { Dictionary, isEmpty, isNil, omitBy } from 'lodash';\n\nimport {\n BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n BraintreeBillingAddressRequestData,\n BraintreeClient,\n BraintreeFormErrorDataKeys,\n BraintreeFormErrorsData,\n BraintreeFormFieldsMap,\n BraintreeFormFieldStyles,\n BraintreeFormFieldStylesMap,\n BraintreeFormFieldType,\n BraintreeFormFieldValidateErrorData,\n BraintreeFormFieldValidateEventData,\n BraintreeFormOptions,\n BraintreeHostedFields,\n BraintreeHostedFieldsCreatorConfig,\n BraintreeHostedFieldsState,\n BraintreeHostedFormError,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n BraintreeStoredCardFieldsMap,\n isBraintreeFormFieldsMap,\n isBraintreeHostedFormError,\n isBraintreeSupportedCardBrand,\n TokenizationPayload,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n Address,\n NotInitializedError,\n NotInitializedErrorType,\n PaymentInvalidFormError,\n PaymentInvalidFormErrorDetails,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nenum BraintreeHostedFormType {\n CreditCard,\n StoredCardVerification,\n}\n\nexport default class BraintreeHostedForm {\n private cardFields?: BraintreeHostedFields;\n private formOptions?: BraintreeFormOptions;\n private type?: BraintreeHostedFormType;\n private client?: Promise<BraintreeClient>;\n private clientToken?: string;\n private isInitializedHostedForm = false;\n\n constructor(\n private braintreeScriptLoader: BraintreeScriptLoader,\n private braintreeSDKVersionManager: BraintreeSDKVersionManager,\n ) {}\n\n async initialize(\n options: BraintreeFormOptions,\n unsupportedCardBrands?: string[],\n clientToken?: string,\n ): Promise<void> {\n this.clientToken = clientToken;\n this.formOptions = options;\n this.type = isBraintreeFormFieldsMap(options.fields)\n ? BraintreeHostedFormType.CreditCard\n : BraintreeHostedFormType.StoredCardVerification;\n\n const fields = this.mapFieldOptions(options.fields, unsupportedCardBrands);\n\n if (isEmpty(fields)) {\n this.isInitializedHostedForm = false;\n\n return;\n }\n\n this.cardFields = await this.createHostedFields({\n fields,\n styles: options.styles && this.mapStyleOptions(options.styles),\n });\n\n this.cardFields?.on('blur', this.handleBlur);\n this.cardFields?.on('focus', this.handleFocus);\n this.cardFields?.on('cardTypeChange', this.handleCardTypeChange);\n this.cardFields?.on('validityChange', this.handleValidityChange);\n this.cardFields?.on('inputSubmitRequest', this.handleInputSubmitRequest);\n\n this.isInitializedHostedForm = true;\n }\n\n isInitialized(): boolean {\n return !!this.isInitializedHostedForm;\n }\n\n async deinitialize(): Promise<void> {\n if (this.isInitializedHostedForm) {\n this.isInitializedHostedForm = false;\n await this.cardFields?.teardown();\n }\n }\n\n validate(): void {\n if (!this.cardFields) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n const state = this.cardFields.getState();\n\n if (!this.isValidForm(state)) {\n this.handleValidityChange(state);\n\n const errors = this.mapValidationErrors(state.fields);\n\n throw new PaymentInvalidFormError(errors as PaymentInvalidFormErrorDetails);\n }\n }\n\n async tokenize(billingAddress: Address): Promise<TokenizationPayload> {\n if (!this.cardFields) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n try {\n const payload = await this.cardFields.tokenize(\n omitBy(\n {\n billingAddress: billingAddress && this.mapBillingAddress(billingAddress),\n },\n isNil,\n ),\n );\n\n this.formOptions?.onValidate?.({ isValid: true, errors: {} });\n\n return {\n nonce: payload.nonce,\n bin: payload.details?.bin,\n };\n } catch (error) {\n if (isBraintreeHostedFormError(error)) {\n const errors = this.mapTokenizeError(error);\n\n if (errors) {\n this.formOptions?.onValidate?.({ isValid: false, errors });\n throw new PaymentInvalidFormError(errors as PaymentInvalidFormErrorDetails);\n }\n }\n\n throw error;\n }\n }\n\n async tokenizeForStoredCardVerification(): Promise<TokenizationPayload> {\n if (!this.cardFields) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n try {\n const payload = await this.cardFields.tokenize();\n\n this.formOptions?.onValidate?.({ isValid: true, errors: {} });\n\n return {\n nonce: payload.nonce,\n bin: payload.details?.bin,\n };\n } catch (error) {\n if (isBraintreeHostedFormError(error)) {\n const errors = this.mapTokenizeError(error, true);\n\n if (errors) {\n this.formOptions?.onValidate?.({ isValid: false, errors });\n throw new PaymentInvalidFormError(errors as PaymentInvalidFormErrorDetails);\n }\n }\n\n throw error;\n }\n }\n\n async createHostedFields(\n options: Pick<BraintreeHostedFieldsCreatorConfig, 'fields' | 'styles'>,\n ): Promise<BraintreeHostedFields> {\n const client = await this.getClient();\n const hostedFields = await this.braintreeScriptLoader.loadHostedFields();\n\n const currentSdkVersion = this.braintreeSDKVersionManager.getSDKVersion();\n const hostedFieldsOptions =\n currentSdkVersion === BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION\n ? { ...options, preventCursorJumps: true }\n : options;\n\n return hostedFields.create({ ...hostedFieldsOptions, client });\n }\n\n async getClient(): Promise<BraintreeClient> {\n if (!this.clientToken) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n if (!this.client) {\n const client = await this.braintreeScriptLoader.loadClient();\n\n this.client = client.create({ authorization: this.clientToken });\n }\n\n return this.client;\n }\n\n private mapBillingAddress(billingAddress: Address): BraintreeBillingAddressRequestData {\n return {\n countryName: billingAddress.country,\n postalCode: billingAddress.postalCode,\n streetAddress: billingAddress.address2\n ? `${billingAddress.address1} ${billingAddress.address2}`\n : billingAddress.address1,\n };\n }\n\n private mapFieldOptions(\n fields: BraintreeFormFieldsMap | BraintreeStoredCardFieldsMap,\n unsupportedCardBrands?: string[],\n ): BraintreeHostedFieldsCreatorConfig['fields'] {\n if (isBraintreeFormFieldsMap(fields)) {\n const supportedCardBrands: Partial<Record<string, boolean>> = {};\n\n unsupportedCardBrands?.forEach((cardBrand) => {\n if (isBraintreeSupportedCardBrand(cardBrand)) {\n supportedCardBrands[cardBrand] = false;\n }\n });\n\n return omitBy(\n {\n number: {\n container: `#${fields.cardNumber.containerId}`,\n placeholder: fields.cardNumber.placeholder,\n internalLabel: fields.cardNumber.accessibilityLabel,\n ...(Object.keys(supportedCardBrands).length > 0\n ? { supportedCardBrands }\n : {}),\n },\n expirationDate: {\n container: `#${fields.cardExpiry.containerId}`,\n placeholder: fields.cardExpiry.placeholder,\n internalLabel: fields.cardExpiry.accessibilityLabel,\n },\n cvv: fields.cardCode && {\n container: `#${fields.cardCode.containerId}`,\n placeholder: fields.cardCode.placeholder,\n internalLabel: fields.cardCode.accessibilityLabel,\n },\n cardholderName: {\n container: `#${fields.cardName.containerId}`,\n placeholder: fields.cardName.placeholder,\n internalLabel: fields.cardName.accessibilityLabel,\n },\n },\n isNil,\n );\n }\n\n return omitBy(\n {\n number: fields.cardNumberVerification && {\n container: `#${fields.cardNumberVerification.containerId}`,\n placeholder: fields.cardNumberVerification.placeholder,\n },\n cvv: fields.cardCodeVerification && {\n container: `#${fields.cardCodeVerification.containerId}`,\n placeholder: fields.cardCodeVerification.placeholder,\n },\n },\n isNil,\n );\n }\n\n private mapStyleOptions(\n options: BraintreeFormFieldStylesMap,\n ): BraintreeHostedFieldsCreatorConfig['styles'] {\n const mapStyles = (styles: BraintreeFormFieldStyles = {}) =>\n omitBy(\n {\n color: styles.color,\n 'font-family': styles.fontFamily,\n 'font-size': styles.fontSize,\n 'font-weight': styles.fontWeight,\n },\n isNil,\n ) as Dictionary<string>;\n\n return {\n input: mapStyles(options.default),\n '.invalid': mapStyles(options.error),\n ':focus': mapStyles(options.focus),\n };\n }\n\n private mapFieldType(type: string): BraintreeFormFieldType {\n switch (type) {\n case 'number':\n return this.type === BraintreeHostedFormType.StoredCardVerification\n ? BraintreeFormFieldType.CardNumberVerification\n : BraintreeFormFieldType.CardNumber;\n\n case 'expirationDate':\n return BraintreeFormFieldType.CardExpiry;\n\n case 'cvv':\n return this.type === BraintreeHostedFormType.StoredCardVerification\n ? BraintreeFormFieldType.CardCodeVerification\n : BraintreeFormFieldType.CardCode;\n\n case 'cardholderName':\n return BraintreeFormFieldType.CardName;\n\n default:\n throw new Error('Unexpected field type');\n }\n }\n\n private mapErrors(fields: BraintreeHostedFieldsState['fields']): BraintreeFormErrorsData {\n const errors: BraintreeFormErrorsData = {};\n\n if (fields) {\n // eslint-disable-next-line no-restricted-syntax\n for (const [key, value] of Object.entries(fields)) {\n if (value && this.isValidParam(key)) {\n const { isValid, isEmpty, isPotentiallyValid } = value;\n\n errors[key] = {\n isValid,\n isEmpty,\n isPotentiallyValid,\n };\n }\n }\n }\n\n return errors;\n }\n\n private mapValidationErrors(\n fields: BraintreeHostedFieldsState['fields'],\n ): BraintreeFormFieldValidateEventData['errors'] {\n return (Object.keys(fields) as Array<keyof BraintreeHostedFieldsState['fields']>).reduce(\n (result, fieldKey) => ({\n ...result,\n [this.mapFieldType(fieldKey)]: fields[fieldKey]?.isValid\n ? undefined\n : [this.createInvalidError(this.mapFieldType(fieldKey))],\n }),\n {},\n );\n }\n\n private mapTokenizeError(\n error: BraintreeHostedFormError,\n isStoredCard = false,\n ): BraintreeFormFieldValidateEventData['errors'] | undefined {\n if (error.code === 'HOSTED_FIELDS_FIELDS_EMPTY') {\n const cvv = [this.createRequiredError(this.mapFieldType('cvv'))];\n\n if (isStoredCard) {\n return { [this.mapFieldType('cvv')]: cvv };\n }\n\n return {\n [this.mapFieldType('cvv')]: cvv,\n [this.mapFieldType('expirationDate')]: [\n this.createRequiredError(this.mapFieldType('expirationDate')),\n ],\n [this.mapFieldType('number')]: [\n this.createRequiredError(this.mapFieldType('number')),\n ],\n [this.mapFieldType('cardholderName')]: [\n this.createRequiredError(this.mapFieldType('cardholderName')),\n ],\n };\n }\n\n return error.details?.invalidFieldKeys?.reduce((result, key) => {\n const type = this.mapFieldType(key);\n\n return {\n ...result,\n [type]: [this.createInvalidError(type)],\n };\n }, {});\n }\n\n private createRequiredError(\n fieldType: BraintreeFormFieldType,\n ): BraintreeFormFieldValidateErrorData {\n const messages = {\n [BraintreeFormFieldType.CardCode]: 'CVV is required',\n [BraintreeFormFieldType.CardCodeVerification]: 'CVV is required',\n [BraintreeFormFieldType.CardNumber]: 'Credit card number is required',\n [BraintreeFormFieldType.CardNumberVerification]: 'Credit card number is required',\n [BraintreeFormFieldType.CardExpiry]: 'Expiration date is required',\n [BraintreeFormFieldType.CardName]: 'Full name is required',\n };\n\n return {\n fieldType,\n message: messages[fieldType] ?? 'Field is required',\n type: 'required',\n };\n }\n\n private createInvalidError(\n fieldType: BraintreeFormFieldType,\n ): BraintreeFormFieldValidateErrorData {\n const formFields = {\n [BraintreeFormFieldType.CardCode]: {\n message: 'Invalid card code',\n type: 'invalid_card_code',\n },\n [BraintreeFormFieldType.CardCodeVerification]: {\n message: 'Invalid card code',\n type: 'invalid_card_code',\n },\n [BraintreeFormFieldType.CardNumber]: {\n message: 'Invalid card number',\n type: 'invalid_card_number',\n },\n [BraintreeFormFieldType.CardNumberVerification]: {\n message: 'Invalid card number',\n type: 'invalid_card_number',\n },\n [BraintreeFormFieldType.CardExpiry]: {\n message: 'Invalid card expiry',\n type: 'invalid_card_expiry',\n },\n [BraintreeFormFieldType.CardName]: {\n message: 'Invalid card name',\n type: 'invalid_card_name',\n },\n };\n\n return {\n fieldType,\n message: formFields[fieldType]?.message ?? 'Invalid field',\n type: formFields[fieldType]?.type ?? 'invalid',\n };\n }\n\n private handleBlur = (event: BraintreeHostedFieldsState): void => {\n this.formOptions?.onBlur?.({\n fieldType: this.mapFieldType(event.emittedBy),\n errors: this.mapErrors(event.fields),\n });\n };\n\n private handleFocus = (event: BraintreeHostedFieldsState): void => {\n this.formOptions?.onFocus?.({\n fieldType: this.mapFieldType(event.emittedBy),\n });\n };\n\n private handleCardTypeChange = (event: BraintreeHostedFieldsState): void => {\n const cardType =\n event.cards.length === 1\n ? event.cards[0].type.replace(/^master-card$/, 'mastercard')\n : undefined;\n\n this.formOptions?.onCardTypeChange?.({ cardType });\n };\n\n private handleInputSubmitRequest = (event: BraintreeHostedFieldsState): void => {\n this.formOptions?.onEnter?.({\n fieldType: this.mapFieldType(event.emittedBy),\n });\n };\n\n private handleValidityChange = (event: BraintreeHostedFieldsState): void => {\n this.formOptions?.onValidate?.({\n isValid: this.isValidForm(event),\n errors: this.mapValidationErrors(event.fields),\n });\n };\n\n private isValidForm(event: BraintreeHostedFieldsState): boolean {\n return (\n Object.keys(event.fields) as Array<keyof BraintreeHostedFieldsState['fields']>\n ).every((key) => event.fields[key]?.isValid);\n }\n\n private isValidParam(key: string): key is BraintreeFormErrorDataKeys {\n return [\n 'number',\n 'cvv',\n 'expirationDate',\n 'postalCode',\n 'cardholderName',\n 'cardType',\n ].includes(key);\n }\n}\n","import { BraintreeSupportedCardBrands } from '../types';\n\nexport const isBraintreeSupportedCardBrand = (\n cardBrand: string,\n): cardBrand is BraintreeSupportedCardBrands => {\n const supportedCardBrands = Object.values(BraintreeSupportedCardBrands);\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return supportedCardBrands.includes(cardBrand as BraintreeSupportedCardBrands);\n};\n\nexport default isBraintreeSupportedCardBrand;\n","import { some } from 'lodash';\n\nimport {\n BraintreeIntegrationService,\n BraintreeThreeDSecureOptions,\n isBraintreeAcceleratedCheckoutCustomer,\n isBraintreePaymentRequest3DSError,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n Address,\n isHostedInstrumentLike,\n isRequestError,\n isVaultedInstrument,\n MissingDataError,\n MissingDataErrorType,\n NonceInstrument,\n OrderFinalizationNotRequiredError,\n OrderPaymentRequestBody,\n OrderRequestBody,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentInstrument,\n PaymentInstrumentMeta,\n PaymentIntegrationService,\n PaymentMethod,\n PaymentMethodFailedError,\n PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeHostedForm from '../braintree-hosted-form/braintree-hosted-form';\nimport isBraintreeError from '../is-braintree-error';\n\nimport {\n BraintreeCreditCardPaymentInitializeOptions,\n WithBraintreeCreditCardPaymentInitializeOptions,\n} from './braintree-credit-card-payment-initialize-options';\n\nexport default class BraintreeCreditCardPaymentStrategy implements PaymentStrategy {\n private is3dsEnabled?: boolean;\n private isHostedFormInitialized?: boolean;\n private deviceSessionId?: string;\n private paymentMethod?: PaymentMethod;\n private threeDSecure?: BraintreeThreeDSecureOptions;\n private onPaymentError?: BraintreeCreditCardPaymentInitializeOptions['onPaymentError'];\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private braintreeIntegrationService: BraintreeIntegrationService,\n private braintreeHostedForm: BraintreeHostedForm,\n ) {}\n\n async initialize(\n options: PaymentInitializeOptions & WithBraintreeCreditCardPaymentInitializeOptions,\n ): Promise<void> {\n const { methodId, gatewayId, braintree } = options;\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n\n this.paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n const { clientToken } = this.paymentMethod;\n\n if (!clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n this.threeDSecure = braintree?.threeDSecure;\n this.onPaymentError = braintree?.onPaymentError;\n\n try {\n this.braintreeIntegrationService.initialize(clientToken, this.threeDSecure);\n\n if (this.isHostedPaymentFormEnabled(methodId, gatewayId) && braintree?.form) {\n await this.braintreeHostedForm.initialize(\n braintree.form,\n braintree.unsupportedCardBrands,\n clientToken,\n );\n\n this.isHostedFormInitialized = this.braintreeHostedForm.isInitialized();\n }\n\n this.is3dsEnabled = this.paymentMethod.config.is3dsEnabled;\n this.deviceSessionId = await this.braintreeIntegrationService.getSessionId();\n\n // TODO: Remove when BT AXO A/B testing is finished\n if (this.shouldInitializeBraintreeFastlane()) {\n await this.initializeBraintreeFastlaneOrThrow(methodId);\n }\n } catch (error) {\n return this.handleError(error, methodId);\n }\n }\n\n async execute(orderRequest: OrderRequestBody): Promise<void> {\n const { payment, ...order } = orderRequest;\n\n if (!payment) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n if (this.isHostedFormInitialized) {\n this.braintreeHostedForm.validate();\n }\n\n await this.paymentIntegrationService.submitOrder(order);\n\n const state = this.paymentIntegrationService.getState();\n const billingAddress = state.getBillingAddressOrThrow();\n const orderAmount = state.getOrderOrThrow().orderAmount;\n\n try {\n const paymentData = this.isHostedFormInitialized\n ? await this.prepareHostedPaymentData(payment, billingAddress, orderAmount)\n : await this.preparePaymentData(payment, billingAddress, orderAmount);\n\n await this.paymentIntegrationService.submitPayment({\n ...payment,\n paymentData,\n });\n } catch (error) {\n return this.processAdditionalAction(error, payment, orderAmount);\n }\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n async deinitialize(): Promise<void> {\n this.isHostedFormInitialized = false;\n\n await Promise.all([\n this.braintreeIntegrationService.teardown(),\n this.braintreeHostedForm.deinitialize(),\n ]);\n\n return Promise.resolve();\n }\n\n private handleError(error: unknown, methodId?: string): void | Promise<void> {\n if (isBraintreeError(error)) {\n const isPaymentMethodInitialized = !!(\n methodId &&\n this.paymentIntegrationService.getState().isPaymentMethodInitialized({ methodId })\n );\n\n if (\n !isPaymentMethodInitialized &&\n error.code === 'HOSTED_FIELDS_INVALID_FIELD_SELECTOR'\n ) {\n return;\n }\n\n if (error.code.startsWith('THREEDS_')) {\n this.onPaymentError?.(new PaymentMethodFailedError('THREEDS_VERIFICATION_FAILED'));\n\n return Promise.reject();\n }\n\n throw new PaymentMethodFailedError(error.message);\n }\n\n throw error;\n }\n\n private async preparePaymentData(\n payment: OrderPaymentRequestBody,\n billingAddress: Address,\n orderAmount: number,\n ): Promise<PaymentInstrument & PaymentInstrumentMeta> {\n const { paymentData } = payment;\n const commonPaymentData = { deviceSessionId: this.deviceSessionId };\n\n if (this.isSubmittingWithStoredCard(payment)) {\n return {\n ...commonPaymentData,\n ...paymentData,\n };\n }\n\n const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n const { nonce } = this.shouldPerform3DSVerification(payment)\n ? await this.braintreeIntegrationService.verifyCard(\n payment,\n billingAddress,\n orderAmount,\n )\n : await this.braintreeIntegrationService.tokenizeCard(payment, billingAddress);\n\n return {\n ...commonPaymentData,\n nonce,\n shouldSaveInstrument,\n shouldSetAsDefaultInstrument,\n };\n }\n\n private async prepareHostedPaymentData(\n payment: OrderPaymentRequestBody,\n billingAddress: Address,\n orderAmount: number,\n ): Promise<PaymentInstrument & PaymentInstrumentMeta> {\n const { paymentData } = payment;\n const commonPaymentData = { deviceSessionId: this.deviceSessionId };\n\n if (this.isSubmittingWithStoredCard(payment)) {\n const { nonce } = await this.braintreeHostedForm.tokenizeForStoredCardVerification();\n\n return {\n ...commonPaymentData,\n ...paymentData,\n nonce,\n };\n }\n\n const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n const { nonce } = this.shouldPerform3DSVerification(payment)\n ? await this.verifyCardWithHostedForm(billingAddress, orderAmount)\n : await this.braintreeHostedForm.tokenize(billingAddress);\n\n return {\n ...commonPaymentData,\n shouldSaveInstrument,\n shouldSetAsDefaultInstrument,\n nonce,\n };\n }\n\n private prepareAdditionalActionPaymentData(\n payment: OrderPaymentRequestBody,\n nonce: string,\n ): PaymentInstrument & PaymentInstrumentMeta {\n const { paymentData } = payment;\n const commonPaymentData = { deviceSessionId: this.deviceSessionId, nonce };\n\n const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n if (\n this.isSubmittingWithStoredCard(payment) &&\n (shouldSaveInstrument || shouldSetAsDefaultInstrument)\n ) {\n return {\n ...paymentData,\n ...commonPaymentData,\n };\n }\n\n return {\n ...commonPaymentData,\n };\n }\n\n private async verifyCardWithHostedForm(\n billingAddress: Address,\n orderAmount: number,\n ): Promise<NonceInstrument> {\n const tokenizationPayload = await this.braintreeHostedForm.tokenize(billingAddress);\n\n return this.braintreeIntegrationService.challenge3DSVerification(\n tokenizationPayload,\n orderAmount,\n );\n }\n\n private async processAdditionalAction(\n error: unknown,\n payment: OrderPaymentRequestBody,\n orderAmount: number,\n ): Promise<void> {\n if (\n !isRequestError(error) ||\n !some(error.body.errors, { code: 'three_d_secure_required' })\n ) {\n return this.handleError(error);\n }\n\n try {\n const { payer_auth_request: storedCreditCardNonce } =\n (isBraintreePaymentRequest3DSError(error) && error.body.three_ds_result) || {};\n const { paymentData } = payment;\n const state = this.paymentIntegrationService.getState();\n\n if (!paymentData || !isVaultedInstrument(paymentData)) {\n throw new PaymentArgumentInvalidError(['instrumentId']);\n }\n\n const instrument = state.getCardInstrumentOrThrow(paymentData.instrumentId);\n const { nonce } = await this.braintreeIntegrationService.challenge3DSVerification(\n {\n nonce: storedCreditCardNonce || '',\n bin: instrument.iin,\n },\n orderAmount,\n );\n\n const newPaymentData = this.prepareAdditionalActionPaymentData(payment, nonce);\n\n await this.paymentIntegrationService.submitPayment({\n ...payment,\n paymentData: newPaymentData,\n });\n } catch (error) {\n return this.handleError(error);\n }\n }\n\n private isHostedPaymentFormEnabled(methodId?: string, gatewayId?: string): boolean {\n if (!methodId) {\n return false;\n }\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow(methodId, gatewayId);\n\n return paymentMethod.config.isHostedFormEnabled === true;\n }\n\n private isSubmittingWithStoredCard(payment: OrderPaymentRequestBody): boolean {\n return !!(payment.paymentData && isVaultedInstrument(payment.paymentData));\n }\n\n private shouldPerform3DSVerification(payment: OrderPaymentRequestBody): boolean {\n return !!(this.is3dsEnabled && !this.isSubmittingWithStoredCard(payment));\n }\n\n // TODO: Remove when BT AXO A/B testing is finished\n private shouldInitializeBraintreeFastlane(): boolean {\n const state = this.paymentIntegrationService.getState();\n const paymentProviderCustomer = state.getPaymentProviderCustomerOrThrow();\n const braintreeCustomer = isBraintreeAcceleratedCheckoutCustomer(paymentProviderCustomer)\n ? paymentProviderCustomer\n : {};\n const isFastlaneEnabled: boolean =\n this.paymentMethod?.initializationData.isAcceleratedCheckoutEnabled;\n\n return isFastlaneEnabled && !braintreeCustomer?.authenticationState;\n }\n\n // TODO: Remove when BT AXO A/B testing is finished\n private async initializeBraintreeFastlaneOrThrow(methodId: string): Promise<void> {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const paymentMethod = state.getPaymentMethodOrThrow(methodId);\n const { clientToken, config } = paymentMethod;\n\n if (!clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n this.braintreeIntegrationService.initialize(clientToken, this.threeDSecure);\n\n await this.braintreeIntegrationService.getBraintreeFastlane(cart.id, config.testMode);\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","export interface BraintreePayment3DSRequestErrors {\n code: string;\n}\n\nexport interface BraintreePaymentRequest3DSError {\n name: string;\n body: {\n status: string;\n three_ds_result: {\n payer_auth_request: string;\n };\n errors: BraintreePayment3DSRequestErrors[];\n };\n}\n\nexport default function isBraintreePaymentRequest3DSError(\n error: unknown,\n): error is BraintreePaymentRequest3DSError {\n if (typeof error !== 'object' || error === null) {\n return false;\n }\n\n /* eslint-disable @typescript-eslint/consistent-type-assertions */\n return (\n 'name' in error &&\n 'body' in error &&\n 'status' in (error as BraintreePaymentRequest3DSError).body &&\n 'three_ds_result' in (error as BraintreePaymentRequest3DSError).body &&\n 'payer_auth_request' in (error as BraintreePaymentRequest3DSError).body.three_ds_result &&\n 'errors' in (error as BraintreePaymentRequest3DSError).body\n );\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeHostedForm from '../braintree-hosted-form/braintree-hosted-form';\n\nimport BraintreeCreditCardPaymentStrategy from './braintree-credit-card-payment-strategy';\n\nconst createBraintreeCreditCardPaymentStrategy: PaymentStrategyFactory<\n BraintreeCreditCardPaymentStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n\n const braintreeScriptLoader = new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n );\n\n const braintreeIntegrationService = new BraintreeIntegrationService(\n braintreeScriptLoader,\n braintreeHostWindow,\n );\n\n const braintreeHostedForm = new BraintreeHostedForm(\n braintreeScriptLoader,\n braintreeSDKVersionManager,\n );\n\n return new BraintreeCreditCardPaymentStrategy(\n paymentIntegrationService,\n braintreeIntegrationService,\n braintreeHostedForm,\n );\n};\n\nexport default toResolvableModule(createBraintreeCreditCardPaymentStrategy, [{ id: 'braintree' }]);\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { noop } from 'lodash';\n\nimport {\n BraintreeError,\n BraintreeHostWindow,\n BraintreeInitializationData,\n BraintreeIntegrationService,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeTokenizePayload,\n isBraintreeError,\n PaypalAuthorizeData,\n PaypalStyleOptions,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CustomerCredentials,\n CustomerInitializeOptions,\n CustomerStrategy,\n DefaultCheckoutButtonHeight,\n ExecutePaymentMethodCheckoutOptions,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethod,\n RequestOptions,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreePaypalCustomerInitializeOptions, {\n WithBraintreePaypalCustomerInitializeOptions,\n} from './braintree-paypal-customer-initialize-options';\n\nexport default class BraintreePaypalCustomerStrategy implements CustomerStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private formPoster: FormPoster,\n private braintreeIntegrationService: BraintreeIntegrationService,\n private braintreeHostWindow: BraintreeHostWindow,\n ) {}\n\n async initialize(\n options: CustomerInitializeOptions & WithBraintreePaypalCustomerInitializeOptions,\n ): Promise<void> {\n const { braintreepaypal, methodId } = options;\n const { container, onError } = braintreepaypal || {};\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 (!braintreepaypal) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.`,\n );\n }\n\n if (!container) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypal.container\" argument is not provided.`,\n );\n }\n\n let state = this.paymentIntegrationService.getState();\n let paymentMethod: PaymentMethod<BraintreeInitializationData>;\n\n try {\n paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n if (!paymentMethod.clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n }\n } catch (_e) {\n state = await this.paymentIntegrationService.loadPaymentMethod(methodId);\n paymentMethod = state.getPaymentMethodOrThrow(methodId);\n }\n\n const { clientToken, config, initializationData } = paymentMethod;\n const { paymentButtonStyles } = initializationData || {};\n const { checkoutTopButtonStyles } = paymentButtonStyles || {};\n\n if (!clientToken || !initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const currencyCode = state.getCartOrThrow().currency.code;\n const paypalCheckoutOptions: Partial<BraintreePaypalSdkCreatorConfig> = {\n currency: currencyCode,\n intent: initializationData.intent,\n isCreditEnabled: initializationData.isCreditEnabled,\n commit: false,\n };\n\n const paypalCheckoutSuccessCallback = (\n braintreePaypalCheckout: BraintreePaypalCheckout,\n ) => {\n this.renderPayPalButton(\n braintreePaypalCheckout,\n braintreepaypal,\n methodId,\n Boolean(config.testMode),\n checkoutTopButtonStyles,\n );\n };\n const paypalCheckoutErrorCallback = (error: BraintreeError) =>\n this.handleError(error, container, onError);\n\n this.braintreeIntegrationService.initialize(clientToken);\n await this.braintreeIntegrationService.getPaypalCheckout(\n paypalCheckoutOptions,\n paypalCheckoutSuccessCallback,\n paypalCheckoutErrorCallback,\n );\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreeIntegrationService.teardown();\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 renderPayPalButton(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypal: BraintreePaypalCustomerInitializeOptions,\n methodId: string,\n testMode: boolean,\n buttonStyles: PaypalStyleOptions,\n ): void {\n const { container, onClick = noop } = braintreepaypal;\n\n const { paypal } = this.braintreeHostWindow;\n const fundingSource = paypal?.FUNDING.PAYPAL;\n\n if (paypal && fundingSource) {\n const paypalButtonRender = paypal.Buttons({\n env: this.braintreeIntegrationService.getBraintreeEnv(testMode),\n fundingSource,\n style: { ...buttonStyles, height: DefaultCheckoutButtonHeight },\n createOrder: () =>\n this.setupPayment(braintreePaypalCheckout, braintreepaypal, methodId),\n onApprove: (authorizeData: PaypalAuthorizeData) =>\n this.tokenizePayment(\n authorizeData,\n braintreePaypalCheckout,\n methodId,\n braintreepaypal,\n ),\n onClick,\n });\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${container}`);\n }\n } else {\n this.braintreeIntegrationService.removeElement(container);\n }\n }\n\n private async setupPayment(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypal: BraintreePaypalCustomerInitializeOptions,\n methodId: string,\n ): Promise<string | void> {\n try {\n await this.paymentIntegrationService.loadDefaultCheckout();\n\n const state = this.paymentIntegrationService.getState();\n const amount = state.getCheckoutOrThrow().outstandingBalance;\n const currency = state.getCartOrThrow().currency.code;\n const customer = state.getCustomer();\n const paymentMethod: PaymentMethod<BraintreeInitializationData> =\n state.getPaymentMethodOrThrow(methodId);\n const address = customer?.addresses[0];\n const shippingAddressOverride = address\n ? this.braintreeIntegrationService.mapToBraintreeShippingAddressOverride(address)\n : undefined;\n\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n shippingAddressOverride,\n amount,\n currency,\n offerCredit: false,\n intent: paymentMethod.initializationData?.intent,\n });\n } catch (error) {\n const { container, onError } = braintreepaypal;\n\n this.handleError(error, container, onError);\n }\n }\n\n private async tokenizePayment(\n authorizeData: PaypalAuthorizeData,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n methodId: string,\n braintreepaypal: BraintreePaypalCustomerInitializeOptions,\n ): Promise<BraintreeTokenizePayload | void> {\n try {\n const { deviceData } = await this.braintreeIntegrationService.getDataCollector({\n paypal: true,\n });\n const tokenizePayload = await braintreePaypalCheckout.tokenizePayment(authorizeData);\n const { details, nonce } = tokenizePayload;\n const billingAddress =\n this.braintreeIntegrationService.mapToLegacyBillingAddress(details);\n const shippingAddress =\n this.braintreeIntegrationService.mapToLegacyShippingAddress(details);\n\n this.formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n provider: methodId,\n action: 'set_external_checkout',\n nonce,\n device_data: deviceData,\n billing_address: JSON.stringify(billingAddress),\n shipping_address: JSON.stringify(shippingAddress),\n });\n\n return tokenizePayload;\n } catch (error) {\n const { container, onError } = braintreepaypal;\n\n this.handleError(error, container, onError);\n }\n }\n\n private handleError(\n error: unknown,\n buttonContainerId: string,\n onErrorCallback?: (error: BraintreeError | StandardError) => void,\n ): void {\n this.braintreeIntegrationService.removeElement(buttonContainerId);\n\n if (onErrorCallback && isBraintreeError(error)) {\n onErrorCallback(error);\n } else {\n throw error;\n }\n }\n}\n","const DefaultCheckoutButtonHeight = 40;\n\nexport default DefaultCheckoutButtonHeight;\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CustomerStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreePaypalCustomerStrategy from './braintree-paypal-customer-strategy';\n\nconst createBraintreePaypalCustomerStrategy: CustomerStrategyFactory<\n BraintreePaypalCustomerStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n ),\n braintreeHostWindow,\n );\n\n return new BraintreePaypalCustomerStrategy(\n paymentIntegrationService,\n createFormPoster(),\n braintreeIntegrationService,\n braintreeHostWindow,\n );\n};\n\nexport default toResolvableModule(createBraintreePaypalCustomerStrategy, [\n { id: 'braintreepaypal' },\n]);\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { noop } from 'lodash';\n\nimport {\n BraintreeError,\n BraintreeHostWindow,\n BraintreeInitializationData,\n BraintreeIntegrationService,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeTokenizePayload,\n isBraintreeError,\n PaypalAuthorizeData,\n PaypalStyleOptions,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CustomerCredentials,\n CustomerInitializeOptions,\n CustomerStrategy,\n DefaultCheckoutButtonHeight,\n ExecutePaymentMethodCheckoutOptions,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethod,\n RequestOptions,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreePaypalCreditCustomerInitializeOptions, {\n WithBraintreePaypalCreditCustomerInitializeOptions,\n} from './braintree-paypal-credit-customer-initialize-options';\n\nexport default class BraintreePaypalCreditCustomerStrategy implements CustomerStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private formPoster: FormPoster,\n private braintreeIntegrationService: BraintreeIntegrationService,\n private braintreeHostWindow: BraintreeHostWindow,\n ) {}\n\n async initialize(\n options: CustomerInitializeOptions & WithBraintreePaypalCreditCustomerInitializeOptions,\n ): Promise<void> {\n const { braintreepaypalcredit, methodId } = options;\n const { container, onError } = braintreepaypalcredit || {};\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 (!braintreepaypalcredit) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.`,\n );\n }\n\n if (!container) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypalcredit.container\" argument is not provided.`,\n );\n }\n\n let state = this.paymentIntegrationService.getState();\n let paymentMethod: PaymentMethod<BraintreeInitializationData>;\n\n try {\n paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n if (!paymentMethod.clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n }\n } catch (_e) {\n state = await this.paymentIntegrationService.loadPaymentMethod(methodId);\n paymentMethod = state.getPaymentMethodOrThrow(methodId);\n }\n\n const { clientToken, config, initializationData } = paymentMethod;\n const { paymentButtonStyles } = initializationData || {};\n const { checkoutTopButtonStyles } = paymentButtonStyles || {};\n\n if (!clientToken || !initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const currencyCode = state.getCartOrThrow().currency.code;\n const paypalCheckoutOptions: Partial<BraintreePaypalSdkCreatorConfig> = {\n currency: currencyCode,\n intent: initializationData.intent,\n isCreditEnabled: initializationData.isCreditEnabled,\n commit: false,\n };\n\n const paypalCheckoutSuccessCallback = (\n braintreePaypalCheckout: BraintreePaypalCheckout,\n ) => {\n this.renderPayPalButton(\n braintreePaypalCheckout,\n braintreepaypalcredit,\n methodId,\n Boolean(config.testMode),\n { ...checkoutTopButtonStyles, height: DefaultCheckoutButtonHeight },\n );\n };\n const paypalCheckoutErrorCallback = (error: BraintreeError) =>\n this.handleError(error, container, onError);\n\n this.braintreeIntegrationService.initialize(clientToken);\n await this.braintreeIntegrationService.getPaypalCheckout(\n paypalCheckoutOptions,\n paypalCheckoutSuccessCallback,\n paypalCheckoutErrorCallback,\n );\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreeIntegrationService.teardown();\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 renderPayPalButton(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypalcredit: BraintreePaypalCreditCustomerInitializeOptions,\n methodId: string,\n testMode: boolean,\n buttonStyles: PaypalStyleOptions,\n ): void {\n const { container, onClick = noop } = braintreepaypalcredit;\n const { paypal } = this.braintreeHostWindow;\n\n let hasRenderedSmartButton = false;\n\n if (paypal) {\n const fundingSources = [paypal.FUNDING.PAYLATER, paypal.FUNDING.CREDIT];\n\n fundingSources.forEach((fundingSource) => {\n if (!hasRenderedSmartButton) {\n const paypalButtonRender = paypal.Buttons({\n env: testMode ? 'sandbox' : 'production',\n fundingSource,\n style: buttonStyles,\n createOrder: () =>\n this.setupPayment(\n braintreePaypalCheckout,\n braintreepaypalcredit,\n methodId,\n ),\n onApprove: (authorizeData: PaypalAuthorizeData) =>\n this.tokenizePayment(\n authorizeData,\n braintreePaypalCheckout,\n methodId,\n braintreepaypalcredit,\n ),\n onClick,\n });\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${container}`);\n hasRenderedSmartButton = true;\n }\n }\n });\n }\n\n if (!paypal || !hasRenderedSmartButton) {\n this.braintreeIntegrationService.removeElement(container);\n }\n }\n\n private async setupPayment(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypalcredit: BraintreePaypalCreditCustomerInitializeOptions,\n methodId: string,\n ): Promise<string | void> {\n try {\n await this.paymentIntegrationService.loadDefaultCheckout();\n\n const state = this.paymentIntegrationService.getState();\n const amount = state.getCheckoutOrThrow().outstandingBalance;\n const currency = state.getCartOrThrow().currency.code;\n const customer = state.getCustomer();\n const paymentMethod: PaymentMethod<BraintreeInitializationData> =\n state.getPaymentMethodOrThrow(methodId);\n const address = customer?.addresses[0];\n const shippingAddressOverride = address\n ? this.braintreeIntegrationService.mapToBraintreeShippingAddressOverride(address)\n : undefined;\n\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n shippingAddressOverride,\n amount,\n currency,\n offerCredit: true,\n intent: paymentMethod.initializationData?.intent,\n });\n } catch (error) {\n const { container, onError } = braintreepaypalcredit;\n\n this.handleError(error, container, onError);\n }\n }\n\n private async tokenizePayment(\n authorizeData: PaypalAuthorizeData,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n methodId: string,\n braintreepaypalcredit: BraintreePaypalCreditCustomerInitializeOptions,\n ): Promise<BraintreeTokenizePayload | void> {\n try {\n const { deviceData } = await this.braintreeIntegrationService.getDataCollector({\n paypal: true,\n });\n const tokenizePayload = await braintreePaypalCheckout.tokenizePayment(authorizeData);\n const { details, nonce } = tokenizePayload;\n const billingAddress =\n this.braintreeIntegrationService.mapToLegacyBillingAddress(details);\n const shippingAddress =\n this.braintreeIntegrationService.mapToLegacyShippingAddress(details);\n\n this.formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n provider: methodId,\n action: 'set_external_checkout',\n nonce,\n device_data: deviceData,\n billing_address: JSON.stringify(billingAddress),\n shipping_address: JSON.stringify(shippingAddress),\n });\n\n return tokenizePayload;\n } catch (error) {\n const { container, onError } = braintreepaypalcredit;\n\n this.handleError(error, container, onError);\n }\n }\n\n private handleError(\n error: unknown,\n buttonContainerId: string,\n onErrorCallback?: (error: BraintreeError | StandardError) => void,\n ): void {\n this.braintreeIntegrationService.removeElement(buttonContainerId);\n\n if (onErrorCallback && isBraintreeError(error)) {\n onErrorCallback(error);\n } else {\n throw error;\n }\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CustomerStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreePaypalCreditCustomerStrategy from './braintree-paypal-credit-customer-strategy';\n\nconst createBraintreePaypalCreditCustomerStrategy: CustomerStrategyFactory<\n BraintreePaypalCreditCustomerStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n ),\n braintreeHostWindow,\n );\n\n return new BraintreePaypalCreditCustomerStrategy(\n paymentIntegrationService,\n createFormPoster(),\n braintreeIntegrationService,\n braintreeHostWindow,\n );\n};\n\nexport default toResolvableModule(createBraintreePaypalCreditCustomerStrategy, [\n { id: 'braintreepaypalcredit' },\n]);\n","import {\n BraintreeInitializationData,\n getFastlaneStyles,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CustomerCredentials,\n CustomerInitializeOptions,\n CustomerStrategy,\n ExecutePaymentMethodCheckoutOptions,\n InvalidArgumentError,\n PaymentIntegrationService,\n PaymentMethod,\n RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithBraintreeFastlaneCustomerInitializeOptions } from './braintree-fastlane-customer-initialize-options';\nimport BraintreeFastlaneUtils from './braintree-fastlane-utils';\n\nexport default class BraintreeFastlaneCustomerStrategy implements CustomerStrategy {\n private isAcceleratedCheckoutEnabled = false;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private braintreeFastlaneUtils: BraintreeFastlaneUtils,\n ) {}\n\n async initialize({\n methodId,\n braintreefastlane,\n }: CustomerInitializeOptions & WithBraintreeFastlaneCustomerInitializeOptions): Promise<void> {\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"methodId\" argument is not provided.',\n );\n }\n\n const paymentMethod = await this.getValidPaymentMethodOrThrow(methodId);\n\n const { isAcceleratedCheckoutEnabled, isFastlaneStylingEnabled } =\n paymentMethod.initializationData || {};\n\n const paypalFastlaneStylesSettings = isFastlaneStylingEnabled\n ? paymentMethod.initializationData?.fastlaneStyles\n : undefined;\n\n this.isAcceleratedCheckoutEnabled = !!isAcceleratedCheckoutEnabled;\n\n try {\n if (this.isAcceleratedCheckoutEnabled) {\n const fastlaneStyles = getFastlaneStyles(\n paypalFastlaneStylesSettings,\n braintreefastlane?.styles,\n );\n\n await this.braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow(\n paymentMethod.id,\n fastlaneStyles,\n );\n }\n } catch (_) {\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\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 } = options || {};\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 (this.isAcceleratedCheckoutEnabled && customer.isGuest) {\n const shouldRunAuthenticationFlow = await this.shouldRunAuthenticationFlow();\n\n if (\n checkoutPaymentMethodExecuted &&\n typeof checkoutPaymentMethodExecuted === 'function'\n ) {\n checkoutPaymentMethodExecuted();\n }\n\n if (shouldRunAuthenticationFlow) {\n await this.braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow(\n undefined,\n true,\n );\n }\n }\n\n continueWithCheckoutCallback();\n }\n\n // TODO: remove this method after A/B testing finished\n private async shouldRunAuthenticationFlow(): Promise<boolean> {\n const primaryMethodId = 'braintreeacceleratedcheckout';\n\n try {\n // Info: we should load payment method each time to detect if the user\n // should be in a test or in a control group\n await this.paymentIntegrationService.loadPaymentMethod(primaryMethodId);\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod =\n state.getPaymentMethodOrThrow<BraintreeInitializationData>(primaryMethodId);\n\n // Info: shouldRunAcceleratedCheckout is responsible for the flow of A/B testing purposes\n // when shouldRunAcceleratedCheckout is true, the lookup PayPal Connect method should be called,\n // otherwise AcceleratedCheckout should not be available for the customer\n return paymentMethod.initializationData?.shouldRunAcceleratedCheckout || false;\n } catch (_) {\n return false;\n }\n }\n\n private async getValidPaymentMethodOrThrow(\n methodId: string,\n ): Promise<PaymentMethod<BraintreeInitializationData>> {\n let validPaymentMethodId = methodId;\n\n try {\n await this.paymentIntegrationService.loadPaymentMethod(validPaymentMethodId);\n } catch {\n validPaymentMethodId =\n methodId === 'braintree' ? 'braintreeacceleratedcheckout' : 'braintree';\n await this.paymentIntegrationService.loadPaymentMethod(validPaymentMethodId);\n }\n\n return this.paymentIntegrationService\n .getState()\n .getPaymentMethodOrThrow<BraintreeInitializationData>(validPaymentMethodId);\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CustomerStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeFastlaneCustomerStrategy from './braintree-fastlane-customer-strategy';\nimport BraintreeFastlaneUtils from './braintree-fastlane-utils';\n\nconst createBraintreeFastlaneCustomerStrategy: CustomerStrategyFactory<\n BraintreeFastlaneCustomerStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n ),\n braintreeHostWindow,\n );\n const braintreeFastlaneUtils = new BraintreeFastlaneUtils(\n paymentIntegrationService,\n braintreeIntegrationService,\n );\n\n return new BraintreeFastlaneCustomerStrategy(paymentIntegrationService, braintreeFastlaneUtils);\n};\n\n// Info: braintree method id was added only for A/B testing purposes.\n// The main reason why we can't go in other way, because braintreeacceleratedcheckout\n// may be turned on only when BE knows customer's email address (to understand should we show the feature for the user or not).\n// So { id: 'braintree' }, should be removed after A/B testing\nexport default toResolvableModule(createBraintreeFastlaneCustomerStrategy, [\n { id: 'braintreeacceleratedcheckout' },\n { id: 'braintree' },\n]);\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 { FormPoster } from '@bigcommerce/form-poster';\nimport { noop } from 'lodash';\n\nimport {\n BraintreeDataCollector,\n BraintreeSdk,\n BraintreeVisaCheckout,\n VisaCheckoutAddress,\n VisaCheckoutPaymentSuccessPayload,\n VisaCheckoutTokenizedPayload,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n Address,\n CustomerInitializeOptions,\n CustomerStrategy,\n ExecutePaymentMethodCheckoutOptions,\n InvalidArgumentError,\n LegacyAddress,\n MissingDataError,\n MissingDataErrorType,\n NotImplementedError,\n PaymentIntegrationService,\n RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithBraintreeVisaCheckoutCustomerInitializeOptions } from './braintree-visa-customer-initialize-options';\n\nexport default class BraintreeVisaCheckoutCustomerStrategy implements CustomerStrategy {\n private buttonClassName = 'visa-checkout-wrapper';\n private onError = noop;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private formPoster: FormPoster,\n private braintreeSdk: BraintreeSdk,\n ) {}\n\n async initialize(\n options: CustomerInitializeOptions & WithBraintreeVisaCheckoutCustomerInitializeOptions,\n ): Promise<void> {\n const { braintreevisacheckout: visaCheckoutOptions, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"methodId\" argument is not provided.',\n );\n }\n\n if (!visaCheckoutOptions) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"options.braintreevisacheckout\" argument is not provided.',\n );\n }\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n\n const checkout = state.getCheckoutOrThrow();\n\n const { clientToken, config } = state.getPaymentMethodOrThrow(methodId);\n\n const storeConfig = state.getStoreConfigOrThrow();\n\n if (!clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n this.braintreeSdk.initialize(clientToken);\n\n const braintreeVisaCheckout = await this.braintreeSdk.getBraintreeVisaCheckout();\n\n const visaCheckoutInstance = await this.braintreeSdk.getVisaCheckoutSdk(config.testMode);\n\n const { container, onError } = visaCheckoutOptions;\n\n this.onError = onError || noop;\n\n const initOptions = braintreeVisaCheckout.createInitOptions({\n paymentRequest: {\n currencyCode: storeConfig.currency.code,\n subtotal: String(checkout.subtotal),\n },\n settings: {\n locale: storeConfig.storeProfile.storeLanguage,\n shipping: {\n collectShipping: true,\n },\n },\n });\n\n const signInButton = this.createSignInButton(container, this.buttonClassName);\n\n await visaCheckoutInstance.init(initOptions);\n\n visaCheckoutInstance.on(\n 'payment.success',\n (paymentSuccessPayload: VisaCheckoutPaymentSuccessPayload) =>\n this.tokenizePayment(braintreeVisaCheckout, paymentSuccessPayload)\n .then(() => this.paymentIntegrationService.loadCheckout())\n .catch((error) => this.handleError(error)),\n );\n\n visaCheckoutInstance.on('payment.error', (_, error) => this.handleError(error));\n\n signInButton.style.visibility = 'visible';\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreeSdk.deinitialize();\n }\n\n signIn(): Promise<void> {\n throw new NotImplementedError(\n 'In order to sign in via VisaCheckout, the shopper must click on \"Visa Checkout\" button.',\n );\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 async tokenizePayment(\n braintreeVisaCheckout: BraintreeVisaCheckout,\n payment: VisaCheckoutPaymentSuccessPayload,\n ) {\n return Promise.all([\n braintreeVisaCheckout.tokenize(payment),\n this.braintreeSdk.getDataCollectorOrThrow(),\n ]).then(([payload, deviceData]) => {\n const state = this.paymentIntegrationService.getState();\n\n const shipping = state.getShippingAddress();\n const billing = state.getBillingAddress();\n\n const {\n shippingAddress = this.mapToVisaCheckoutAddress(shipping),\n billingAddress = this.mapToVisaCheckoutAddress(billing),\n } = payload;\n\n return this.postForm(\n {\n ...payload,\n shippingAddress,\n billingAddress,\n },\n deviceData,\n );\n });\n }\n\n private postForm(\n paymentData: VisaCheckoutTokenizedPayload,\n dataCollector: BraintreeDataCollector,\n ) {\n const { userData, billingAddress, shippingAddress, details: cardInformation } = paymentData;\n const { userEmail } = userData;\n const { deviceData } = dataCollector;\n\n return this.formPoster.postForm('/checkout.php', {\n payment_type: paymentData.type,\n nonce: paymentData.nonce,\n provider: 'braintreevisacheckout',\n action: 'set_external_checkout',\n device_data: deviceData,\n card_information: JSON.stringify({\n type: cardInformation.cardType,\n number: cardInformation.lastTwo,\n }),\n billing_address: JSON.stringify(this.getAddress(userEmail, billingAddress)),\n shipping_address: JSON.stringify(this.getAddress(userEmail, shippingAddress)),\n });\n }\n\n private mapToVisaCheckoutAddress(address?: Address): VisaCheckoutAddress {\n if (!address) {\n return {};\n }\n\n return {\n firstName: address.firstName,\n lastName: address.lastName,\n phoneNumber: address.phone,\n streetAddress: address.address1,\n extendedAddress: address.address2,\n locality: address.city,\n region: address.stateOrProvinceCode,\n countryCode: address.countryCode,\n postalCode: address.postalCode,\n };\n }\n\n private getAddress(email: string, address: VisaCheckoutAddress = {}): Partial<LegacyAddress> {\n return {\n email,\n first_name: address.firstName,\n last_name: address.lastName,\n phone_number: address.phoneNumber,\n address_line_1: address.streetAddress,\n address_line_2: address.extendedAddress,\n city: address.locality,\n state: address.region,\n country_code: address.countryCode,\n postal_code: address.postalCode,\n };\n }\n\n private createSignInButton(containerId: string, buttonClass: string): HTMLElement {\n const container = document.querySelector(`#${containerId}`);\n\n if (!container) {\n throw new Error('Unable to proceed because the provided container ID is not valid.');\n }\n\n return this.insertVisaCheckoutButton(container, buttonClass);\n }\n\n private insertVisaCheckoutButton(container: Element, buttonClass: string): HTMLElement {\n const buttonSource =\n 'https://secure.checkout.visa.com/wallet-services-web/xo/button.png?acceptCanadianVisaDebit=false&cobrand=true&height=34&width=178';\n const buttonTemplate = `\n <img\n alt=\"Visa Checkout\"\n class=\"v-button\"\n role=\"button\"\n src=\"${buttonSource}\"\n />\n <a class=\"v-learn v-learn-default\" style=\"text-align: right; display: block; font-size: 10px; color: #003366;\" href=\"#\" data-locale=\"en_US\">Tell Me More</a>`;\n\n const visaCheckoutButton = document.createElement('div');\n\n visaCheckoutButton.style.display = 'flex';\n visaCheckoutButton.style.flexDirection = 'column';\n visaCheckoutButton.style.visibility = 'hidden';\n visaCheckoutButton.style.width = 'max-content';\n\n visaCheckoutButton.className = buttonClass;\n visaCheckoutButton.innerHTML = buttonTemplate;\n\n container.appendChild(visaCheckoutButton);\n\n return visaCheckoutButton;\n }\n\n private handleError(error: Error) {\n if (typeof this.onError === 'function') {\n this.onError(error);\n } else {\n throw error;\n }\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeScriptLoader,\n BraintreeSdk,\n BraintreeSDKVersionManager,\n VisaCheckoutHostWindow,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CustomerStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeVisaCheckoutCustomerStrategy from './braintree-visa-checkout-customer-strategy';\n\nconst createBraintreeVisaCheckoutCustomerStrategy: CustomerStrategyFactory<\n BraintreeVisaCheckoutCustomerStrategy\n> = (paymentIntegrationService) => {\n const hostWindow: VisaCheckoutHostWindow & BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeSdk = new BraintreeSdk(\n new BraintreeScriptLoader(getScriptLoader(), hostWindow, braintreeSDKVersionManager),\n );\n\n return new BraintreeVisaCheckoutCustomerStrategy(\n paymentIntegrationService,\n createFormPoster(),\n braintreeSdk,\n );\n};\n\nexport default toResolvableModule(createBraintreeVisaCheckoutCustomerStrategy, [\n { id: 'braintreevisacheckout' },\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 { isNil, omitBy } from 'lodash';\n\nimport { PaypalStyleOptions } from '@bigcommerce/checkout-sdk/braintree-utils';\n\nexport default function getValidButtonStyle(style?: PaypalStyleOptions): PaypalStyleOptions {\n const { color, fundingicons, height = 40, layout, shape, size, tagline } = style || {};\n\n const validStyles = {\n color,\n fundingicons,\n height: getValidHeight(height),\n layout,\n shape: shape || 'rect',\n size,\n tagline,\n };\n\n return omitBy(validStyles, isNil);\n}\n\nfunction getValidHeight(height: number | string): number {\n const minHeight = 25;\n const defaultHeight = 40;\n const maxHeight = 55;\n\n const currentHeight = Number(height);\n\n if (!currentHeight || Number.isNaN(currentHeight)) {\n return defaultHeight;\n }\n\n if (currentHeight > maxHeight) {\n return maxHeight;\n }\n\n if (currentHeight < minHeight) {\n return minHeight;\n }\n\n return currentHeight;\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n BraintreeError,\n BraintreeHostWindow,\n BraintreeInitializationData,\n BraintreeIntegrationService,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeTokenizePayload,\n isBraintreeError,\n PaypalAuthorizeData,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n BuyNowCartCreationError,\n BuyNowCartRequestBody,\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethod,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport getValidButtonStyle from '../get-valid-button-style';\nimport mapToBraintreeShippingAddressOverride from '../map-to-braintree-shipping-address-override';\n\nimport BraintreePaypalButtonInitializeOptions, {\n WithBraintreePaypalButtonInitializeOptions,\n} from './braintree-paypal-button-initialize-options';\n\nexport default class BraintreePaypalButtonStrategy implements CheckoutButtonStrategy {\n private buyNowCartId: string | undefined;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private formPoster: FormPoster,\n private braintreeIntegrationService: BraintreeIntegrationService,\n private braintreeHostWindow: BraintreeHostWindow,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithBraintreePaypalButtonInitializeOptions,\n ): Promise<void> {\n const { braintreepaypal, 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 (!braintreepaypal) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.`,\n );\n }\n\n let state = this.paymentIntegrationService.getState();\n let currencyCode: string;\n\n if (braintreepaypal.buyNowInitializeOptions) {\n if (!braintreepaypal.currencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.`,\n );\n }\n\n currencyCode = braintreepaypal.currencyCode;\n } else {\n await this.paymentIntegrationService.loadDefaultCheckout();\n\n state = this.paymentIntegrationService.getState();\n currencyCode = state.getCartOrThrow().currency.code;\n }\n\n const paymentMethod = state.getPaymentMethodOrThrow<BraintreeInitializationData>(methodId);\n const { clientToken, config, initializationData } = paymentMethod;\n\n if (!clientToken || !initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const paypalCheckoutOptions: Partial<BraintreePaypalSdkCreatorConfig> = {\n currency: currencyCode,\n intent: initializationData.intent,\n isCreditEnabled: initializationData.isCreditEnabled,\n commit: false,\n };\n\n const paypalCheckoutSuccessCallback = (\n braintreePaypalCheckout: BraintreePaypalCheckout,\n ) => {\n this.renderPayPalButton(\n braintreePaypalCheckout,\n braintreepaypal,\n containerId,\n methodId,\n !!config.testMode,\n );\n };\n const paypalCheckoutErrorCallback = (error: BraintreeError) =>\n this.handleError(error, containerId, braintreepaypal.onError);\n\n this.braintreeIntegrationService.initialize(clientToken);\n await this.braintreeIntegrationService.getPaypalCheckout(\n paypalCheckoutOptions,\n paypalCheckoutSuccessCallback,\n paypalCheckoutErrorCallback,\n );\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreeIntegrationService.teardown();\n }\n\n private renderPayPalButton(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypal: BraintreePaypalButtonInitializeOptions,\n containerId: string,\n methodId: string,\n testMode: boolean,\n ): void {\n const { style, shouldProcessPayment, onAuthorizeError, onEligibilityFailure } =\n braintreepaypal;\n const { paypal } = this.braintreeHostWindow;\n\n if (paypal) {\n const paypalButtonRender = paypal.Buttons({\n env: testMode ? 'sandbox' : 'production',\n fundingSource: paypal.FUNDING.PAYPAL,\n style: getValidButtonStyle(style),\n createOrder: () =>\n this.setupPayment(braintreePaypalCheckout, braintreepaypal, methodId),\n onApprove: (authorizeData: PaypalAuthorizeData) =>\n this.tokenizePayment(\n authorizeData,\n braintreePaypalCheckout,\n methodId,\n shouldProcessPayment,\n onAuthorizeError,\n ),\n });\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n } else if (onEligibilityFailure && typeof onEligibilityFailure === 'function') {\n onEligibilityFailure();\n }\n } else {\n this.braintreeIntegrationService.removeElement(containerId);\n }\n }\n\n private async setupPayment(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypal: BraintreePaypalButtonInitializeOptions,\n methodId: string,\n ): Promise<string | void> {\n const { onPaymentError, shippingAddress, buyNowInitializeOptions } = braintreepaypal;\n\n try {\n const buyNowCart =\n typeof buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function'\n ? await this.createBuyNowCart(\n buyNowInitializeOptions.getBuyNowCartRequestBody(),\n )\n : undefined;\n\n this.buyNowCartId = buyNowCart?.id;\n\n const state = this.paymentIntegrationService.getState();\n const customer = state.getCustomer();\n const paymentMethod: PaymentMethod<BraintreeInitializationData> =\n state.getPaymentMethodOrThrow(methodId);\n\n const amount = buyNowCart ? buyNowCart.cartAmount : state.getCartOrThrow().cartAmount;\n const currencyCode = buyNowCart\n ? braintreepaypal.currencyCode\n : state.getCartOrThrow().currency.code;\n\n const address = shippingAddress || customer?.addresses[0];\n\n const shippingAddressOverride = address\n ? mapToBraintreeShippingAddressOverride(address)\n : undefined;\n\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n shippingAddressOverride,\n amount,\n currency: currencyCode,\n offerCredit: false,\n intent: paymentMethod.initializationData?.intent,\n });\n } catch (error: unknown) {\n if (onPaymentError) {\n if (isBraintreeError(error) || error instanceof StandardError) {\n onPaymentError(error);\n }\n }\n\n throw error;\n }\n }\n\n private async tokenizePayment(\n authorizeData: PaypalAuthorizeData,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n methodId: string,\n shouldProcessPayment?: boolean,\n onError?: (error: BraintreeError | StandardError) => void,\n ): Promise<BraintreeTokenizePayload | void> {\n try {\n const { deviceData } = await this.braintreeIntegrationService.getDataCollector({\n paypal: true,\n });\n const tokenizePayload = await braintreePaypalCheckout.tokenizePayment(authorizeData);\n const { details, nonce } = tokenizePayload;\n const billingAddress =\n this.braintreeIntegrationService.mapToLegacyBillingAddress(details);\n const shippingAddress =\n this.braintreeIntegrationService.mapToLegacyShippingAddress(details);\n\n this.formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n provider: methodId,\n action: shouldProcessPayment ? 'process_payment' : 'set_external_checkout',\n nonce,\n device_data: deviceData,\n billing_address: JSON.stringify(billingAddress),\n shipping_address: JSON.stringify(shippingAddress),\n ...(this.buyNowCartId && { cart_id: this.buyNowCartId }),\n });\n\n return tokenizePayload;\n } catch (error) {\n if (onError) {\n if (isBraintreeError(error) || error instanceof StandardError) {\n onError(error);\n }\n }\n\n throw error;\n }\n }\n\n private async createBuyNowCart(buyNowCardRequestBody?: BuyNowCartRequestBody | void) {\n if (!buyNowCardRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n return await this.paymentIntegrationService.createBuyNowCart(buyNowCardRequestBody);\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n\n private handleError(\n error: unknown,\n buttonContainerId: string,\n onErrorCallback?: (error: BraintreeError | StandardError) => void,\n ): void {\n this.braintreeIntegrationService.removeElement(buttonContainerId);\n\n if (onErrorCallback && isBraintreeError(error)) {\n onErrorCallback(error);\n } else {\n throw error;\n }\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreePaypalButtonStrategy from './braintree-paypal-button-strategy';\n\nconst createBraintreePaypalButtonStrategy: CheckoutButtonStrategyFactory<\n BraintreePaypalButtonStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n ),\n braintreeHostWindow,\n );\n\n return new BraintreePaypalButtonStrategy(\n paymentIntegrationService,\n createFormPoster(),\n braintreeIntegrationService,\n braintreeHostWindow,\n );\n};\n\nexport default toResolvableModule(createBraintreePaypalButtonStrategy, [{ id: 'braintreepaypal' }]);\n","import { FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n BraintreeError,\n BraintreeHostWindow,\n BraintreeInitializationData,\n BraintreeIntegrationService,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeTokenizePayload,\n isBraintreeError,\n PaypalAuthorizeData,\n PaypalButtonStyleLabelOption,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n BuyNowCartCreationError,\n BuyNowCartRequestBody,\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethod,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport getValidButtonStyle from '../get-valid-button-style';\nimport mapToBraintreeShippingAddressOverride from '../map-to-braintree-shipping-address-override';\n\nimport BraintreePaypalCreditButtonInitializeOptions, {\n WithBraintreePaypalCreditButtonInitializeOptions,\n} from './braintree-paypal-credit-button-initialize-options';\n\nexport default class BraintreePaypalCreditButtonStrategy implements CheckoutButtonStrategy {\n private buyNowCartId: string | undefined;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private formPoster: FormPoster,\n private braintreeIntegrationService: BraintreeIntegrationService,\n private braintreeHostWindow: BraintreeHostWindow,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithBraintreePaypalCreditButtonInitializeOptions,\n ): Promise<void> {\n const { braintreepaypalcredit, 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 (!braintreepaypalcredit) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.`,\n );\n }\n\n let state = this.paymentIntegrationService.getState();\n let currencyCode: string;\n\n if (braintreepaypalcredit.buyNowInitializeOptions) {\n if (!braintreepaypalcredit.currencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.`,\n );\n }\n\n currencyCode = braintreepaypalcredit.currencyCode;\n } else {\n await this.paymentIntegrationService.loadDefaultCheckout();\n\n state = this.paymentIntegrationService.getState();\n currencyCode = state.getCartOrThrow().currency.code;\n }\n\n const paymentMethod = state.getPaymentMethodOrThrow<BraintreeInitializationData>(methodId);\n const { clientToken, config, initializationData } = paymentMethod;\n\n if (!clientToken || !initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const paypalCheckoutOptions: Partial<BraintreePaypalSdkCreatorConfig> = {\n currency: currencyCode,\n intent: initializationData.intent,\n isCreditEnabled: initializationData.isCreditEnabled,\n commit: false,\n };\n\n const paypalCheckoutSuccessCallback = (\n braintreePaypalCheckout: BraintreePaypalCheckout,\n ) => {\n this.renderPayPalButton(\n braintreePaypalCheckout,\n braintreepaypalcredit,\n containerId,\n methodId,\n !!config.testMode,\n );\n };\n const paypalCheckoutErrorCallback = (error: BraintreeError) =>\n this.handleError(error, containerId, braintreepaypalcredit.onError);\n\n this.braintreeIntegrationService.initialize(clientToken);\n await this.braintreeIntegrationService.getPaypalCheckout(\n paypalCheckoutOptions,\n paypalCheckoutSuccessCallback,\n paypalCheckoutErrorCallback,\n );\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreeIntegrationService.teardown();\n }\n\n private renderPayPalButton(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypalcredit: BraintreePaypalCreditButtonInitializeOptions,\n containerId: string,\n methodId: string,\n testMode: boolean,\n ): void {\n const { style, shouldProcessPayment, onAuthorizeError, onEligibilityFailure } =\n braintreepaypalcredit;\n const { paypal } = this.braintreeHostWindow;\n\n let hasRenderedSmartButton = false;\n\n if (paypal) {\n const fundingSources = [paypal.FUNDING.PAYLATER, paypal.FUNDING.CREDIT];\n\n fundingSources.forEach((fundingSource) => {\n const buttonStyle =\n fundingSource === paypal.FUNDING.CREDIT\n ? {\n label: PaypalButtonStyleLabelOption.CREDIT,\n ...getValidButtonStyle(style),\n }\n : getValidButtonStyle(style);\n\n if (!hasRenderedSmartButton) {\n const paypalButtonRender = paypal.Buttons({\n env: testMode ? 'sandbox' : 'production',\n fundingSource,\n style: buttonStyle,\n createOrder: () =>\n this.setupPayment(\n braintreePaypalCheckout,\n braintreepaypalcredit,\n methodId,\n ),\n onApprove: (authorizeData: PaypalAuthorizeData) =>\n this.tokenizePayment(\n authorizeData,\n braintreePaypalCheckout,\n methodId,\n shouldProcessPayment,\n onAuthorizeError,\n ),\n });\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n hasRenderedSmartButton = true;\n } else if (\n paypal.FUNDING.CREDIT &&\n onEligibilityFailure &&\n typeof onEligibilityFailure === 'function'\n ) {\n // the condition is related to paypal.FUNDING.CREDIT because when paypal.FUNDING.PAYLATER is not eligible then\n // CREDIT button should be configured and triggered to render with eligibility check\n // and if it is not eligible, then onEligibilityFailure callback should be called\n onEligibilityFailure();\n }\n }\n });\n }\n\n if (!paypal || !hasRenderedSmartButton) {\n this.braintreeIntegrationService.removeElement(containerId);\n }\n }\n\n private async setupPayment(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypalcredit: BraintreePaypalCreditButtonInitializeOptions,\n methodId: string,\n ): Promise<string | void> {\n const { onPaymentError, shippingAddress, buyNowInitializeOptions } = braintreepaypalcredit;\n\n try {\n const buyNowCart =\n typeof buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function'\n ? await this.createBuyNowCart(\n buyNowInitializeOptions.getBuyNowCartRequestBody(),\n )\n : undefined;\n\n this.buyNowCartId = buyNowCart?.id;\n\n const state = this.paymentIntegrationService.getState();\n const customer = state.getCustomer();\n const paymentMethod: PaymentMethod<BraintreeInitializationData> =\n state.getPaymentMethodOrThrow(methodId);\n\n const amount = buyNowCart ? buyNowCart.cartAmount : state.getCartOrThrow().cartAmount; // state.getCheckoutOrThrow().outstandingBalance\n const currencyCode = buyNowCart\n ? braintreepaypalcredit.currencyCode\n : state.getCartOrThrow().currency.code;\n\n const address = shippingAddress || customer?.addresses[0];\n\n const shippingAddressOverride = address\n ? mapToBraintreeShippingAddressOverride(address)\n : undefined;\n\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n shippingAddressOverride,\n amount,\n currency: currencyCode,\n offerCredit: true,\n intent: paymentMethod.initializationData?.intent,\n });\n } catch (error: unknown) {\n if (onPaymentError) {\n if (isBraintreeError(error) || error instanceof StandardError) {\n onPaymentError(error);\n }\n }\n\n throw error;\n }\n }\n\n private async tokenizePayment(\n authorizeData: PaypalAuthorizeData,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n methodId: string,\n shouldProcessPayment?: boolean,\n onError?: (error: BraintreeError | StandardError) => void,\n ): Promise<BraintreeTokenizePayload | void> {\n try {\n const { deviceData } = await this.braintreeIntegrationService.getDataCollector({\n paypal: true,\n });\n const tokenizePayload = await braintreePaypalCheckout.tokenizePayment(authorizeData);\n const { details, nonce } = tokenizePayload;\n const billingAddress =\n this.braintreeIntegrationService.mapToLegacyBillingAddress(details);\n const shippingAddress =\n this.braintreeIntegrationService.mapToLegacyShippingAddress(details);\n\n this.formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n provider: methodId,\n action: shouldProcessPayment ? 'process_payment' : 'set_external_checkout',\n nonce,\n device_data: deviceData,\n billing_address: JSON.stringify(billingAddress),\n shipping_address: JSON.stringify(shippingAddress),\n ...(this.buyNowCartId && { cart_id: this.buyNowCartId }),\n });\n\n return tokenizePayload;\n } catch (error) {\n if (onError) {\n if (isBraintreeError(error) || error instanceof StandardError) {\n onError(error);\n }\n }\n\n throw error;\n }\n }\n\n private async createBuyNowCart(buyNowCardRequestBody?: BuyNowCartRequestBody | void) {\n if (!buyNowCardRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n return await this.paymentIntegrationService.createBuyNowCart(buyNowCardRequestBody);\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n\n private handleError(\n error: unknown,\n buttonContainerId: string,\n onErrorCallback?: (error: BraintreeError | StandardError) => void,\n ): void {\n this.braintreeIntegrationService.removeElement(buttonContainerId);\n\n if (onErrorCallback && isBraintreeError(error)) {\n onErrorCallback(error);\n } else {\n throw error;\n }\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreePaypalCreditButtonStrategy from './braintree-paypal-credit-button-strategy';\n\nconst createBraintreePaypalCreditButtonStrategy: CheckoutButtonStrategyFactory<\n BraintreePaypalCreditButtonStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n ),\n braintreeHostWindow,\n );\n\n return new BraintreePaypalCreditButtonStrategy(\n paymentIntegrationService,\n createFormPoster(),\n braintreeIntegrationService,\n braintreeHostWindow,\n );\n};\n\nexport default toResolvableModule(createBraintreePaypalCreditButtonStrategy, [\n { id: 'braintreepaypalcredit' },\n]);\n","import { FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n BraintreeDataCollector,\n BraintreeSdk,\n BraintreeVisaCheckout,\n VisaCheckoutAddress,\n VisaCheckoutPaymentSuccessPayload,\n VisaCheckoutTokenizedPayload,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n Address,\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n LegacyAddress,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class BraintreeVisaCheckoutButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private formPoster: FormPoster,\n private braintreeSdk: BraintreeSdk,\n ) {}\n\n async initialize(options: CheckoutButtonInitializeOptions): Promise<void> {\n const { 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 await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n\n const { clientToken, initializationData, config } = state.getPaymentMethodOrThrow(methodId);\n\n if (!clientToken || !initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n this.braintreeSdk.initialize(clientToken);\n\n const braintreeVisaCheckout = await this.braintreeSdk.getBraintreeVisaCheckout();\n\n const {\n currency: { code },\n cartAmount,\n } = state.getCartOrThrow();\n\n const visaCheckoutInstance = await this.braintreeSdk.getVisaCheckoutSdk(config.testMode);\n\n const initOptions = braintreeVisaCheckout.createInitOptions({\n paymentRequest: {\n currencyCode: code,\n subtotal: String(cartAmount),\n },\n settings: {\n shipping: {\n collectShipping: true,\n },\n },\n });\n\n this.createSignInButton(containerId);\n\n await visaCheckoutInstance.init(initOptions);\n\n visaCheckoutInstance.on('payment.success', async (payment) => {\n await this.paymentSuccess(braintreeVisaCheckout, payment);\n });\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n private async paymentSuccess(\n braintreeVisaCheckout: BraintreeVisaCheckout,\n payment: VisaCheckoutPaymentSuccessPayload,\n ) {\n return Promise.all([\n braintreeVisaCheckout.tokenize(payment),\n this.braintreeSdk.getDataCollectorOrThrow(),\n ]).then(([payload, deviceData]) => {\n const state = this.paymentIntegrationService.getState();\n\n const shipping = state.getShippingAddress();\n const billing = state.getBillingAddress();\n\n const {\n shippingAddress = this.toVisaCheckoutAddress(shipping),\n billingAddress = this.toVisaCheckoutAddress(billing),\n } = payload;\n\n return this.postForm(\n {\n ...payload,\n shippingAddress,\n billingAddress,\n },\n deviceData,\n );\n });\n }\n\n private postForm(\n paymentData: VisaCheckoutTokenizedPayload,\n dataCollector: BraintreeDataCollector,\n ) {\n const { userData, billingAddress, shippingAddress, details: cardInformation } = paymentData;\n const { userEmail } = userData;\n const { deviceData } = dataCollector;\n\n return this.formPoster.postForm('/checkout.php', {\n payment_type: paymentData.type,\n nonce: paymentData.nonce,\n provider: 'braintreevisacheckout',\n action: 'set_external_checkout',\n device_data: deviceData,\n card_information: JSON.stringify({\n type: cardInformation.cardType,\n number: cardInformation.lastTwo,\n }),\n billing_address: JSON.stringify(this.getAddress(userEmail, billingAddress)),\n shipping_address: JSON.stringify(this.getAddress(userEmail, shippingAddress)),\n });\n }\n\n private toVisaCheckoutAddress(address?: Address): VisaCheckoutAddress {\n if (!address) {\n return {};\n }\n\n return {\n firstName: address.firstName,\n lastName: address.lastName,\n phoneNumber: address.phone,\n streetAddress: address.address1,\n extendedAddress: address.address2,\n locality: address.city,\n region: address.stateOrProvinceCode,\n countryCode: address.countryCode,\n postalCode: address.postalCode,\n };\n }\n\n private getAddress(email: string, address: VisaCheckoutAddress = {}): Partial<LegacyAddress> {\n return {\n email,\n first_name: address.firstName,\n last_name: address.lastName,\n phone_number: address.phoneNumber,\n address_line_1: address.streetAddress,\n address_line_2: address.extendedAddress,\n city: address.locality,\n state: address.region,\n country_code: address.countryCode,\n postal_code: address.postalCode,\n };\n }\n\n private createSignInButton(containerId: string): HTMLElement {\n const container = document.querySelector(`#${containerId}`);\n\n if (!container) {\n throw new Error('Need a container to place the button');\n }\n\n return this.insertVisaCheckoutButton(container);\n }\n\n private insertVisaCheckoutButton(container: Element): HTMLElement {\n const buttonSource =\n 'https://secure.checkout.visa.com/wallet-services-web/xo/button.png?acceptCanadianVisaDebit=false&cobrand=true&height=34&width=178';\n const buttonTemplate = `\n <img\n alt=\"Visa Checkout\"\n class=\"v-button\"\n role=\"button\"\n src=\"${buttonSource}\"\n />\n <a class=\"v-learn v-learn-default\" style=\"text-align: right; display: block; font-size: 10px; color: #003366;\" href=\"#\" data-locale=\"en_US\">Tell Me More</a>`;\n\n const visaCheckoutButton = document.createElement('div');\n\n visaCheckoutButton.style.display = 'flex';\n visaCheckoutButton.style.flexDirection = 'column';\n visaCheckoutButton.style.alignItems = 'flex-end';\n\n visaCheckoutButton.innerHTML = buttonTemplate;\n\n container.appendChild(visaCheckoutButton);\n\n return visaCheckoutButton;\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeScriptLoader,\n BraintreeSdk,\n BraintreeSDKVersionManager,\n VisaCheckoutHostWindow,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeVisaCheckoutButtonStrategy from './braintree-visa-checkout-button-strategy';\n\nconst createBraintreeVisaCheckoutButtonStrategy: CheckoutButtonStrategyFactory<\n BraintreeVisaCheckoutButtonStrategy\n> = (paymentIntegrationService) => {\n const hostWindow: VisaCheckoutHostWindow & BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeSdk = new BraintreeSdk(\n new BraintreeScriptLoader(getScriptLoader(), hostWindow, braintreeSDKVersionManager),\n );\n\n return new BraintreeVisaCheckoutButtonStrategy(\n paymentIntegrationService,\n createFormPoster(),\n braintreeSdk,\n );\n};\n\nexport default toResolvableModule(createBraintreeVisaCheckoutButtonStrategy, [\n { id: 'braintreevisacheckout' },\n]);\n","import { LegacyAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BraintreeTokenizationDetails } from './types';\n\nexport default function mapToLegacyBillingAddress(\n details: BraintreeTokenizationDetails,\n): Partial<LegacyAddress> {\n const { billingAddress, email, firstName, lastName, phone, shippingAddress } = details;\n\n const address = billingAddress || shippingAddress;\n\n return {\n email,\n first_name: firstName,\n last_name: lastName,\n phone_number: phone,\n address_line_1: address?.line1,\n address_line_2: address?.line2,\n city: address?.city,\n state: address?.state,\n country_code: address?.countryCode,\n postal_code: address?.postalCode,\n };\n}\n","import { LegacyAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BraintreeTokenizationDetails } from './types';\n\nexport default function mapToLegacyShippingAddress(\n details: BraintreeTokenizationDetails,\n): Partial<LegacyAddress> {\n const { email, phone, shippingAddress } = details;\n\n const recipientName = shippingAddress?.recipientName || '';\n const [firstName, lastName] = recipientName.split(' ');\n\n return {\n email,\n first_name: firstName || '',\n last_name: lastName || '',\n phone_number: phone,\n address_line_1: shippingAddress?.line1,\n address_line_2: shippingAddress?.line2,\n city: shippingAddress?.city,\n state: shippingAddress?.state,\n country_code: shippingAddress?.countryCode,\n postal_code: shippingAddress?.postalCode,\n };\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { noop } from 'lodash';\n\nimport {\n BraintreeError,\n BraintreeSdk,\n BraintreeTokenizePayload,\n BraintreeVenmoCheckout,\n mapToLegacyBillingAddress,\n mapToLegacyShippingAddress,\n PaypalButtonStyleColorOption,\n PaypalStyleOptions,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n BuyNowCartCreationError,\n BuyNowCartRequestBody,\n Cart,\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethod,\n UnsupportedBrowserError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport isBraintreeError from '../is-braintree-error';\nimport { isUnsupportedBrowserError } from '../isUnsupportedBrowserError';\n\nimport { WithBraintreeVenmoInitializeOptions } from './braintree-venmo-initialize-options';\n\nconst getVenmoButtonStyle = (styles: PaypalStyleOptions): Record<string, string> => {\n const { color, height } = styles;\n\n const colorParser = (c: string) => {\n if (c === PaypalButtonStyleColorOption.WHITE) {\n return '#FFFFFF';\n }\n\n return '#3D95CE';\n };\n\n return {\n backgroundColor: colorParser(color || ''),\n backgroundPosition: '50% 50%',\n backgroundSize: '80px auto',\n backgroundImage: `url(\"/app/assets/img/payment-providers/venmo-logo-${\n color === PaypalButtonStyleColorOption.WHITE\n ? PaypalButtonStyleColorOption.BLUE\n : PaypalButtonStyleColorOption.WHITE\n }.svg\")`,\n backgroundRepeat: 'no-repeat',\n borderRadius: '4px',\n cursor: 'pointer',\n transition: '0.2s ease',\n minHeight: `${height || 40}px`,\n minWidth: '150px',\n height: '100%',\n width: '100%',\n border: color === PaypalButtonStyleColorOption.WHITE ? '1px solid black' : 'none',\n };\n};\n\nconst venmoButtonStyleHover = {\n backgroundColor: '#0a7fc2',\n};\n\ninterface BuyNowInitializeOptions {\n getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\n}\n\nexport default class BraintreeVenmoButtonStrategy implements CheckoutButtonStrategy {\n private onError = noop;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private formPoster: FormPoster,\n private braintreeSdk: BraintreeSdk,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithBraintreeVenmoInitializeOptions,\n ): Promise<void> {\n const { braintreevenmo, 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 const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow(methodId);\n const { clientToken, initializationData }: PaymentMethod = paymentMethod;\n const { paymentButtonStyles } = initializationData;\n const { cartButtonStyles } = paymentButtonStyles || {};\n const styles = braintreevenmo?.style || cartButtonStyles;\n\n if (!clientToken || !initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\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 await this.paymentIntegrationService.loadDefaultCheckout();\n\n this.onError = braintreevenmo?.onError || this.handleError;\n this.braintreeSdk.initialize(clientToken);\n\n try {\n const braintreeVenmoCheckout = await this.braintreeSdk.getVenmoCheckoutOrThrow();\n\n this.renderVenmoButton(\n braintreeVenmoCheckout,\n containerId,\n braintreevenmo?.buyNowInitializeOptions,\n styles,\n );\n } catch (error) {\n if (isBraintreeError(error) || isUnsupportedBrowserError(error)) {\n this.handleInitializationVenmoError(error, containerId);\n }\n }\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreeSdk.deinitialize();\n\n return Promise.resolve();\n }\n\n private handleError(error: BraintreeError) {\n throw new Error(error.message);\n }\n\n private async createBuyNowCart(\n buyNowInitializeOptions?: BuyNowInitializeOptions,\n ): Promise<Cart | undefined> {\n if (typeof buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function') {\n const cartRequestBody = buyNowInitializeOptions?.getBuyNowCartRequestBody();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n const buyNowCart = await this.paymentIntegrationService.createBuyNowCart(\n cartRequestBody,\n );\n\n return buyNowCart;\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n\n return undefined;\n }\n\n private handleInitializationVenmoError(\n error: BraintreeError | UnsupportedBrowserError,\n containerId: string,\n ): void {\n this.removeVenmoContainer(containerId);\n\n return this.onError(error);\n }\n\n private removeVenmoContainer(containerId: string): void {\n const buttonContainer = document.getElementById(containerId);\n\n if (buttonContainer) {\n buttonContainer.remove();\n }\n }\n\n private renderVenmoButton(\n braintreeVenmoCheckout: BraintreeVenmoCheckout,\n containerId: string,\n buyNowInitializeOptions?: BuyNowInitializeOptions,\n buttonStyles?: PaypalStyleOptions,\n ): void {\n const venmoButton = document.getElementById(containerId);\n const { color } = buttonStyles || {};\n\n if (!venmoButton) {\n throw new InvalidArgumentError(\n 'Unable to create wallet button without valid container ID.',\n );\n }\n\n venmoButton.setAttribute('aria-label', 'Venmo');\n Object.assign(venmoButton.style, getVenmoButtonStyle(buttonStyles || {}));\n\n venmoButton.addEventListener('click', async () => {\n venmoButton.setAttribute('disabled', 'true');\n\n const buyBowCart = await this.createBuyNowCart(buyNowInitializeOptions);\n\n if (braintreeVenmoCheckout.tokenize) {\n braintreeVenmoCheckout.tokenize(\n async (\n error: BraintreeError | undefined,\n payload: BraintreeTokenizePayload,\n ) => {\n venmoButton.removeAttribute('disabled');\n\n if (error) {\n this.onError(error);\n }\n\n await this.handlePostForm(payload, buyBowCart?.id);\n },\n );\n }\n });\n\n if (color === PaypalButtonStyleColorOption.BLUE) {\n venmoButton.addEventListener('mouseenter', () => {\n venmoButton.style.backgroundColor = venmoButtonStyleHover.backgroundColor;\n });\n\n venmoButton.addEventListener('mouseleave', () => {\n venmoButton.style.backgroundColor = getVenmoButtonStyle(\n buttonStyles || {},\n ).backgroundColor;\n });\n }\n }\n\n private async handlePostForm(\n payload: BraintreeTokenizePayload,\n buyNowCartId?: string,\n ): Promise<void> {\n const { deviceData } = await this.braintreeSdk.getDataCollectorOrThrow();\n const { nonce, details } = payload;\n\n this.formPoster.postForm('/checkout.php', {\n nonce,\n provider: 'braintreevenmo',\n payment_type: 'paypal',\n device_data: deviceData,\n action: 'set_external_checkout',\n billing_address: JSON.stringify(mapToLegacyBillingAddress(details)),\n shipping_address: JSON.stringify(mapToLegacyShippingAddress(details)),\n ...(buyNowCartId && { cart_id: buyNowCartId }),\n });\n }\n}\n","import { UnsupportedBrowserError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function isUnsupportedBrowserError(error: unknown): error is UnsupportedBrowserError {\n return error instanceof UnsupportedBrowserError;\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeScriptLoader,\n BraintreeSdk,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeVenmoButtonStrategy from './braintree-venmo-button-strategy';\n\nconst createBraintreeVenmoButtonStrategy: CheckoutButtonStrategyFactory<\n BraintreeVenmoButtonStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const scriptLoader = getScriptLoader();\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeScriptLoader = new BraintreeScriptLoader(\n scriptLoader,\n braintreeHostWindow,\n braintreeSDKVersionManager,\n );\n\n const braintreeSdk = new BraintreeSdk(braintreeScriptLoader);\n\n return new BraintreeVenmoButtonStrategy(\n paymentIntegrationService,\n createFormPoster(),\n braintreeSdk,\n );\n};\n\nexport default toResolvableModule(createBraintreeVenmoButtonStrategy, [{ id: 'braintreevenmo' }]);\n","import { BRAINTREE_SDK_DEFAULT_VERSION } from './braintree-sdk-verison';\nimport { SDKVersionManager } from './types';\n\nexport default class BraintreeHeadlessSDKVersionManager implements SDKVersionManager {\n getSDKVersion(): string {\n return BRAINTREE_SDK_DEFAULT_VERSION;\n }\n}\n","import { StandardError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n * Throw this error if the Braintree PayPal wallet flow fails to redirect the\n * shopper to the external checkout page.\n */\nexport default class BraintreePaypalWalletError extends StandardError {\n constructor(message?: string) {\n super(message || 'Failed to redirect to checkout page');\n\n this.name = 'BraintreePaypalWalletError';\n this.type = 'braintree_paypal_wallet';\n }\n}\n","import {\n PaymentMethodClientUnavailableError,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { WalletButtonIntegrationService } from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport BraintreePaypalWalletError from './braintree-paypal-wallet-error';\n\nimport {\n BraintreeError,\n BraintreeIntegrationService,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeTokenizePayload,\n isBraintreeError,\n PaypalAuthorizeData,\n} from './';\n\nexport default class BraintreePaypalWalletService {\n private braintreePaypalCheckout?: BraintreePaypalCheckout;\n\n constructor(\n private walletButtonIntegrationService: WalletButtonIntegrationService,\n private braintreeIntegrationService: BraintreeIntegrationService,\n ) {}\n\n /**\n *\n * Braintree SDK methods\n *\n */\n initialize(clientToken: string): void {\n this.braintreeIntegrationService.initialize(clientToken);\n }\n\n async loadPaypalCheckout(\n options: BraintreePaypalSdkCreatorConfig,\n containerId: string,\n onError?: (error: BraintreeError | StandardError) => void,\n ): Promise<BraintreePaypalCheckout> {\n this.braintreePaypalCheckout = await new Promise<BraintreePaypalCheckout>(\n (resolve, reject) => {\n void this.braintreeIntegrationService.getPaypalCheckout(\n options,\n resolve,\n (error: BraintreeError) => {\n this.removeElement(containerId);\n\n if (onError && isBraintreeError(error)) {\n onError(error);\n }\n\n reject(error);\n },\n );\n },\n );\n\n return this.braintreePaypalCheckout!;\n }\n\n getBraintreePaypalCheckoutOrThrow(): BraintreePaypalCheckout {\n if (!this.braintreePaypalCheckout) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.braintreePaypalCheckout;\n }\n\n async teardown(): Promise<void> {\n await this.braintreeIntegrationService.teardown();\n }\n\n /**\n *\n * Payment tokenizing and redirect methods\n *\n */\n async proxyTokenizationPayment(\n authorizeData: PaypalAuthorizeData,\n methodId: string,\n cartId: string,\n ): Promise<BraintreeTokenizePayload> {\n const braintreePaypalCheckout = this.getBraintreePaypalCheckoutOrThrow();\n\n const { deviceData } = await this.braintreeIntegrationService.getDataCollector({\n paypal: true,\n });\n\n const tokenizePayload = await braintreePaypalCheckout.tokenizePayment(authorizeData);\n const { details, nonce } = tokenizePayload;\n\n const billingAddress = this.braintreeIntegrationService.mapToLegacyBillingAddress(details);\n const shippingAddress =\n this.braintreeIntegrationService.mapToLegacyShippingAddress(details);\n\n const inputData = {\n paymentWalletData: {\n providerId: methodId,\n providerOrderId: nonce,\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 key: 'billing_address',\n value: encodeURIComponent(JSON.stringify(billingAddress)),\n },\n {\n key: 'shipping_address',\n value: encodeURIComponent(JSON.stringify(shippingAddress)),\n },\n ...(deviceData ? [{ key: 'device_data', value: deviceData }] : []),\n ],\n };\n\n const response = await this.walletButtonIntegrationService.getRedirectToCheckoutUrl(\n inputData,\n );\n\n const externalCheckoutUrl = response.body.redirectUrls?.externalCheckoutUrl;\n\n if (!externalCheckoutUrl) {\n throw new BraintreePaypalWalletError();\n }\n\n window.location.assign(externalCheckoutUrl);\n\n return tokenizePayload;\n }\n\n /**\n *\n * Utils methods\n *\n */\n removeElement(containerId?: string): void {\n this.braintreeIntegrationService.removeElement(containerId);\n }\n}\n","import {\n BraintreeError,\n BraintreeHostWindow,\n BraintreeInitializationData,\n BraintreePaypalSdkCreatorConfig,\n BraintreePaypalWalletService,\n isBraintreeError,\n PaypalAuthorizeData,\n PaypalButtonStyleColorOption,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentMethod,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport getValidButtonStyle from '../get-valid-button-style';\n\nimport BraintreePaypalWalletInitializeOptions, {\n WithBraintreePaypalWalletInitializeOptions,\n} from './braintree-paypal-wallet-initialize-options';\n\nexport default class BraintreePaypalWalletStrategy implements CheckoutButtonStrategy {\n constructor(\n private braintreePaypalWalletService: BraintreePaypalWalletService,\n private braintreeHostWindow: BraintreeHostWindow,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithBraintreePaypalWalletInitializeOptions,\n ): Promise<void> {\n const { braintreepaypal, 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 (!braintreepaypal) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.`,\n );\n }\n\n let parsedPaymentMethod: PaymentMethod<BraintreeInitializationData>;\n\n try {\n parsedPaymentMethod = JSON.parse(atob(braintreepaypal.initializationData));\n } catch (error) {\n throw new InvalidArgumentError(\"Failed to parse payment method 'initializationData'.\");\n }\n\n const { initializationData, config } = parsedPaymentMethod;\n\n if (!braintreepaypal.clientToken || !initializationData || !config) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const paypalCheckoutOptions: BraintreePaypalSdkCreatorConfig = {\n currency: braintreepaypal.currency.code,\n intent: initializationData.intent,\n isCreditEnabled: initializationData.isCreditEnabled,\n commit: false,\n };\n\n this.braintreePaypalWalletService.initialize(braintreepaypal.clientToken);\n\n await this.braintreePaypalWalletService.loadPaypalCheckout(\n paypalCheckoutOptions,\n containerId,\n braintreepaypal.onError,\n );\n\n this.renderButton(\n braintreepaypal,\n containerId,\n methodId,\n !!config.testMode,\n initializationData.intent,\n );\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreePaypalWalletService.teardown();\n }\n\n private renderButton(\n braintreepaypal: BraintreePaypalWalletInitializeOptions,\n containerId: string,\n methodId: string,\n testMode: boolean,\n intent?: BraintreeInitializationData['intent'],\n ): void {\n const { style, onEligibilityFailure } = braintreepaypal;\n const { paypal } = this.braintreeHostWindow;\n\n if (!paypal) {\n this.braintreePaypalWalletService.removeElement(containerId);\n\n return;\n }\n\n const fundingSources = [paypal.FUNDING.PAYPAL, paypal.FUNDING.PAYLATER];\n\n let hasRenderedButton = false;\n\n fundingSources.forEach((fundingSource) => {\n const buttonStyle =\n fundingSource === paypal.FUNDING.PAYLATER\n ? { ...getValidButtonStyle(style), color: PaypalButtonStyleColorOption.GOLD }\n : getValidButtonStyle(style);\n\n const paypalButtonRender = paypal.Buttons({\n env: testMode ? 'sandbox' : 'production',\n fundingSource,\n style: buttonStyle,\n createOrder: () => this.setupPayment(braintreepaypal, intent),\n onApprove: (authorizeData: PaypalAuthorizeData) =>\n this.tokenizePayment(\n authorizeData,\n methodId,\n braintreepaypal.cartId,\n braintreepaypal.onAuthorizeError,\n ),\n });\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n hasRenderedButton = true;\n }\n });\n\n if (\n !hasRenderedButton &&\n onEligibilityFailure &&\n typeof onEligibilityFailure === 'function'\n ) {\n onEligibilityFailure();\n }\n }\n\n private async setupPayment(\n braintreepaypal: BraintreePaypalWalletInitializeOptions,\n intent?: BraintreeInitializationData['intent'],\n ): Promise<string | void> {\n const { onPaymentError, amount, currency } = braintreepaypal;\n\n const braintreePaypalCheckout =\n this.braintreePaypalWalletService.getBraintreePaypalCheckoutOrThrow();\n\n try {\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n amount,\n currency: currency.code,\n offerCredit: false,\n intent,\n });\n } catch (error: unknown) {\n if (isBraintreeError(error) || error instanceof StandardError) {\n onPaymentError?.(error);\n }\n\n throw error;\n }\n }\n\n private async tokenizePayment(\n authorizeData: PaypalAuthorizeData,\n methodId: string,\n cartId: string,\n onError?: (error: BraintreeError | StandardError) => void,\n ): Promise<void> {\n try {\n await this.braintreePaypalWalletService.proxyTokenizationPayment(\n authorizeData,\n methodId,\n cartId,\n );\n } catch (error) {\n if (isBraintreeError(error) || error instanceof StandardError) {\n onError?.(error);\n }\n\n throw error;\n }\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHeadlessSDKVersionManager,\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreePaypalWalletService,\n BraintreeScriptLoader,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { toResolvableModule } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n WalletButtonIntegrationService,\n WalletPaymentButtonStrategyFactory,\n} from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport BraintreePaypalWalletStrategy from './braintree-paypal-wallet-strategy';\n\nconst createBraintreePaypalWalletStrategy: WalletPaymentButtonStrategyFactory<\n BraintreePaypalWalletStrategy\n> = (walletButtonIntegrationService: WalletButtonIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n new BraintreeHeadlessSDKVersionManager(),\n ),\n braintreeHostWindow,\n );\n\n return new BraintreePaypalWalletStrategy(\n new BraintreePaypalWalletService(\n walletButtonIntegrationService,\n braintreeIntegrationService,\n ),\n braintreeHostWindow,\n );\n};\n\nexport default toResolvableModule(createBraintreePaypalWalletStrategy, [{ id: 'braintreepaypal' }]);\n"],"names":["StandardError","Error","constructor","message","prototype","super","this","name","type","Object","setPrototypeOf","__proto__","captureStackTrace","stack","PaymentMethodClientUnavailableError","BraintreeEnv","BraintreeModuleName","BraintreeFormFieldType","BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION","BRAINTREE_SDK_DEFAULT_VERSION","BRAINTREE_SDK_STABLE_VERSION","BRAINTREE_SDK_SCRIPTS_INTEGRITY","Client","PaypalCheckout","Paypal","LocalPayment","DataCollector","UsBankAccount","GooglePayment","ThreeDSecure","VisaCheckout","Venmo","HostedFields","Fastlane","NotInitializedErrorType","TotalPriceStatusType","BraintreeOrderStatus","NonInstantLocalPaymentMethods","BraintreeFastlaneAuthenticationState","BraintreeErrorType","BraintreeErrorCode","BraintreeSupportedCardBrands","BraintreeScriptLoader","scriptLoader","braintreeHostWindow","braintreeSDKVersionManager","loadClient","loadBraintreeModuleOrThrow","loadFastlane","loadPaypalCheckout","loadPaypal","loadLocalPayment","loadDataCollector","loadUsBankAccount","loadGooglePayment","load3DS","loadVisaCheckout","loadVenmoCheckout","loadHostedFields","loadVisaCheckoutSdk","testMode","V","hash","loadScript","async","attributes","integrity","crossorigin","then","braintreeModuleName","fileName","module","getBraintreeModule","braintreeSdkVersion","getSDKVersion","scriptPath","getIntegrityValuesByModuleName","undefined","_a","braintree","moduleName","version","UnsupportedBrowserError","NotInitializedError","subtype","CustomerNotInitialized","PaymentNotInitialized","ShippingNotInitialized","SpamProtectionNotInitialized","getErrorMessage","isBraintreeError","error","Boolean","BraintreeSdk","braintreeScriptLoader","initialize","clientToken","setClientToken","deinitialize","teardownModule","dataCollector","getClient","client","getClientTokenOrThrow","clientCreator","create","authorization","getDataCollectorOrThrow","options","emptyDataCollector","deviceData","teardown","Promise","resolve","dataCollectorConfig","assign","kount","code","KountNotEnabled","getBraintreeGooglePayment","googlePayment","braintreeGooglePayment","all","getBraintreeThreeDS","threeDS","threeDSecure","getBraintreeLocalPayment","merchantAccountId","braintreeLocalPayment","localPaymentCreator","reject","getUsBankAccount","usBankAccount","getBraintreeVisaCheckout","visaCheckout","paypal","getVisaCheckoutSdk","visaCheckoutSDK","getVenmoCheckoutOrThrow","braintreeVenmo","venmoCheckout","venmoCheckoutConfig","allowDesktop","paymentMethodUsage","braintreeVenmoCheckout","isBrowserSupported","isExperimentEnabled","features","experimentName","fallbackValue","BraintreeSDKVersionManager","paymentIntegrationService","braintreeWindow","window","storeConfig","getState","getStoreConfig","checkoutSettings","getPreloadedSDKVersion","preloadedVersion","__WEBPACK_EXTERNAL_MODULE_lodash_find__","values","VERSION","toResolvableModule","resolveIds","InvalidArgumentError","MissingDataErrorType","MissingDataError","MissingBillingAddress","MissingCart","MissingConsignments","MissingCheckout","MissingCustomer","MissingCheckoutConfig","MissingOrderConfig","MissingOrder","MissingOrderId","MissingPayment","MissingPaymentToken","MissingPaymentMethod","MissingShippingAddress","missing_data_error_getErrorMessage","PaymentArgumentInvalidError","invalidFields","join","isVaultedInstrument","instrument","instrumentId","OrderFinalizationNotRequiredError","isHostedInstrumentLike","shouldSaveInstrument","shouldSetAsDefaultInstrument","PaymentMethodFailedError","isUsBankAccountInstrumentLike","BraintreeAchPaymentStrategy","braintreeSdk","methodId","braintreeach","getMandateText","loadPaymentMethod","paymentMethod","getPaymentMethodOrThrow","initializationData","handleBraintreeError","execute","orderRequest","payment","order","__rest","isSubmittingWithVaultingInstrument","paymentData","nonce","tokenizePaymentForVaultedInstrument","tokenizePayment","submitPaymentPayload","preparePaymentDataForVaultedInstrument","preparePaymentData","submitOrder","submitPayment","finalize","getUsBankAccountOrThrow","mandateText","tokenize","bankDetails","getBankDetails","state","config","isVaultingEnabled","routingNumber","accountNumber","deviceSessionId","formattedPayload","tokenized_bank_account","issuer","masked_account_number","substr","token","billingAddress","getBillingAddressOrThrow","ownershipType","toLowerCase","accountType","firstName","lastName","businessName","streetAddress","address1","extendedAddress","address2","locality","city","region","stateOrProvinceCode","postalCode","create_braintree_ach_payment_strategy","__WEBPACK_EXTERNAL_MODULE__bigcommerce_script_loader_875b3e8f_getScriptLoader__","create_braintree_sdk","id","PaymentInvalidFormError","details","paypalSdkPromise","PAYPAL_COMPONENTS","PaypalButtonStyleLayoutOption","PaypalButtonStyleSizeOption","PaypalButtonStyleColorOption","PaypalButtonStyleLabelOption","PaypalButtonStyleShapeOption","MessagingPlacements","BraintreeIntegrationService","overlay","dataCollectors","threeDSecureOptions","getBraintreeFastlane","cardId","isTestModeEnabled","styles","localStorage","setItem","braintreeFastlane","getSessionId","braintreeFastlaneCreator","defaultStyles","root","backgroundColorPrimary","getPaypal","braintreePaypal","braintree_integration_service_rest","newWindowFlow","__WEBPACK_EXTERNAL_MODULE__braintree_browser_detection_e7ac357c_supportsPopups__","show","onClick","focusWindow","enableShippingAddress","flow","useraction","response","remove","catch","getPaypalCheckout","onSuccess","onError","paypalCheckout","paypalCheckoutConfig","braintreePaypalCheckout","paypalSdkLoadConfig","currency","isCreditEnabled","components","toString","intent","commit","loadPayPalSDK","err","loadPayPalSDKOnce","getDataCollector","cacheKey","cached","getBraintreeEnv","isTestMode","Sandbox","Production","mapToBraintreeShippingAddressOverride","address","recipientName","line1","line2","countryCode","phone","mapToLegacyShippingAddress","email","shippingAddress","split","first_name","last_name","phone_number","address_line_1","address_line_2","country_code","postal_code","mapToLegacyBillingAddress","removeElement","elementId","element","document","getElementById","cartId","riskCorrelationId","default","get3DS","getVenmoCheckout","venmoConfig","verifyCard","amount","tokenizationPayload","tokenizeCard","challenge3DSVerification","creditCardInstrument","ccExpiry","ccNumber","ccName","isCreditCardInstrumentLike","errors","getErrorsRequiredFields","__WEBPACK_EXTERNAL_MODULE_lodash_isEmpty__","requestData","mapToCreditCard","creditCards","request","bin","present3DSChallenge","creditCard","data","cardholderName","number","cvv","ccCvv","expirationDate","month","year","validate","countryCodeAlpha2","countryName","country","endpoint","method","challengeRequested","additionalInformation","roundedAmount","toFixed","Number","onLookupComplete","_data","next","collectDeviceData","BraintreeMessages","render","containerId","placement","messagingContainer","cart","getCartOrThrow","paypalBNPLConfiguration","bannedId","PAYMENT","bannerConfiguration","find","status","CART","removeAttribute","Messages","cartAmount","buyerCountry","style","getPaypalMessagesStylesFromBNPLConfig","messagesStyles","color","layout","logo","position","ratio","text","size","Overlay","closeElement","mainElement","_createElements","_element","_closeElement","_mainElement","parentElement","_registerClick","body","appendChild","setTimeout","opacity","_unregisterClick","_removeAfterTransition","createElement","background","transitionDuration","hasCloseButton","innerHtml","classLayout","classClose","classOverlayText","overlayText","className","addClassLayout","innerText","getOverlayStyle","_addEventListener","addEventListener","_removeEventListener","removeEventListener","onClickClose","handleTransition","event","propertyName","DEFAULT_STYLES","backgroundColor","ROTATION_ANIMATION","LoadingIndicator","containerStyles","defineAnimation","container","buildContainer","indicator","buildIndicator","parentId","parent","visibility","hide","handleTransitionEnd","display","bottom","left","height","width","right","top","transition","setStyleAttribute","borderRadius","border","borderColor","margin","transform","transformStyle","animation","attrs","keys","forEach","k","setProperty","head","sheet","CSSStyleSheet","insertRule","LOADING_INDICATOR_STYLES","PaymentMethodCancelledError","is_braintree_error_isBraintreeError","BraintreePaypalPaymentStrategy","braintreeIntegrationService","braintreeMessages","loadingIndicator","braintreeOptions","braintreeButtonOptions","bannerContainerId","loadPaypalCheckoutInstance","braintree_paypal_payment_strategy_rest","useStoreCredit","isProviderError","paypalButtonRender","close","_resolve","handleError","braintreeTokenizePayload","grandTotal","getOutstandingBalance","storeProfile","storeLanguage","getPaymentMethod","hasOwnProperty","call","getShippingAddress","shippingAddressOverride","locale","offerCredit","shippingAddressEditable","sessionId","vaultPaymentInstrument","vault_payment_instrument","set_as_default_stored_instrument","device_info","paypal_account","paymentMethodId","shouldShowPayPalCreditBanner","renderPayPalMessages","renderPayPalButton","onPaymentError","submitForm","onRenderButton","getSmartButtonContainerId","loadingIndicatorContainer","fundingSource","FUNDING","PAYPAL","Buttons","env","onInit","_","actions","onInitButton","onValidationPassed","toggleLoadingIndicator","onValidate","createOrder","setupPayment","onApprove","authorizeData","braintree_paypal_payment_strategy_awaiter","tokenizePaymentOrThrow","onCancel","isEligible","customer","getCustomer","getCheckoutOrThrow","outstandingBalance","currencyCode","getStoreConfigOrThrow","addresses","createPayment","isBraintreePaypalProviderError","_c","_b","filter","e","provider_error","isLoading","create_braintree_paypal_payment_strategy","ContentType","content_type","SDK_VERSION_HEADERS","BraintreeRequestSender","requestSender","getOrderStatus","url","headers","Json","get","DEFAULT_RESPONSE","RequestError","PaymentMethodInvalidError","TimeoutError","BraintreeLocalMethodsPaymentStrategy","braintreeRequestSender","pollingInterval","maxPollingIntervalTime","isLPMsUpdateExperimentEnabled","pollingTimer","stopPolling","__WEBPACK_EXTERNAL_MODULE_lodash_noop__","isPollingEnabled","gatewayId","braintreelocalmethods","merchantId","isNonInstantPaymentMethod","payload","braintree_local_methods_payment_strategy_rest","executeWithNotInstantLPM","executeWithInstantLPM","basicPaymentData","getLPMsBasicPaymentData","isBraintreeRedirectError","redirectUrl","additional_action_required","redirect_url","location","replace","startPayment","getInstantLPMConfig","getInstantLPMCallback","billing","lineItems","isShippingRequired","physicalItems","length","checkoutUrl","links","checkoutLink","paymentType","fallback","buttonText","shippingAddressRequired","givenName","surname","onPaymentStart","start","braintree_local_methods_payment_strategy_awaiter","orderId","paymentId","order_id","isBraintreeOrderSavedResponse","order_id_saved_successfully","initializePollingMechanism","startPaymentError","payloadData","resetPollingMechanism","toUpperCase","resolvePromise","rejectPromise","timeout","clearTimeout","orderStatus","params","useMetadata","isOrderPending","Pending","isOrderApproved","Completed","isPollingError","Failed","deinitializePollingMechanism","reinitializeStrategy","create_braintree_local_methods_payment_strategy","__WEBPACK_EXTERNAL_MODULE__bigcommerce_request_sender_01d1f546_createRequestSender__","gateway","isInvalidStyleOption","styleOption","getFastlaneStyles","styleSettings","uiStyles","fastlaneStyles","__WEBPACK_EXTERNAL_MODULE_lodash_omitBy__","input","toggle","textBody","textCaption","caption","branding","cleanUpFastlaneStyles","fastlaneRootSettingsBackgroundColor","errorColor","fastlaneRootSettingsErrorColor","fontFamily","fastlaneRootSettingsFontFamily","fontSizeBase","fastlaneRootSettingsFontSize","_d","padding","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","fontSize","fastlaneTextBodySettingsFontSize","_t","_s","fastlaneTextCaptionSettingsColor","_v","_u","fastlaneTextCaptionSettingsFontSize","_x","_w","fastlaneBrandingSettings","mergeFastlaneStyles","isBraintreeAcceleratedCheckoutCustomer","UntrustedShippingCardVerificationType","BraintreeFastlanePaymentStrategy","braintreeFastlaneUtils","braintreefastlane","onChange","isFastlaneStylingEnabled","isThreeDSExperimentEnabled","is3DSEnabled","is3dsEnabled","initializeBraintreeFastlaneOrThrow","shouldRunAuthenticationFlow","runPayPalAuthenticationFlowOrThrow","initializeCardComponent","renderBraintreeCardComponent","handleBraintreeStoredInstrumentChange","braintree_fastlane_payment_strategy_rest","paymentPayload","preparePaymentPayload","removeSessionIdFromCookies","braintreeCardComponent","fullName","cardComponentOptions","fields","prefill","enabled","phoneNumber","paypalPaymentComponent","getBraintreeFastlaneComponentOrThrow","getBraintreeCardComponentOrThrow","paypalInstrument","getPayPalInstruments","getDeviceSessionId","threeDSToken","bigpayToken","iin","paypal_fastlane_token","getPaymentToken","paymentToken","mapToPayPalAddress","binGuest","paymentSource","card","binDetails","getOrderOrThrow","orderAmount","on","verifyError","stateOrProvince","getCustomerOrThrow","paymentProviderCustomer","getPaymentProviderCustomer","braintreePaymentProviderCustomer","paypalFastlaneSessionId","getSessionIdFromCookies","isGuest","authenticationState","CANCELED","getPaymentProviderCustomerOrThrow","instruments","paypalAxoSdk","getBraintreeFastlaneOrThrow","selectionChanged","selectedCard","profile","showCardSelector","braintreeFastlaneCustomer","selectedInstruments","mapPayPalToBcInstrument","updatePaymentProviderCustomer","CookieStorage","cookieKey","encodeURIComponent","cookie","value","firstIndex","indexOf","lastIndex","decodeURIComponent","substring","set","secure","cookieText","expires","path","domain","toUTCString","now","Date","minutes","setTime","getTime","BraintreeFastlaneUtils","getCart","FastlaneCardComponent","shouldSetShippingOption","getMethodIdOrThrow","lookupCustomerByEmail","triggerAuthenticationFlow","identity","getBillingAddress","isFastlaneShippingOptionAutoSelectEnabled","customerEmail","customerContextId","UNRECOGNIZED","saveSessionIdToCookies","profileData","shippingAddresses","mapPayPalToBcAddress","paypalBillingAddress","getPayPalBillingAddresses","billingAddresses","mergeShippingAndBillingAddresses","updateBillingAddress","digitalItems","digitalItemBilling","updateShippingAddress","setShippingOption","setDate","getDate","map","brand","expiry","lastDigits","expiryYear","expiryMonth","defaultInstrument","last4","provider","trustedShippingAddress","untrustedShippingCardVerificationMode","PAN","phones","countries","getCountries","getCountryNameByCountryCode","matchedCountry","company","customFields","given_name","__WEBPACK_EXTERNAL_MODULE_lodash_isEqual__","normalizeAddress","__WEBPACK_EXTERNAL_MODULE_lodash_omit__","filteredBillingAddresses","some","availableShippingOptions","getConsignments","recommendedShippingOption","option","isRecommended","selectedOption","selectShippingOption","create_braintree_fastlane_payment_strategy","BraintreeVisaCheckoutPaymentStrategy","formPoster","braintreevisacheckout","visaCheckoutOptions","checkout","onPaymentSelect","braintreeVisaCheckout","visaCheckoutSdk","initOptions","createInitOptions","settings","shipping","collectShipping","paymentRequest","subtotal","String","init","paymentSuccessPayload","loadCheckout","braintree_visa_checkout_payment_strategy_rest","mapToVisaCheckoutAddress","postForm","userData","cardInformation","userEmail","payment_type","action","device_data","card_information","JSON","stringify","cardType","lastTwo","billing_address","getAddress","shipping_address","create_braintree_visa_checkout_payment_strategy","hostWindow","__WEBPACK_EXTERNAL_MODULE__bigcommerce_form_poster_1cd9ef62_createFormPoster__","BraintreeVenmoPaymentStrategy","venmoOptions","braintreevenmo","initializeBraintreeVenmo","braintree_venmo_payment_strategy_rest","isBraintreeVenmoWebFallbackSupport","mobileWebFallBack","tokenizeResult","braintreeVenmoTokenize","create_braintree_venmo_payment_strategy","isBraintreeFormFieldsMap","isBraintreeHostedFormError","invalidFieldKeys","Array","isArray","every","key","BraintreeHostedFormType","BraintreeHostedForm","isInitializedHostedForm","handleBlur","formOptions","onBlur","fieldType","mapFieldType","emittedBy","mapErrors","handleFocus","onFocus","handleCardTypeChange","cards","onCardTypeChange","handleInputSubmitRequest","onEnter","handleValidityChange","isValid","isValidForm","mapValidationErrors","unsupportedCardBrands","CreditCard","StoredCardVerification","mapFieldOptions","cardFields","createHostedFields","mapStyleOptions","isInitialized","mapBillingAddress","__WEBPACK_EXTERNAL_MODULE_lodash_isNil__","mapTokenizeError","tokenizeForStoredCardVerification","hostedFields","hostedFieldsOptions","preventCursorJumps","supportedCardBrands","cardBrand","includes","is_braintree_supported_card_brand","cardNumber","placeholder","internalLabel","accessibilityLabel","cardExpiry","cardCode","cardName","cardNumberVerification","cardCodeVerification","mapStyles","fontWeight","focus","CardNumberVerification","CardNumber","CardExpiry","CardCodeVerification","CardCode","CardName","entries","isValidParam","isEmpty","isPotentiallyValid","reduce","result","fieldKey","createInvalidError","isStoredCard","createRequiredError","formFields","BraintreeCreditCardPaymentStrategy","braintreeHostedForm","isHostedPaymentFormEnabled","form","isHostedFormInitialized","shouldInitializeBraintreeFastlane","braintree_credit_card_payment_strategy_rest","prepareHostedPaymentData","processAdditionalAction","isPaymentMethodInitialized","startsWith","commonPaymentData","isSubmittingWithStoredCard","shouldPerform3DSVerification","verifyCardWithHostedForm","prepareAdditionalActionPaymentData","is_request_error","__WEBPACK_EXTERNAL_MODULE_lodash_some__","payer_auth_request","storedCreditCardNonce","three_ds_result","isBraintreePaymentRequest3DSError","getCardInstrumentOrThrow","newPaymentData","isHostedFormEnabled","braintreeCustomer","isAcceleratedCheckoutEnabled","create_braintree_credit_card_payment_strategy","BraintreePaypalCustomerStrategy","braintreepaypal","paymentButtonStyles","checkoutTopButtonStyles","paypalCheckoutOptions","signIn","credentials","signInCustomer","signOut","signOutCustomer","executePaymentMethodCheckout","continueWithCheckoutCallback","buttonStyles","loadDefaultCheckout","tokenizePayload","buttonContainerId","onErrorCallback","create_braintree_paypal_customer_strategy","BraintreePaypalCreditCustomerStrategy","braintreepaypalcredit","hasRenderedSmartButton","PAYLATER","CREDIT","create_braintree_paypal_credit_customer_strategy","BraintreeFastlaneCustomerStrategy","getValidPaymentMethodOrThrow","paypalFastlaneStylesSettings","checkoutPaymentMethodExecuted","primaryMethodId","shouldRunAcceleratedCheckout","validPaymentMethodId","create_braintree_fastlane_customer_strategy","NotImplementedError","BraintreeVisaCheckoutCustomerStrategy","buttonClassName","visaCheckoutInstance","signInButton","createSignInButton","buttonClass","querySelector","insertVisaCheckoutButton","visaCheckoutButton","flexDirection","innerHTML","create_braintree_visa_checkout_customer_strategy","BuyNowCartCreationError","getValidButtonStyle","fundingicons","shape","tagline","validStyles","getValidHeight","currentHeight","isNaN","BraintreePaypalButtonStrategy","buyNowInitializeOptions","shouldProcessPayment","onAuthorizeError","onEligibilityFailure","buyNowCart","getBuyNowCartRequestBody","createBuyNowCart","buyNowCartId","cart_id","buyNowCardRequestBody","create_braintree_paypal_button_strategy","BraintreePaypalCreditButtonStrategy","buttonStyle","label","create_braintree_paypal_credit_button_strategy","BraintreeVisaCheckoutButtonStrategy","braintree_visa_checkout_button_strategy_awaiter","paymentSuccess","toVisaCheckoutAddress","alignItems","create_braintree_visa_checkout_button_strategy","getVenmoButtonStyle","c","WHITE","backgroundPosition","backgroundSize","backgroundImage","BLUE","backgroundRepeat","cursor","minHeight","minWidth","BraintreeVenmoButtonStrategy","cartButtonStyles","renderVenmoButton","isUnsupportedBrowserError","handleInitializationVenmoError","cartRequestBody","removeVenmoContainer","buttonContainer","venmoButton","setAttribute","braintree_venmo_button_strategy_awaiter","buyBowCart","handlePostForm","create_braintree_venmo_button_strategy","BraintreeHeadlessSDKVersionManager","BraintreePaypalWalletError","BraintreePaypalWalletService","walletButtonIntegrationService","getBraintreePaypalCheckoutOrThrow","proxyTokenizationPayment","inputData","paymentWalletData","providerId","providerOrderId","cartEntityId","queryParams","externalCheckoutUrl","getRedirectToCheckoutUrl","redirectUrls","BraintreePaypalWalletStrategy","braintreePaypalWalletService","parsedPaymentMethod","parse","atob","renderButton","fundingSources","hasRenderedButton","GOLD","create_braintree_paypal_wallet_strategy"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"integrations/braintree.js","mappings":"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","sources":["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/braintree-utils/src/braintree.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-sdk-verison.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-sdk-scripts-integrity.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/not-initialized-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/types.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-script-loader.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/isManageableBraintreeSDKVersion.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/unsupported-browser-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/utils/is-braintree-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-sdk.ts","webpack://@bigcommerce/checkout-sdk/./packages/utility/src/is-experiment-enabled/is-experiment-enabled.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-sdk-version-manager.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/to-resolvable-module.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/missing-data-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/payment/is-vaulted-instrument.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/errors/payment-method-failed-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/is-us-bank-account-instrument-like.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-ach/braintree-ach-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-ach/create-braintree-ach-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/create-braintree-sdk.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-invalid-form-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/load-paypal-sdk-once.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/paypal.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-integration-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/utils/is-credit-card-instrument-like.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-messages.ts","webpack://@bigcommerce/checkout-sdk/./packages/ui/src/overlay/overlay.ts","webpack://@bigcommerce/checkout-sdk/./packages/ui/src/overlay/overlay-style.ts","webpack://@bigcommerce/checkout-sdk/./packages/ui/src/loading-indicator/loading-indicator.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal-constants.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/payment-method-cancelled-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/is-braintree-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/map-to-braintree-shipping-address-override.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal/braintree-paypal-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/is-braintree-paypal-provider-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal/create-braintree-paypal-payment-strategy.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/braintree-integration/src/braintree-request-sender.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/errors/request-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/timeout-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-local-payment-methods/braintree-local-methods-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-local-payment-methods/create-braintree-local-methods-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/utils/get-fastlane-styles.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/utils/is-braintree-accelerated-checkout-customer.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/payment/instrument.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-fastlane/braintree-fastlane-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/storage/src/cookie-storage.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-fastlane/braintree-fastlane-utils.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-fastlane/create-braintree-fastlane-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-visa-checkout/braintree-visa-checkout-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-visa-checkout/create-braintree-visa-checkout-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-venmo/braintree-venmo-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-venmo/create-braintree-venmo-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/utils/is-braintree-form-fields-map.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/utils/is-braintree-hosted-form-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-hosted-form/braintree-hosted-form.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/utils/is-braintree-supported-card-brand.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-credit-card/braintree-credit-card-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/is-request-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/utils/is-braintree-payment-request-3ds-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-credit-card/create-braintree-credit-card-payment-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal/braintree-paypal-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/checkout-buttons/default-checkout-button-height.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal/create-braintree-paypal-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal-credit/braintree-paypal-credit-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal-credit/create-braintree-paypal-credit-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-fastlane/braintree-fastlane-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-fastlane/create-braintree-fastlane-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/not-implemented-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-visa-checkout/braintree-visa-checkout-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-visa-checkout/create-braintree-visa-checkout-customer-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/errors/buy-now-cart-creation-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/get-valid-button-style.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal/braintree-paypal-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal/create-braintree-paypal-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal-credit/braintree-paypal-credit-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal-credit/create-braintree-paypal-credit-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-visa-checkout/braintree-visa-checkout-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-visa-checkout/create-braintree-visa-checkout-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/map-to-legacy-billing-address.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/map-to-legacy-shipping-address.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-venmo/braintree-venmo-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/isUnsupportedBrowserError.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-venmo/create-braintree-venmo-button-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-headless-sdk-version-manager.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-paypal-wallet-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/braintree-paypal-wallet-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal/braintree-paypal-wallet-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal/create-braintree-paypal-wallet-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal-credit/braintree-paypal-credit-wallet-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-paypal-credit/create-braintree-paypal-credit-wallet-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-utils/src/get-braintree-venmo-button-style.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-venmo/braintree-venmo-wallet-strategy.ts","webpack://@bigcommerce/checkout-sdk/./packages/braintree-integration/src/braintree-venmo/create-braintree-venmo-wallet-strategy.ts"],"sourcesContent":["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 { Omit } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n PaypalAuthorizeData,\n PaypalButtonOptions,\n PaypalButtonRender,\n PaypalSDK,\n PaypalStyleOptions,\n} from './paypal';\nimport {\n BraintreeClientCreator,\n BraintreeDataCollectorCreator,\n BraintreeError,\n BraintreeFastlaneCreator,\n BraintreeGooglePaymentCreator,\n BraintreeHostedFieldsTokenizePayload,\n BraintreeModule,\n BraintreeModuleCreator,\n BraintreeModuleCreatorConfig,\n BraintreeThreeDSecureCreator,\n BraintreeTokenizationDetails,\n BraintreeUsBankAccountCreator,\n BraintreeWindow,\n FastlaneStylesSettings,\n VisaCheckoutSDK,\n} from './types';\nimport {\n VisaCheckoutInitOptions,\n VisaCheckoutPaymentSuccessPayload,\n VisaCheckoutTokenizedPayload,\n} from './visacheckout';\n\n/**\n *\n * Constants\n *\n */\nexport enum BraintreeEnv {\n Sandbox = 'sandbox',\n Production = 'production',\n}\n\n/**\n *\n * Common\n *\n */\nexport enum BraintreeModuleName {\n Client = 'client',\n DataCollector = 'dataCollector',\n Fastlane = 'fastlane',\n GooglePayment = 'googlePayment',\n HostedFields = 'hostedFields',\n LocalPayment = 'localPayment',\n Paypal = 'paypal',\n PaypalCheckout = 'paypalCheckout',\n ThreeDSecure = 'threeDSecure',\n UsBankAccount = 'usBankAccount',\n Venmo = 'venmo',\n VisaCheckout = 'visaCheckout',\n}\n\nexport type BraintreeModuleCreators =\n | BraintreeClientCreator\n | BraintreeFastlaneCreator\n | BraintreeDataCollectorCreator\n | BraintreeGooglePaymentCreator\n | BraintreeHostedFieldsCreator\n | BraintreePaypalCreator\n | BraintreePaypalCheckoutCreator\n | BraintreeThreeDSecureCreator\n | BraintreeVenmoCheckoutCreator\n | BraintreeVisaCheckoutCreator\n | BraintreeUsBankAccountCreator\n | BraintreeLocalPaymentCreator;\n\n// TODO: rename to BraintreeSdkModules\nexport interface BraintreeSDK {\n [BraintreeModuleName.Client]?: BraintreeClientCreator;\n [BraintreeModuleName.Fastlane]?: BraintreeFastlaneCreator;\n [BraintreeModuleName.DataCollector]?: BraintreeDataCollectorCreator;\n [BraintreeModuleName.GooglePayment]?: BraintreeGooglePaymentCreator;\n [BraintreeModuleName.HostedFields]?: BraintreeHostedFieldsCreator;\n [BraintreeModuleName.Paypal]?: BraintreePaypalCreator;\n [BraintreeModuleName.PaypalCheckout]?: BraintreePaypalCheckoutCreator;\n [BraintreeModuleName.ThreeDSecure]?: BraintreeThreeDSecureCreator;\n [BraintreeModuleName.Venmo]?: BraintreeVenmoCheckoutCreator;\n [BraintreeModuleName.VisaCheckout]?: BraintreeVisaCheckoutCreator;\n [BraintreeModuleName.UsBankAccount]?: BraintreeUsBankAccountCreator;\n [BraintreeModuleName.LocalPayment]?: BraintreeLocalPaymentCreator;\n}\n\nexport type BraintreeLocalPaymentCreator = BraintreeModuleCreator<\n BraintreeLocalPayment,\n BraintreeLocalPaymentCreateConfig,\n BraintreeError | undefined\n>;\n\nexport interface BraintreeLocalPaymentCreateConfig extends BraintreeModuleCreatorConfig {\n merchantAccountId: string;\n}\n\nexport interface BraintreeInitializationData {\n clientToken: string;\n enableCheckoutPaywallBanner?: boolean;\n intent?: 'authorize' | 'order' | 'sale';\n isCreditEnabled?: boolean;\n isAcceleratedCheckoutEnabled?: boolean;\n isFastlaneStylingEnabled?: boolean;\n isFastlaneEnabled?: boolean;\n isFastlaneShippingOptionAutoSelectEnabled?: boolean;\n fastlaneStyles?: FastlaneStylesSettings;\n isBraintreeAnalyticsV2Enabled?: boolean;\n shouldRunAcceleratedCheckout?: boolean; // TODO: only for BT AXO A/B testing purposes, hence should be removed after testing\n paymentButtonStyles?: Record<string, PaypalStyleOptions>;\n paypalBNPLConfiguration?: PayPalBNPLConfigurationItem[] | null;\n nonce?: string;\n}\n\nexport interface BraintreePaypalRequest {\n amount: string | number;\n billingAgreementDescription?: string;\n currency?: string;\n displayName?: string;\n enableShippingAddress: true;\n flow: 'checkout' | 'vault';\n intent?: 'authorize' | 'order' | 'sale';\n landingPageType?: 'login' | 'billing';\n locale?: string;\n offerCredit?: boolean;\n shippingAddressEditable?: boolean;\n shippingAddressOverride?: BraintreeShippingAddressOverride;\n useraction?: 'commit';\n}\n\nexport interface BraintreeShippingAddressOverride {\n line1: string;\n line2?: string;\n city: string;\n state: string;\n postalCode: string;\n countryCode: string;\n phone?: string;\n recipientName?: string;\n}\n\nexport interface BraintreeTokenizePayload {\n nonce: string;\n type: 'PaypalAccount' | 'VenmoAccount';\n details: BraintreeTokenizationDetails;\n creditFinancingOffered?: {\n totalCost: {\n value: string;\n currency: string;\n };\n term: number;\n monthlyPayment: {\n value: string;\n currency: string;\n };\n totalInsterest: {\n value: string;\n currency: string;\n };\n payerAcceptance: boolean;\n cartAmountImmutable: boolean;\n };\n}\n\nexport type BraintreeFormErrorData = Omit<BraintreeFormFieldState, 'isFocused'>;\n\nexport type BraintreeFormErrorDataKeys =\n | 'number'\n | 'expirationDate'\n | 'expirationMonth'\n | 'expirationYear'\n | 'cvv'\n | 'postalCode';\n\nexport type BraintreeFormErrorsData = Partial<\n Record<BraintreeFormErrorDataKeys, BraintreeFormErrorData>\n>;\n\n/**\n *\n * Braintree Hosted Fields\n *\n */\nexport type BraintreeHostedFieldsCreator = BraintreeModuleCreator<\n BraintreeHostedFields,\n BraintreeHostedFieldsCreatorConfig\n>;\n\nexport interface BraintreeHostedFields {\n getState(): BraintreeHostedFieldsState;\n teardown(): Promise<void>;\n tokenize(\n options?: BraintreeHostedFieldsTokenizeOptions,\n ): Promise<BraintreeHostedFieldsTokenizePayload>;\n on(eventName: string, callback: (event: BraintreeHostedFieldsState) => void): void;\n}\n\nexport interface BraintreeHostedFieldsCreatorConfig extends BraintreeModuleCreatorConfig {\n fields: {\n number?: BraintreeHostedFieldOption;\n expirationDate?: BraintreeHostedFieldOption;\n expirationMonth?: BraintreeHostedFieldOption;\n expirationYear?: BraintreeHostedFieldOption;\n cvv?: BraintreeHostedFieldOption;\n postalCode?: BraintreeHostedFieldOption;\n cardholderName?: BraintreeHostedFieldOption;\n };\n styles?: {\n input?: { [key: string]: string };\n '.invalid'?: { [key: string]: string };\n '.valid'?: { [key: string]: string };\n ':focus'?: { [key: string]: string };\n };\n preventCursorJumps?: boolean;\n}\n\nexport interface BraintreeHostedFieldOption {\n container: string | HTMLElement;\n placeholder?: string;\n type?: string;\n formatInput?: boolean;\n maskInput?: boolean | { character?: string; showLastFour?: string };\n select?: boolean | { options?: string[] };\n maxCardLength?: number;\n maxlength?: number;\n minlength?: number;\n prefill?: string;\n rejectUnsupportedCards?: boolean;\n supportedCardBrands?: { [key: string]: boolean };\n}\n\nexport interface BraintreeHostedFieldsState {\n cards: BraintreeHostedFieldsCard[];\n emittedBy: string;\n fields: {\n number?: BraintreeHostedFieldsFieldData;\n expirationDate?: BraintreeHostedFieldsFieldData;\n expirationMonth?: BraintreeHostedFieldsFieldData;\n expirationYear?: BraintreeHostedFieldsFieldData;\n cvv?: BraintreeHostedFieldsFieldData;\n postalCode?: BraintreeHostedFieldsFieldData;\n };\n}\n\nexport interface BraintreeHostedFieldsCard {\n type: string;\n niceType: string;\n code: { name: string; size: number };\n}\n\nexport interface BraintreeHostedFieldsFieldData {\n container: HTMLElement;\n isFocused: boolean;\n isEmpty: boolean;\n isPotentiallyValid: boolean;\n isValid: boolean;\n}\n\nexport interface BraintreeHostedFieldsTokenizeOptions {\n vault?: boolean;\n fieldsToTokenize?: string[];\n cardholderName?: string;\n billingAddress?: BraintreeBillingAddressRequestData;\n}\n\nexport interface BraintreeBillingAddressRequestData {\n postalCode?: string;\n firstName?: string;\n lastName?: string;\n company?: string;\n streetAddress?: string;\n extendedAddress?: string;\n locality?: string;\n region?: string;\n countryCodeNumeric?: string;\n countryCodeAlpha2?: string;\n countryCodeAlpha3?: string;\n countryName?: string;\n}\n\nexport interface BraintreeHostedFormError extends BraintreeError {\n details?: {\n invalidFieldKeys?: string[];\n };\n}\n\nexport interface BraintreeFormFieldState {\n isFocused: boolean;\n isEmpty: boolean;\n isPotentiallyValid: boolean;\n isValid: boolean;\n}\n\nexport interface TokenizationPayload {\n nonce: string;\n bin: string;\n}\n\n/**\n *\n * Braintree PayPal\n *\n */\nexport type BraintreePaypalCreator = BraintreeModuleCreator<BraintreePaypal>;\n\nexport interface BraintreePaypal {\n closeWindow(): void;\n focusWindow(): void;\n tokenize(options: BraintreePaypalRequest): Promise<BraintreeTokenizePayload>;\n Buttons?(options: PaypalButtonOptions): PaypalButtonRender;\n}\n\nexport interface BraintreeFormOptions {\n fields: BraintreeFormFieldsMap | BraintreeStoredCardFieldsMap;\n styles?: BraintreeFormFieldStylesMap;\n onBlur?(data: BraintreeFormFieldBlurEventData): void;\n onCardTypeChange?(data: BraintreeFormFieldCardTypeChangeEventData): void;\n onFocus?(data: BraintreeFormFieldFocusEventData): void;\n onValidate?(data: BraintreeFormFieldValidateEventData): void;\n onEnter?(data: BraintreeFormFieldEnterEventData): void;\n}\n\nexport enum BraintreeFormFieldType {\n CardCode = 'cardCode',\n CardCodeVerification = 'cardCodeVerification',\n CardExpiry = 'cardExpiry',\n CardName = 'cardName',\n CardNumber = 'cardNumber',\n CardNumberVerification = 'cardNumberVerification',\n}\n\nexport interface BraintreeFormFieldsMap {\n [BraintreeFormFieldType.CardCode]?: BraintreeFormFieldOptions;\n [BraintreeFormFieldType.CardExpiry]: BraintreeFormFieldOptions;\n [BraintreeFormFieldType.CardName]: BraintreeFormFieldOptions;\n [BraintreeFormFieldType.CardNumber]: BraintreeFormFieldOptions;\n}\n\nexport interface BraintreeStoredCardFieldsMap {\n [BraintreeFormFieldType.CardCodeVerification]?: BraintreeStoredCardFieldOptions;\n [BraintreeFormFieldType.CardNumberVerification]?: BraintreeStoredCardFieldOptions;\n}\n\nexport interface BraintreeFormFieldOptions {\n accessibilityLabel?: string;\n containerId: string;\n placeholder?: string;\n}\n\nexport interface BraintreeStoredCardFieldOptions extends BraintreeFormFieldOptions {\n instrumentId: string;\n}\n\nexport interface BraintreeFormFieldStylesMap {\n default?: BraintreeFormFieldStyles;\n error?: BraintreeFormFieldStyles;\n focus?: BraintreeFormFieldStyles;\n}\n\nexport type BraintreeFormFieldStyles = Partial<\n Pick<CSSStyleDeclaration, 'color' | 'fontFamily' | 'fontSize' | 'fontWeight'>\n>;\n\nexport interface BraintreeFormFieldKeyboardEventData {\n fieldType: string;\n errors?: BraintreeFormErrorsData;\n}\n\nexport type BraintreeFormFieldBlurEventData = BraintreeFormFieldKeyboardEventData;\nexport type BraintreeFormFieldEnterEventData = BraintreeFormFieldKeyboardEventData;\nexport type BraintreeFormFieldFocusEventData = BraintreeFormFieldKeyboardEventData;\n\nexport interface BraintreeFormFieldCardTypeChangeEventData {\n cardType?: string;\n}\n\nexport interface BraintreeFormFieldValidateEventData {\n errors: {\n [BraintreeFormFieldType.CardCode]?: BraintreeFormFieldValidateErrorData[];\n [BraintreeFormFieldType.CardExpiry]?: BraintreeFormFieldValidateErrorData[];\n [BraintreeFormFieldType.CardName]?: BraintreeFormFieldValidateErrorData[];\n [BraintreeFormFieldType.CardNumber]?: BraintreeFormFieldValidateErrorData[];\n [BraintreeFormFieldType.CardCodeVerification]?: BraintreeFormFieldValidateErrorData[];\n [BraintreeFormFieldType.CardNumberVerification]?: BraintreeFormFieldValidateErrorData[];\n };\n isValid: boolean;\n}\n\nexport interface BraintreeFormFieldValidateErrorData {\n fieldType: string;\n message: string;\n type: string;\n}\n\n/**\n *\n * Braintree PayPal Checkout\n *\n */\nexport type BraintreePaypalCheckoutCreator = BraintreeModuleCreator<BraintreePaypalCheckout>;\n\nexport interface BraintreePaypalCheckout {\n loadPayPalSDK(\n config: BraintreePaypalSdkCreatorConfig,\n callback: (err: null | undefined | BraintreeError) => void,\n ): void;\n createPayment(options: BraintreePaypalRequest): Promise<string>;\n teardown(): Promise<void>;\n tokenizePayment(options: PaypalAuthorizeData): Promise<BraintreeTokenizePayload>;\n}\n\nexport interface BraintreePaypalSdkCreatorConfig {\n components?: string;\n currency?: string;\n intent?: string;\n isCreditEnabled?: boolean;\n commit?: boolean;\n}\n\n/**\n *\n * Braintree Venmo\n *\n */\nexport type BraintreeVenmoCheckoutCreator = BraintreeModuleCreator<\n BraintreeVenmoCheckout,\n BraintreeVenmoCreatorConfig\n>;\n\nexport interface BraintreeVenmoCheckout extends BraintreeModule {\n tokenize(callback: (error: BraintreeError, payload: BraintreeTokenizePayload) => unknown): void;\n isBrowserSupported(): boolean;\n}\n\nexport interface BraintreeVenmoCreatorConfig extends BraintreeModuleCreatorConfig {\n allowDesktop?: boolean;\n paymentMethodUsage?: string;\n}\n\n/**\n *\n * Braintree Visa Checkout\n *\n */\nexport type BraintreeVisaCheckoutCreator = BraintreeModuleCreator<BraintreeVisaCheckout>;\n\nexport interface BraintreeVisaCheckout extends BraintreeModule {\n tokenize(payment: VisaCheckoutPaymentSuccessPayload): Promise<VisaCheckoutTokenizedPayload>;\n createInitOptions(options: Partial<VisaCheckoutInitOptions>): VisaCheckoutInitOptions;\n}\n\n/**\n *\n * Braintree BNPL Configurator related types\n *\n */\nexport interface PayPalBNPLConfigurationItem {\n id: string;\n name: string;\n status: boolean;\n styles: Record<string, string>;\n}\n\n/**\n *\n * Braintree Local Methods\n *\n */\nexport interface BraintreeLocalPaymentConfig {\n paymentType: string;\n amount: number;\n fallback: {\n url: string;\n buttonText: string;\n };\n currencyCode: string;\n shippingAddressRequired: boolean;\n email: string;\n givenName: string;\n surname: string;\n address: {\n countryCode: string;\n };\n onPaymentStart(data: BraintreeLPMPaymentStartData, start: () => Promise<void>): Promise<void>;\n}\n\nexport interface BraintreeLPMStartPaymentError {\n code: string;\n}\n\nexport interface BraintreeLPMPaymentStartData {\n paymentId: string;\n}\n\nexport interface BraintreeLocalPaymentsPayload {\n nonce: string;\n}\n\nexport interface BraintreeLocalPayment extends BraintreeModule {\n startPayment(\n config: BraintreeLocalPaymentConfig,\n callback: (\n startPaymentError: BraintreeLPMStartPaymentError | undefined,\n payload: BraintreeLocalPaymentsPayload,\n ) => Promise<void>,\n ): void;\n}\n\n/**\n *\n * Other\n *\n */\nexport interface BraintreeHostWindow extends BraintreeWindow {\n braintree?: BraintreeSDK;\n paypal?: PaypalSDK;\n V?: VisaCheckoutSDK;\n}\n","export const BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION = '3.128.0';\nexport const BRAINTREE_SDK_DEFAULT_VERSION = '3.123.2';\nexport const BRAINTREE_SDK_STABLE_VERSION = '3.106.0';\n","import { BraintreeModuleName } from './braintree';\nimport {\n BRAINTREE_SDK_DEFAULT_VERSION,\n BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n BRAINTREE_SDK_STABLE_VERSION,\n} from './braintree-sdk-verison';\n\nexport const BRAINTREE_SDK_SCRIPTS_INTEGRITY = {\n [BRAINTREE_SDK_STABLE_VERSION]: {\n [BraintreeModuleName.Client]:\n 'sha384-26BXDNnJI23JYRyFBj4xe4sVNrUSSiSSu11kxVXNM/vEPONm4LuL00w6ZaTgQewt',\n [BraintreeModuleName.PaypalCheckout]:\n 'sha384-B+vzbZwnQtzWBthpkT4TXKUibO65tyeK7eCxSvpblgprTep2+IAXB2Cxxjrn710O',\n [BraintreeModuleName.Paypal]:\n 'sha384-uyAGL1/3+XJAHnGoNy4eCoXdzJ4f7Ilzp+6w9PNnEjs6DCCz9WMyJjMN1gzc78U+',\n [BraintreeModuleName.LocalPayment]:\n 'sha384-LIvOEMkIVEwVuYBdVOQc1AC5YbGGlwyfUheS0ACK218D2STuVYQlZ4FyEPowAEfT',\n [BraintreeModuleName.DataCollector]:\n 'sha384-1bo9JDz+Kscthc085cCKWur8CLwUoBpoNyxsDi7932mCl0zFq3A5mv+FQLw9GHpV',\n [BraintreeModuleName.UsBankAccount]:\n 'sha384-xmHBVaU+w74V+OebD3AaPONFxHUGMf+QRs8G/JxVPXNNP7MDa2jL0ICWHIe2tTfJ',\n [BraintreeModuleName.GooglePayment]:\n 'sha384-WKDJl8mqoP82qZpMGH6AbZxnvXnSW8ILV4M64CyMLiugGMwu7LyP89wjCkHqsiBe',\n [BraintreeModuleName.ThreeDSecure]:\n 'sha384-VQUlpGHzsGvs5XeiGFip7EXRsvoHWEXDVmgCacfbyieZI9mdBOqq3NSoyo28OCOB',\n [BraintreeModuleName.VisaCheckout]:\n 'sha384-yx7mADfzTN0T43Q6rlH49LIg1EJ0iUZgBp/EczX9LXsUGkySgxrD+nWHQRBkyfoT',\n [BraintreeModuleName.Venmo]:\n 'sha384-QX4rPjoj1ZDhuG0aSyKs56lEKDqTMTcjYxUHY1SzO5VZDsqIE2NTkqot7KNSCyov',\n [BraintreeModuleName.HostedFields]:\n 'sha384-VvYBACfSu0Cr/J32uKmxG7AXcNOJE1AzIIL3kbikyS7YKp5fz5Is+NzNP/lyauNy',\n [BraintreeModuleName.Fastlane]:\n 'sha384-9oGsZMRZwpGtDEDYa/dFt76dECqj1xAni9gIKgc3KfMIiRnR73nEeeUDLiBzxhFa',\n },\n [BRAINTREE_SDK_DEFAULT_VERSION]: {\n [BraintreeModuleName.Client]:\n 'sha384-o+nbQGcwNNxIBeXeu3+XmbSq+Cg8R3EN3N0l5hXCgMMU2RGY0t1z0LroSEIAbfAO',\n [BraintreeModuleName.PaypalCheckout]:\n 'sha384-WrfbWPBS4mH86GAoycPSgiH8hQ8KH7A67C93Hjhunv/xhNk2YpBn3wbFA4Fhg9U/',\n [BraintreeModuleName.Paypal]:\n 'sha384-VF389nvvrRUgDsTXMxTYORDtVegB9IQa3Cxr//DyJnLYnz8/X8VCzEvck2c+Megt',\n [BraintreeModuleName.LocalPayment]:\n 'sha384-tZKx2rEQbfmZpoPSY5VPmJEhaq4X75dLvwHMs3VE9U+C8lPyw+hWTIL1+GPvWCIH',\n [BraintreeModuleName.DataCollector]:\n 'sha384-E6k3wOpP7syCDDwaRDLF06942Y00NkbwJvWi2OQXwwKzGwG5fd3E7RFUvCCecfvO',\n [BraintreeModuleName.UsBankAccount]:\n 'sha384-258FON8LZGG0W9Qaz4Jij83pZHu30YnKjJA7gNulLBh6CclkucgF+tHDQuYFRYfW',\n [BraintreeModuleName.GooglePayment]:\n 'sha384-taJ2p/0+n0VH328POAoBiuEbL3tnHUTE9S42hK1V+Txs3X+QYjZOyKW35JgHRFfO',\n [BraintreeModuleName.ThreeDSecure]:\n 'sha384-+NSZH4Zj3sO5bdWvPKhU5N16QDxeueTVTnUVeleeESkhLSaz4Ob1hh/5myecc9Ym',\n [BraintreeModuleName.VisaCheckout]:\n 'sha384-66DiBjghxk1OmBj8aksN8gbQ+CwoQcx1vPfiXUN08g1iQVM+BwewF0p7toM3i7SS',\n [BraintreeModuleName.Venmo]:\n 'sha384-B5UwY42kE4RoLoWbQ7YpqosUlUad2/DlGWiw0HhoZbSPk30CQAaSA10ohyLDTkDU',\n [BraintreeModuleName.HostedFields]:\n 'sha384-Aw9EesSaUeWxe36PqEHiOyOyOq8M6CIb1gw7/yHNVPRzGtFXXcd2OQ8qXrIlOj2P',\n [BraintreeModuleName.Fastlane]:\n 'sha384-rhBL1hpZ71JqG+2TsT0Dih47mbjx8cjJCpeZjk9tw3df1gFMKfCTmMyZunhr7H4Y',\n },\n [BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION]: {\n [BraintreeModuleName.Client]:\n 'sha384-0WNxksIpRP+fYZiIdr12g6DBUQfLDzYCQJZtR/C8KkcwSGhPHfcFp3tTaGcMyFTq',\n [BraintreeModuleName.PaypalCheckout]:\n 'sha384-lWM1jk4BOxoDNV6Kop7tVNvQgINlmEVz0c/OwM+HNHK3QC8xqwd54Ovrt2QRDTjh',\n [BraintreeModuleName.Paypal]:\n 'sha384-fXUmVxC2EMZBDXZ7eTHSTL/LFBrHej/MSXT/vTBXvra4lzgLNGvREAp+x0GYObuH',\n [BraintreeModuleName.LocalPayment]:\n 'sha384-pha1xGuGSkmZH5x9aqHvRaO4xLea7rmQ/79PFj9zxNzxuFcOWZg7gOP7FibygOEC',\n [BraintreeModuleName.DataCollector]:\n 'sha384-Q6PI2F9eekWbAxhroybl+aEcvqhdowN/EQlGwBUyJOzPFn9982u9xl6SU6XfGKzc',\n [BraintreeModuleName.UsBankAccount]:\n 'sha384-W3RLQSKJL1tQ3+Y7mP6tmkamtZ8bV4Yw/XxL9Jj5JtXHraD8loMF8hAIG5m2zK7F',\n [BraintreeModuleName.GooglePayment]:\n 'sha384-TITQMsFWA3elDNGP2mWz2oKBo4qjt+TlqzovcaPoeBiAh/wPBi6nae50ADdgU1/i',\n [BraintreeModuleName.ThreeDSecure]:\n 'sha384-YiycYN89ZlL/Evcaq4y1ajW1mhd7JYfZBDuOwHtIn4/Jnm20GL+/XCM+zYAwWD8D',\n [BraintreeModuleName.VisaCheckout]:\n 'sha384-/OdaTv9qrkKzjObtUe6yzfDhHozFW/+uXlrSl736sOZRJpjGQETvpYXqMFFg69xv',\n [BraintreeModuleName.Venmo]:\n 'sha384-dA+ojdW9vbJS4JavcXyOs9d5uZHJg5dNtYupoPSH2zsXIiYDVS5amLb/u8qmQ6oz',\n [BraintreeModuleName.HostedFields]:\n 'sha384-31ZkS58+iaWsW06ftW52zzVZFp43WPd7pNYRiddYynSNg6Oh7WGbSFGorAUH6T1z',\n [BraintreeModuleName.Fastlane]:\n 'sha384-jlbrwNvL3HvLAUCtLSmrnQ2GH1udCUrRS/bVmReAS5fuIVvcW8Pko/Gkg82tlgtr',\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 { Address } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport * from './braintree';\nexport * from './paypal';\nexport * from './visacheckout';\n\n/**\n *\n * Braintree Module\n *\n */\nexport interface BraintreeModuleCreator<\n TInstance,\n TOptions = BraintreeModuleCreatorConfig,\n TError = BraintreeError,\n> {\n create(\n config: TOptions,\n callback?: (error: TError, instance: TInstance) => void,\n ): Promise<TInstance>;\n}\n\nexport interface BraintreeModuleCreatorConfig {\n client?: BraintreeClient;\n authorization?: string; // Info: authorization uses clientToken as a value\n}\n\nexport interface BraintreeModule {\n teardown(): Promise<void>;\n}\n\n/**\n *\n * Braintree Window\n *\n */\nexport interface BraintreeWindow extends Window {\n client?: BraintreeClientCreator;\n braintreeFastlane?: BraintreeFastlane;\n}\n\n/**\n *\n * Braintree Client\n *\n */\nexport type BraintreeClientCreator = BraintreeModuleCreator<BraintreeClient>;\n\nexport interface BraintreeClient {\n request(payload: BraintreeClientRequestPayload): Promise<BraintreeClientRequestResponse>;\n}\n\nexport interface BraintreeClientRequestPayload {\n data: {\n creditCard: {\n billingAddress?: {\n countryCodeAlpha2: string;\n locality: string;\n countryName: string;\n postalCode: string;\n streetAddress: string;\n };\n cardholderName: string;\n cvv?: string;\n expirationDate: string;\n number: string;\n options: {\n validate: boolean;\n };\n };\n };\n endpoint: string;\n method: string;\n}\n\nexport interface BraintreeHostedFieldsTokenizePayload {\n nonce: string;\n details: {\n bin: string;\n cardType: string;\n expirationMonth: string;\n expirationYear: string;\n lastFour: string;\n lastTwo: string;\n };\n description: string;\n type: string;\n binData: {\n commercial: string;\n countryOfIssuance: string;\n debit: string;\n durbinRegulated: string;\n healthcare: string;\n issuingBank: string;\n payroll: string;\n prepaid: string;\n productId: string;\n };\n}\n\nexport interface BraintreeClientRequestResponse {\n creditCards: BraintreeHostedFieldsTokenizePayload[];\n}\n\n/**\n *\n * Braintree Data Collector\n *\n */\nexport type BraintreeDataCollectorCreator = BraintreeModuleCreator<\n BraintreeDataCollector,\n BraintreeDataCollectorCreatorConfig\n>;\n\nexport interface BraintreeDataCollectorCreatorConfig extends BraintreeModuleCreatorConfig {\n kount?: boolean; // Info: this param is needed for fraud detection (should always be 'true')\n paypal?: boolean; // TODO: based on braintree documentation, this param is deprecated, so we dont need it anymore\n riskCorrelationId?: string; // Info: the option is needed for PayPal Analytics\n}\n\nexport interface BraintreeDataCollector extends BraintreeModule {\n deviceData?: string;\n}\n\n// TODO: remove this interface when BraintreeIntegrationService will be removed\nexport interface BraintreeDataCollectors {\n default?: BraintreeDataCollector;\n paypal?: BraintreeDataCollector;\n}\n\n/**\n *\n * Braintree Google Payment\n *\n */\ntype BraintreeGooglePaymentAddressFormat = 'FULL' | 'MIN';\n\nexport enum TotalPriceStatusType {\n ESTIMATED = 'ESTIMATED',\n FINAL = 'FINAL',\n NOT_CURRENTLY_KNOWN = 'NOT_CURRENTLY_KNOWN',\n}\n\nexport interface BraintreeGooglePaymentDataRequestOptions {\n merchantInfo: {\n authJwt?: string;\n merchantId?: string;\n merchantName?: string;\n };\n transactionInfo: {\n currencyCode: string;\n totalPriceStatus: TotalPriceStatusType;\n totalPrice: string;\n };\n cardRequirements: {\n billingAddressRequired: boolean;\n billingAddressFormat: BraintreeGooglePaymentAddressFormat;\n };\n emailRequired?: boolean;\n phoneNumberRequired?: boolean;\n shippingAddressRequired?: boolean;\n}\n\nexport interface BraintreeGooglePaymentDataRequest {\n allowedPaymentMethods: string[];\n apiVersion: number;\n cardRequirements: {\n allowedCardNetworks: string[];\n billingAddressFormat: string;\n billingAddressRequired: boolean;\n };\n environment: string;\n i: {\n googleTransactionId: string;\n startTimeMs: number;\n };\n merchantInfo: {\n merchantId: string;\n merchantName: string;\n authJwt?: string;\n };\n paymentMethodTokenizationParameters: {\n parameters: {\n 'braintree:apiVersion': string;\n 'braintree:authorizationFingerprint': string;\n 'braintree:merchantId': string;\n 'braintree:metadata': string;\n 'braintree:sdkVersion': string;\n gateway: string;\n };\n tokenizationType: string;\n };\n shippingAddressRequired: boolean;\n phoneNumberRequired: boolean;\n transactionInfo: {\n currencyCode: string;\n totalPrice: string;\n totalPriceStatus: TotalPriceStatusType;\n };\n}\n\nexport type BraintreeGooglePaymentCreator = BraintreeModuleCreator<BraintreeGooglePayment>;\n\nexport interface BraintreeGooglePayment extends BraintreeModule {\n createPaymentDataRequest(\n options?: BraintreeGooglePaymentDataRequestOptions,\n ): BraintreeGooglePaymentDataRequest;\n}\n\nexport interface BraintreeGooglePayThreeDSecure {\n verifyCard(options: BraintreeGooglePayThreeDSecureOptions): Promise<BraintreeVerifyPayload>;\n}\n\nexport interface BraintreeGooglePayThreeDSecureOptions {\n nonce: string;\n amount: number;\n bin: string;\n showLoader?: boolean;\n onLookupComplete(data: BraintreeThreeDSecureVerificationData, next: () => void): void;\n}\n\n/**\n *\n * Braintree 3D Secure\n *\n */\nexport type BraintreeThreeDSecureCreator = BraintreeModuleCreator<\n BraintreeThreeDSecure,\n BraintreeThreeDSecureCreatorConfig\n>;\n\nexport interface BraintreeThreeDSecure extends BraintreeModule {\n verifyCard(\n options: BraintreeThreeDSecureOptions,\n callback?: Braintree3DSVerifyCardCallback,\n ): Promise<BraintreeVerifyPayload>;\n cancelVerifyCard(): Promise<BraintreeVerifyPayload>;\n on<K extends keyof BraintreeThreeDSecureEventMap>(\n event: K,\n handler: BraintreeThreeDSecureEventMap[K],\n ): void;\n}\n\nexport type Braintree3DSVerifyCardCallback = (\n verifyError: Braintree3DSVerifyCardError,\n payload: Braintree3DSVerifyCardPayload,\n) => void;\n\nexport interface BraintreeThreeDSecureEventMap {\n 'customer-canceled': () => void;\n}\n\nexport interface Braintree3DSVerifyCardError {\n code: string;\n}\n\nexport interface Braintree3DSVerifyCardPayload {\n nonce: string;\n}\n\nexport interface BraintreeThreeDSecureCreatorConfig extends BraintreeModuleCreatorConfig {\n version?: number;\n}\n\nexport interface BraintreeThreeDSecureOptions {\n nonce: string;\n amount: number | string;\n challengeRequested?: boolean;\n showLoader?: boolean;\n bin?: string;\n additionalInformation?: {\n acsWindowSize?: '01' | '02' | '03' | '04' | '05';\n };\n collectDeviceData?: boolean;\n onLookupComplete?(data: BraintreeThreeDSecureVerificationData, next: () => void): void;\n}\n\nexport interface BraintreeThreeDSecureVerificationData {\n lookup: {\n threeDSecureVersion: string;\n };\n paymentMethod: BraintreeVerifyPayload;\n requiresUserAuthentication: boolean;\n threeDSecureInfo: {\n liabilityShiftPossible: boolean;\n liabilityShifted: boolean;\n };\n}\n\nexport enum BraintreeOrderStatus {\n Completed = 'COMPLETED',\n Pending = 'PENDING',\n Failed = 'FAILED',\n}\n\nexport interface BraintreeOrderStatusData {\n status: BraintreeOrderStatus;\n}\n\n/**\n *\n * Braintree US Bank Account (ACH)\n *\n */\nexport type BraintreeUsBankAccountCreator = BraintreeModuleCreator<BraintreeUsBankAccount>;\n\nexport interface BraintreeUsBankAccount {\n tokenize(\n options: BraintreeUsBankAccountTokenizationOptions,\n ): Promise<BraintreeUsBankAccountTokenizationResponse>;\n}\n\nexport interface BraintreeUsBankAccountTokenizationOptions {\n bankDetails: BraintreeUsBankAccountDetails;\n mandateText: string;\n}\n\nexport interface BraintreeUsBankAccountTokenizationResponse {\n nonce: string;\n details: BraintreeTokenizationDetails;\n}\n\nexport interface BraintreeUsBankAccountDetails {\n accountNumber: string;\n routingNumber: string;\n ownershipType: string;\n accountType: string;\n firstName?: string;\n lastName?: string;\n businessName?: string;\n billingAddress: {\n streetAddress: string;\n extendedAddress: string;\n locality: string;\n region: string;\n postalCode: string;\n };\n}\n\n// TODO: move this interface in separate types group if it will be used in another (not ACH) strategies\n// This seems to be an interface which will be used in different places\nexport interface BraintreeTokenizationDetails {\n username?: string;\n email?: string;\n payerId?: string;\n firstName?: string;\n lastName?: string;\n countryCode?: string;\n phone?: string;\n shippingAddress?: BraintreeShippingAddress;\n billingAddress?: BraintreeAddress;\n}\n\nexport interface BraintreeAddress {\n line1: string;\n line2: string;\n city: string;\n state: string;\n postalCode: string;\n countryCode: string;\n}\n\nexport interface BraintreeShippingAddress extends BraintreeAddress {\n recipientName: string;\n}\n\n/**\n *\n * Braintree non-instant payment methods\n *\n */\nexport enum NonInstantLocalPaymentMethods {\n TRUSTLY = 'trustly',\n}\n\nexport interface BraintreeLocalPaymentMethodRedirectAction {\n body: {\n additional_action_required: {\n type: 'offsite_redirect';\n data: {\n redirect_url: string;\n };\n };\n };\n}\n\nexport interface BraintreeOrderSavedResponse {\n body: {\n additional_action_required: {\n data: {\n order_id_saved_successfully: string;\n };\n };\n };\n}\n\n/**\n *\n * Braintree Fastlane\n *\n */\nexport type BraintreeFastlaneCreator = BraintreeModuleCreator<\n BraintreeFastlane,\n BraintreeFastlaneConfig\n>;\n\nexport interface BraintreeFastlaneConfig {\n authorization: string;\n client: BraintreeClient;\n deviceData?: string;\n styles?: BraintreeFastlaneStylesOption;\n}\n\nexport interface BraintreeFastlane {\n identity: BraintreeFastlaneIdentity;\n profile: BraintreeFastlaneProfile;\n FastlaneCardComponent: (\n options: BraintreeFastlaneCardComponentOptions,\n ) => Promise<BraintreeFastlaneCardComponent>;\n events: BraintreeFastlaneEvents;\n}\n\nexport interface BraintreeFastlaneProfile {\n showCardSelector(): Promise<BraintreeFastlaneCardSelectorResponse>;\n showShippingAddressSelector(): Promise<BraintreeFastlaneShippingAddressSelectorResponse>;\n}\n\nexport interface BraintreeFastlaneShippingAddressSelectorResponse {\n selectionChanged: boolean;\n selectedAddress: BraintreeFastlaneShippingAddress;\n}\n\nexport interface BraintreeFastlaneShippingAddress {\n name: BraintreeFastlaneProfileName;\n phoneNumber: string;\n id?: string;\n firstName?: string;\n lastName?: string;\n company?: string;\n streetAddress: string;\n extendedAddress?: string;\n locality: string;\n region: string;\n postalCode: string;\n countryCodeNumeric?: number;\n countryCodeAlpha2: string;\n countryCodeAlpha3?: string;\n}\n\nexport interface BraintreeFastlaneProfileName {\n fullName: string;\n firstName?: string;\n lastName?: string;\n}\n\nexport interface BraintreeFastlaneCardSelectorResponse {\n selectionChanged: boolean;\n selectedCard: BraintreeFastlaneVaultedInstrument;\n}\n\nexport interface BraintreeFastlaneWindow extends Window {\n braintreeFastlane: BraintreeFastlane;\n}\n\nexport interface BraintreeFastlaneIdentity {\n lookupCustomerByEmail(email: string): Promise<BraintreeFastlaneLookupCustomerByEmailResult>;\n triggerAuthenticationFlow(\n customerId: string,\n options?: BraintreeFastlaneAuthenticationOptions,\n ): Promise<BraintreeFastlaneAuthenticationCustomerResult>;\n}\n\nexport interface BraintreeFastlaneLookupCustomerByEmailResult {\n customerContextId?: string;\n}\n\nexport interface BraintreeFastlaneAuthenticationOptions {\n styles?: BraintreeFastlaneStylesOption;\n}\n\nexport interface BraintreeFastlaneStylesOption {\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 enum BraintreeFastlaneAuthenticationState {\n SUCCEEDED = 'succeeded',\n FAILED = 'failed',\n CANCELED = 'cancelled',\n UNRECOGNIZED = 'unrecognized',\n}\n\nexport interface BraintreeFastlaneAuthenticationCustomerResult {\n authenticationState: BraintreeFastlaneAuthenticationState;\n profileData: BraintreeFastlaneProfileData;\n}\n\nexport interface BraintreeFastlaneProfileData {\n fastlaneCustomerAuthAssertionToken: string;\n fastlaneCustomerId: string;\n shippingAddress: BraintreeFastlaneAddress;\n card: BraintreeFastlaneVaultedInstrument;\n name: BraintreeFastlaneName;\n}\n\nexport interface BraintreeFastlaneName {\n firstName: string;\n lastName: string;\n}\n\nexport interface BraintreeFastlaneAddress {\n id?: string;\n firstName?: string;\n lastName?: string;\n company?: string;\n streetAddress: string;\n extendedAddress?: string;\n locality: string;\n region: string;\n postalCode: string;\n countryCodeNumeric?: number;\n countryCodeAlpha2: string;\n countryCodeAlpha3?: string;\n phoneNumber?: string;\n}\n\nexport interface BraintreeFastlaneCardPaymentSource {\n brand: string;\n expiry: string;\n lastDigits: string;\n name?: string;\n billingAddress: BraintreeFastlaneAddress;\n binDetails?: {\n bin: string;\n };\n}\n\nexport interface BraintreeFastlanePaymentSource {\n card: BraintreeFastlaneCardPaymentSource;\n}\n\nexport interface BraintreeFastlaneVaultedInstrument {\n id: string; // This is the nonce / token\n paymentSource: BraintreeFastlanePaymentSource;\n}\n\nexport interface BraintreeFastlaneCardComponentOptions {\n styles: BraintreeFastlaneStylesOption;\n fields: BraintreeFastlaneCardComponentFields;\n}\n\nexport interface BraintreeFastlaneCardComponentFields {\n cardholderName?: {\n enabled?: boolean;\n prefill?: string;\n };\n phoneNumber?: {\n placeholder?: string;\n prefill?: 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 fastlaneInputSettingsBorderColor?: string;\n fastlaneInputSettingsFocusBorderBase?: string;\n fastlaneInputSettingsTextColorBase?: string;\n fastlaneToggleSettingsColorPrimary?: string;\n fastlaneToggleSettingsColorSecondary?: string;\n fastlaneTextBodySettingsColor?: string;\n fastlaneTextBodySettingsFontSize?: string;\n fastlaneTextCaptionSettingsFontSize?: string;\n fastlaneTextCaptionSettingsColor?: string;\n fastlaneBrandingSettings?: string;\n}\n\nexport interface BraintreeFastlaneTokenizeOptions {\n name?: {\n fullName: string;\n };\n billingAddress?: BraintreeFastlaneAddress;\n shippingAddress?: BraintreeFastlaneAddress;\n}\n\nexport interface BraintreeFastlaneEvents {\n apmSelected: (options: BraintreeFastlaneApmSelectedEventOptions) => void;\n emailSubmitted: (options: BraintreeFastlaneEmailEnteredEventOptions) => void;\n orderPlaced: (options: BraintreeFastlaneOrderPlacedEventOptions) => void;\n}\n\nexport interface BraintreeFastlaneEventCommonOptions {\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 BraintreeFastlaneApmSelectedEventOptions\n extends BraintreeFastlaneEventCommonOptions {\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 BraintreeFastlaneEmailEnteredEventOptions\n extends BraintreeFastlaneEventCommonOptions {\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 BraintreeFastlaneOrderPlacedEventOptions\n extends BraintreeFastlaneEventCommonOptions {\n selected_payment_method: string;\n currency_code: string;\n}\n\nexport interface BraintreeFastlaneCardComponent {\n (options: BraintreeFastlaneCardComponentOptions): BraintreeFastlaneCardComponent;\n getPaymentToken(\n options: BraintreeFastlaneTokenizeOptions,\n ): Promise<BraintreeFastlaneVaultedInstrument>;\n render(element: string): void;\n}\n\n/**\n *\n * Braintree Payload Verification\n *\n */\nexport interface BraintreeVerifyPayload {\n nonce: string;\n details: {\n cardType: string;\n lastFour: string;\n lastTwo: string;\n };\n description: string;\n liabilityShiftPossible: boolean;\n liabilityShifted: boolean;\n}\n\n/**\n *\n * Braintree Errors\n *\n */\nexport enum BraintreeErrorType {\n Customer = 'CUSTOMER',\n Merchant = 'MERCHANT',\n Network = 'NETWORK',\n Internal = 'INTERNAL',\n Unknown = 'UNKNOWN',\n}\n\nexport enum BraintreeErrorCode {\n KountNotEnabled = 'DATA_COLLECTOR_KOUNT_NOT_ENABLED',\n}\n\nexport interface BraintreeError extends Error {\n type: BraintreeErrorType;\n code: string | BraintreeErrorCode.KountNotEnabled;\n details?: unknown;\n}\n\nexport interface BraintreeRedirectError {\n body: {\n additional_action_required: {\n data: {\n redirect_url: string;\n };\n };\n };\n}\n\nexport default interface BillingAddress extends Address {\n id: string;\n email?: string;\n}\n\nexport enum BraintreeSupportedCardBrands {\n Visa = 'visa',\n Mastercard = 'mastercard',\n AmericanExpress = 'american-express',\n DinersClub = 'diners-club',\n Discover = 'discover',\n Jcb = 'jcb',\n UnionPay = 'union-pay',\n Maestro = 'maestro',\n Elo = 'elo',\n Mir = 'mir',\n Hiper = 'hiper',\n Hipercard = 'hipercard',\n}\n\nexport interface BillingAddressState {\n data?: BillingAddress;\n errors: BillingAddressErrorsState;\n statuses: BillingAddressStatusesState;\n}\n\nexport interface BillingAddressErrorsState {\n loadError?: Error;\n updateError?: Error;\n continueAsGuestError?: Error;\n}\n\nexport interface BillingAddressStatusesState {\n isLoading?: boolean;\n isUpdating?: boolean;\n isContinuingAsGuest?: boolean;\n}\n\nexport interface BraintreeRequestData {\n data: {\n creditCard: {\n billingAddress?: {\n countryCodeAlpha2: string;\n locality: string;\n countryName: string;\n postalCode: string;\n streetAddress: string;\n };\n cardholderName: string;\n cvv?: string;\n expirationDate: string;\n number: string;\n options: {\n validate: boolean;\n };\n };\n };\n endpoint: string;\n method: string;\n}\n\nexport interface SDKVersionManager {\n getSDKVersion(): string;\n}\n","import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BRAINTREE_SDK_SCRIPTS_INTEGRITY } from './braintree-sdk-scripts-integrity';\nimport isManageableBraintreeSDKVersion from './isManageableBraintreeSDKVersion';\nimport {\n BraintreeClientCreator,\n BraintreeDataCollectorCreator,\n BraintreeFastlaneCreator,\n BraintreeGooglePaymentCreator,\n BraintreeHostedFieldsCreator,\n BraintreeHostWindow,\n BraintreeLocalPaymentCreator,\n BraintreeModuleCreators,\n BraintreeModuleName,\n BraintreePaypalCheckoutCreator,\n BraintreePaypalCreator,\n BraintreeThreeDSecureCreator,\n BraintreeUsBankAccountCreator,\n BraintreeVenmoCheckoutCreator,\n BraintreeVisaCheckoutCreator,\n SDKVersionManager,\n} from './types';\nimport { VisaCheckoutSDK } from './visacheckout';\n\nexport default class BraintreeScriptLoader {\n constructor(\n private scriptLoader: ScriptLoader,\n private braintreeHostWindow: BraintreeHostWindow,\n private braintreeSDKVersionManager: SDKVersionManager,\n ) {}\n\n async loadClient(): Promise<BraintreeClientCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeClientCreator>(\n BraintreeModuleName.Client,\n 'client.min.js',\n );\n }\n\n async loadFastlane(): Promise<BraintreeFastlaneCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeFastlaneCreator>(\n BraintreeModuleName.Fastlane,\n 'fastlane.min.js',\n );\n }\n\n async loadPaypalCheckout(): Promise<BraintreePaypalCheckoutCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreePaypalCheckoutCreator>(\n BraintreeModuleName.PaypalCheckout,\n 'paypal-checkout.min.js',\n );\n }\n\n async loadPaypal(): Promise<BraintreePaypalCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreePaypalCreator>(\n BraintreeModuleName.Paypal,\n 'paypal.min.js',\n );\n }\n\n async loadLocalPayment(): Promise<BraintreeLocalPaymentCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeLocalPaymentCreator>(\n BraintreeModuleName.LocalPayment,\n 'local-payment.min.js',\n );\n }\n\n async loadDataCollector(): Promise<BraintreeDataCollectorCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeDataCollectorCreator>(\n BraintreeModuleName.DataCollector,\n 'data-collector.min.js',\n );\n }\n\n async loadUsBankAccount(): Promise<BraintreeUsBankAccountCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeUsBankAccountCreator>(\n BraintreeModuleName.UsBankAccount,\n 'us-bank-account.min.js',\n );\n }\n\n async loadGooglePayment(): Promise<BraintreeGooglePaymentCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeGooglePaymentCreator>(\n BraintreeModuleName.GooglePayment,\n 'google-payment.min.js',\n );\n }\n\n async load3DS(): Promise<BraintreeThreeDSecureCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeThreeDSecureCreator>(\n BraintreeModuleName.ThreeDSecure,\n 'three-d-secure.min.js',\n );\n }\n\n loadVisaCheckout(): Promise<BraintreeVisaCheckoutCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeVisaCheckoutCreator>(\n BraintreeModuleName.VisaCheckout,\n 'visa-checkout.min.js',\n );\n }\n\n loadVenmoCheckout(): Promise<BraintreeVenmoCheckoutCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeVenmoCheckoutCreator>(\n BraintreeModuleName.Venmo,\n 'venmo.min.js',\n );\n }\n\n async loadHostedFields(): Promise<BraintreeHostedFieldsCreator> {\n return this.loadBraintreeModuleOrThrow<BraintreeHostedFieldsCreator>(\n BraintreeModuleName.HostedFields,\n 'hosted-fields.min.js',\n );\n }\n\n async loadVisaCheckoutSdk(testMode?: boolean): Promise<VisaCheckoutSDK> {\n if (this.braintreeHostWindow.V) {\n return this.braintreeHostWindow.V;\n }\n\n const hash = testMode\n ? 'sha384-0eu1s1GtqzXlL9DtLgmwzC5WWlEH/ADRM0n38cVQkvtT+W/gey96rcb1LwuUOPDm'\n : 'sha384-1f1csvP3ZFxg4dILH1GaY4LHlZ0oX7Rk83rxmLlwbnIi4TM0NYzXoev1VoEiVDS6';\n\n return this.scriptLoader\n .loadScript(\n `//${\n testMode ? 'sandbox-' : ''\n }assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js`,\n {\n async: true,\n attributes: {\n integrity: hash,\n crossorigin: 'anonymous',\n },\n },\n )\n .then(() => {\n if (!this.braintreeHostWindow.V) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.braintreeHostWindow.V;\n });\n }\n\n private async loadBraintreeModuleOrThrow<T extends BraintreeModuleCreators>(\n braintreeModuleName: BraintreeModuleName,\n fileName: string,\n ): Promise<T> {\n let module = this.getBraintreeModule(braintreeModuleName);\n\n if (module) {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return module as T;\n }\n\n const braintreeSdkVersion = this.braintreeSDKVersionManager.getSDKVersion();\n\n const scriptPath = `//js.braintreegateway.com/web/${braintreeSdkVersion}/js/${fileName}`;\n\n const integrity = isManageableBraintreeSDKVersion(braintreeSdkVersion)\n ? this.getIntegrityValuesByModuleName(braintreeModuleName, braintreeSdkVersion)\n : undefined;\n\n await this.scriptLoader.loadScript(\n scriptPath,\n integrity\n ? {\n async: true,\n attributes: {\n integrity,\n crossorigin: 'anonymous',\n },\n }\n : undefined,\n );\n\n module = this.getBraintreeModule(braintreeModuleName);\n\n if (!module) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return module as T;\n }\n\n private getBraintreeModule(\n braintreeModuleName: BraintreeModuleName,\n ): BraintreeModuleCreators | undefined {\n return this.braintreeHostWindow.braintree?.[braintreeModuleName];\n }\n\n private getIntegrityValuesByModuleName(\n moduleName: BraintreeModuleName,\n version: keyof typeof BRAINTREE_SDK_SCRIPTS_INTEGRITY,\n ): string {\n const integrity = BRAINTREE_SDK_SCRIPTS_INTEGRITY[version][moduleName];\n\n if (!integrity) {\n throw new Error('Unexpected fileName value');\n }\n\n return integrity;\n }\n}\n","import { BRAINTREE_SDK_SCRIPTS_INTEGRITY } from './braintree-sdk-scripts-integrity';\n\nfunction isManageableBraintreeSDKVersion(\n version: string,\n): version is keyof typeof BRAINTREE_SDK_SCRIPTS_INTEGRITY {\n return version in BRAINTREE_SDK_SCRIPTS_INTEGRITY;\n}\n\nexport default isManageableBraintreeSDKVersion;\n","import { StandardError } from './index';\n\n/**\n * Throw this error if the shopper is using a browser version that is not\n * supported by us or any third party provider we use.\n */\nexport default class UnsupportedBrowserError extends StandardError {\n constructor(message?: string) {\n super(message || 'Unsupported browser error');\n\n this.name = 'UnsupportedBrowserError';\n this.type = 'unsupported_browser';\n }\n}\n","import { BraintreeError } from '../types';\n\nexport default function isBraintreeError(error: unknown): error is BraintreeError {\n return Boolean(\n typeof error === 'object' &&\n error !== null &&\n ('type' in error || 'message' in error || 'code' in error),\n );\n}\n","import {\n NotInitializedError,\n NotInitializedErrorType,\n UnsupportedBrowserError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeScriptLoader from './braintree-script-loader';\nimport {\n BraintreeClient,\n BraintreeDataCollector,\n BraintreeDataCollectorCreatorConfig,\n BraintreeError,\n BraintreeErrorCode,\n BraintreeGooglePayment,\n BraintreeLocalPayment,\n BraintreeModule,\n BraintreeThreeDSecure,\n BraintreeUsBankAccount,\n BraintreeVenmoCheckout,\n BraintreeVisaCheckout,\n} from './types';\nimport isBraintreeError from './utils/is-braintree-error';\nimport { VisaCheckoutSDK } from './visacheckout';\n\nexport default class BraintreeSdk {\n private braintreeVenmo?: BraintreeVenmoCheckout;\n private braintreeLocalPayment?: BraintreeLocalPayment;\n private client?: BraintreeClient;\n private clientToken?: string;\n private dataCollector?: BraintreeDataCollector;\n private googlePayment?: BraintreeGooglePayment;\n private threeDS?: BraintreeThreeDSecure;\n private visaCheckout?: Promise<BraintreeVisaCheckout>;\n private visaCheckoutSDK?: VisaCheckoutSDK;\n private usBankAccount?: BraintreeUsBankAccount;\n\n constructor(private braintreeScriptLoader: BraintreeScriptLoader) {}\n\n initialize(clientToken: string): void {\n this.setClientToken(clientToken);\n }\n\n async deinitialize(): Promise<void> {\n await this.teardownModule(this.dataCollector);\n\n this.dataCollector = undefined;\n }\n\n /**\n *\n * Braintree Client\n * braintree doc: https://braintree.github.io/braintree-web/current/module-braintree-web_client.html\n *\n */\n async getClient(): Promise<BraintreeClient> {\n if (!this.client) {\n const clientToken = this.getClientTokenOrThrow();\n const clientCreator = await this.braintreeScriptLoader.loadClient();\n\n this.client = await clientCreator.create({ authorization: clientToken });\n }\n\n return this.client;\n }\n\n /**\n *\n * Braintree Data collector\n * braintree doc: https://braintree.github.io/braintree-web/current/module-braintree-web_data-collector.html\n *\n */\n async getDataCollectorOrThrow(\n options?: Partial<BraintreeDataCollectorCreatorConfig>,\n ): Promise<BraintreeDataCollector> {\n const emptyDataCollector = {\n deviceData: undefined,\n teardown: () => Promise.resolve(),\n };\n\n if (!this.dataCollector) {\n try {\n const client = await this.getClient();\n const dataCollector = await this.braintreeScriptLoader.loadDataCollector();\n\n const dataCollectorConfig: BraintreeDataCollectorCreatorConfig = {\n client,\n kount: true,\n ...options,\n };\n\n this.dataCollector = await dataCollector.create(dataCollectorConfig);\n } catch (error) {\n if (isBraintreeError(error) && error.code === BraintreeErrorCode.KountNotEnabled) {\n return emptyDataCollector;\n }\n\n throw error;\n }\n }\n\n return this.dataCollector;\n }\n\n /**\n *\n * Braintree Google Payment\n * braintree doc: https://braintree.github.io/braintree-web/current/module-braintree-web_google-payment.html\n *\n */\n async getBraintreeGooglePayment(): Promise<BraintreeGooglePayment> {\n if (!this.googlePayment) {\n const [client, braintreeGooglePayment] = await Promise.all([\n this.getClient(),\n this.braintreeScriptLoader.loadGooglePayment(),\n ]);\n\n this.googlePayment = await braintreeGooglePayment.create({ client });\n }\n\n return this.googlePayment;\n }\n\n /**\n *\n * Braintree 3DS\n * braintree doc: https://braintree.github.io/braintree-web/current/module-braintree-web_three-d-secure.html\n *\n */\n async getBraintreeThreeDS(): Promise<BraintreeThreeDSecure> {\n if (!this.threeDS) {\n const [client, threeDSecure] = await Promise.all([\n this.getClient(),\n this.braintreeScriptLoader.load3DS(),\n ]);\n\n this.threeDS = await threeDSecure.create({ client, version: 2 });\n }\n\n return this.threeDS;\n }\n\n /**\n *\n * Braintree Local Payment Methods\n * braintree doc: https://braintree.github.io/braintree-web/current/module-braintree-web_local-payment.html\n *\n */\n async getBraintreeLocalPayment(\n merchantAccountId: string,\n ): Promise<BraintreeLocalPayment | undefined> {\n if (!this.braintreeLocalPayment) {\n const [client, localPaymentCreator] = await Promise.all([\n this.getClient(),\n this.braintreeScriptLoader.loadLocalPayment(),\n ]);\n\n this.braintreeLocalPayment = await new Promise(\n (\n resolve: (braintreeLocalPayment: BraintreeLocalPayment) => void,\n reject: (error: BraintreeError) => void,\n ) => {\n void localPaymentCreator.create(\n { client, merchantAccountId },\n (\n error: BraintreeError | undefined,\n braintreeLocalPayment: BraintreeLocalPayment,\n ) => {\n if (error) {\n reject(error);\n }\n\n resolve(braintreeLocalPayment);\n },\n );\n },\n );\n }\n\n return this.braintreeLocalPayment;\n }\n\n /**\n *\n * Braintree UsBankAccount\n * braintree doc: https://braintree.github.io/braintree-web/current/module-braintree-web_us-bank-account.html\n *\n */\n async getUsBankAccount() {\n if (!this.usBankAccount) {\n const client = await this.getClient();\n const usBankAccount = await this.braintreeScriptLoader.loadUsBankAccount();\n\n this.usBankAccount = await usBankAccount.create({ client });\n }\n\n return this.usBankAccount;\n }\n\n /**\n *\n * Braintree Visa Checkout\n * braintree doc: https://braintree.github.io/braintree-web/current/module-braintree-web_visa-checkout.html\n *\n */\n getBraintreeVisaCheckout() {\n if (!this.visaCheckout) {\n this.visaCheckout = Promise.all([\n this.getClient(),\n this.braintreeScriptLoader.loadVisaCheckout(),\n ]).then(([client, paypal]) => paypal.create({ client }));\n }\n\n return this.visaCheckout;\n }\n\n /**\n *\n * Braintree Visa Checkout SDK\n * visa checkout doc: https://developer.visa.com/capabilities/visa_checkout/docs-how-to\n *\n */\n async getVisaCheckoutSdk(testMode?: boolean) {\n if (!this.visaCheckoutSDK) {\n this.visaCheckoutSDK = await this.braintreeScriptLoader.loadVisaCheckoutSdk(testMode);\n }\n\n return this.visaCheckoutSDK;\n }\n\n /**\n *\n * Braintree Venmo Checkout\n * braintree venmo checkout doc: https://braintree.github.io/braintree-web/current/module-braintree-web_venmo.html\n *\n */\n async getVenmoCheckoutOrThrow() {\n if (!this.braintreeVenmo) {\n const client = await this.getClient();\n const venmoCheckout = await this.braintreeScriptLoader.loadVenmoCheckout();\n\n const venmoCheckoutConfig = {\n client,\n allowDesktop: true,\n paymentMethodUsage: 'multi_use',\n };\n\n const braintreeVenmoCheckout = await venmoCheckout.create(venmoCheckoutConfig);\n\n if (braintreeVenmoCheckout.isBrowserSupported()) {\n this.braintreeVenmo = braintreeVenmoCheckout;\n } else {\n throw new UnsupportedBrowserError();\n }\n }\n\n return this.braintreeVenmo;\n }\n\n /**\n *\n * Private methods\n *\n */\n private setClientToken(clientToken: string): void {\n this.clientToken = clientToken;\n }\n\n private getClientTokenOrThrow(): string {\n if (!this.clientToken) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n return this.clientToken;\n }\n\n private teardownModule(module?: BraintreeModule): Promise<void> {\n return module ? module.teardown() : Promise.resolve();\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 { find } from 'lodash';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport { BraintreeHostWindow } from './braintree';\nimport {\n BRAINTREE_SDK_DEFAULT_VERSION,\n BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n BRAINTREE_SDK_STABLE_VERSION,\n} from './braintree-sdk-verison';\nimport { SDKVersionManager } from './types';\n\nexport default class BraintreeSDKVersionManager implements SDKVersionManager {\n private braintreeWindow: BraintreeHostWindow = window;\n\n constructor(private paymentIntegrationService: PaymentIntegrationService) {}\n\n getSDKVersion() {\n const state = this.paymentIntegrationService.getState();\n const storeConfig = state.getStoreConfig();\n const features = storeConfig?.checkoutSettings.features || {};\n\n const preloadedVersion = this.getPreloadedSDKVersion();\n\n if (preloadedVersion) {\n return preloadedVersion;\n }\n\n if (isExperimentEnabled(features, 'PAYPAL-5809.braintree_hosted_fields_fix_version')) {\n return BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION;\n }\n\n if (isExperimentEnabled(features, 'PAYPAL-5636.update_braintree_sdk_version')) {\n return BRAINTREE_SDK_DEFAULT_VERSION;\n }\n\n return BRAINTREE_SDK_STABLE_VERSION;\n }\n\n private getPreloadedSDKVersion(): void | string {\n const braintree = this.braintreeWindow.braintree;\n\n if (braintree) {\n const preloadedVersion = find<{ VERSION?: string }>(\n Object.values(braintree),\n (module) => !!module.VERSION,\n );\n\n return preloadedVersion?.VERSION;\n }\n }\n}\n","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 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 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","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 {\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 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 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 {\n PaymentInstrumentPayload,\n WithBankAccountInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function isUsBankAccountInstrumentLike(\n instrument?: PaymentInstrumentPayload,\n): instrument is WithBankAccountInstrument {\n if (!instrument) {\n return false;\n }\n\n return (\n 'accountNumber' in instrument &&\n 'routingNumber' in instrument &&\n 'ownershipType' in instrument &&\n 'accountType' in instrument\n );\n}\n","import {\n BraintreeInitializationData,\n BraintreeSdk,\n BraintreeUsBankAccount,\n BraintreeUsBankAccountDetails,\n isBraintreeError,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n InvalidArgumentError,\n isHostedInstrumentLike,\n isVaultedInstrument,\n MissingDataError,\n MissingDataErrorType,\n NotInitializedError,\n NotInitializedErrorType,\n OrderFinalizationNotRequiredError,\n OrderPaymentRequestBody,\n OrderRequestBody,\n Payment,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethodFailedError,\n PaymentRequestOptions,\n PaymentStrategy,\n WithBankAccountInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport isUsBankAccountInstrumentLike from '../is-us-bank-account-instrument-like';\n\nimport { WithBraintreeAchPaymentInitializeOptions } from './braintree-ach-initialize-options';\n\nexport default class BraintreeAchPaymentStrategy implements PaymentStrategy {\n private usBankAccount?: BraintreeUsBankAccount;\n private getMandateText?: () => string;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private braintreeSdk: BraintreeSdk,\n ) {}\n\n async initialize(\n options: PaymentInitializeOptions & WithBraintreeAchPaymentInitializeOptions,\n ): Promise<void> {\n const { methodId, braintreeach } = 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 this.getMandateText = braintreeach?.getMandateText;\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<BraintreeInitializationData>(methodId);\n const { clientToken, initializationData } = paymentMethod;\n\n if (!clientToken || !initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n this.braintreeSdk.initialize(clientToken);\n\n try {\n this.usBankAccount = await this.braintreeSdk.getUsBankAccount();\n } catch (error) {\n this.handleBraintreeError(error);\n }\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 isSubmittingWithVaultingInstrument = isVaultedInstrument(payment.paymentData || {});\n\n const nonce = isSubmittingWithVaultingInstrument\n ? await this.tokenizePaymentForVaultedInstrument(payment)\n : await this.tokenizePayment(payment);\n\n const submitPaymentPayload = isSubmittingWithVaultingInstrument\n ? await this.preparePaymentDataForVaultedInstrument(nonce, payment)\n : await this.preparePaymentData(nonce, payment);\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.braintreeSdk.deinitialize();\n\n return Promise.resolve();\n }\n\n private async tokenizePayment({ paymentData }: OrderPaymentRequestBody): Promise<string> {\n const usBankAccount = this.getUsBankAccountOrThrow();\n\n if (!isUsBankAccountInstrumentLike(paymentData)) {\n throw new PaymentArgumentInvalidError(['payment.paymentData']);\n }\n\n const mandateText = isVaultedInstrument(paymentData)\n ? 'The data are used for stored instrument verification'\n : typeof this.getMandateText === 'function' && this.getMandateText();\n\n if (!mandateText) {\n throw new InvalidArgumentError(\n 'Unable to proceed because getMandateText is not provided or returned undefined value.',\n );\n }\n\n try {\n const { nonce } = await usBankAccount.tokenize({\n bankDetails: this.getBankDetails(paymentData),\n mandateText,\n });\n\n return nonce;\n } catch (error) {\n this.handleBraintreeError(error);\n }\n }\n\n private async tokenizePaymentForVaultedInstrument(\n payment: OrderPaymentRequestBody,\n ): Promise<string | null> {\n const { methodId, paymentData = {} } = payment;\n\n const state = this.paymentIntegrationService.getState();\n const { config } = state.getPaymentMethodOrThrow(methodId);\n\n if (!config.isVaultingEnabled) {\n throw new InvalidArgumentError(\n 'Vaulting is disabled but a vaulted instrument was being used for this transaction',\n );\n }\n\n const shouldVerifyVaultingInstrument = isUsBankAccountInstrumentLike(paymentData);\n\n return shouldVerifyVaultingInstrument ? this.tokenizePayment(payment) : null;\n }\n\n private async preparePaymentData(\n nonce: string | null,\n payment: OrderPaymentRequestBody,\n ): Promise<Payment> {\n const { methodId, paymentData = {} } = payment;\n\n if (!isUsBankAccountInstrumentLike(paymentData)) {\n throw new PaymentArgumentInvalidError(['payment.paymentData']);\n }\n\n const { deviceData } = await this.braintreeSdk.getDataCollectorOrThrow();\n const { shouldSaveInstrument, shouldSetAsDefaultInstrument, routingNumber, accountNumber } =\n paymentData;\n\n return {\n methodId,\n paymentData: {\n deviceSessionId: deviceData,\n shouldSetAsDefaultInstrument,\n shouldSaveInstrument,\n formattedPayload: {\n tokenized_bank_account: {\n issuer: routingNumber,\n masked_account_number: accountNumber.substr(-4),\n token: nonce,\n },\n },\n },\n };\n }\n\n private async preparePaymentDataForVaultedInstrument(\n nonce: string | null,\n payment: OrderPaymentRequestBody,\n ): Promise<Payment> {\n const { methodId, paymentData = {} } = payment;\n\n if (!isVaultedInstrument(paymentData) || !isHostedInstrumentLike(paymentData)) {\n throw new PaymentArgumentInvalidError(['payment.paymentData']);\n }\n\n const { deviceData } = await this.braintreeSdk.getDataCollectorOrThrow();\n const { instrumentId, shouldSetAsDefaultInstrument } = paymentData;\n\n return {\n methodId,\n paymentData: {\n deviceSessionId: deviceData,\n instrumentId,\n shouldSetAsDefaultInstrument,\n ...(nonce && { nonce }),\n },\n };\n }\n\n private getBankDetails(paymentData: WithBankAccountInstrument): BraintreeUsBankAccountDetails {\n const state = this.paymentIntegrationService.getState();\n const billingAddress = state.getBillingAddressOrThrow();\n\n const ownershipType = paymentData.ownershipType.toLowerCase();\n const accountType = paymentData.accountType.toLowerCase();\n\n return {\n accountNumber: paymentData.accountNumber,\n routingNumber: paymentData.routingNumber,\n ownershipType,\n ...(ownershipType === 'personal'\n ? {\n firstName: paymentData.firstName,\n lastName: paymentData.lastName,\n }\n : {\n businessName: paymentData.businessName,\n }),\n accountType,\n billingAddress: {\n streetAddress: billingAddress.address1,\n extendedAddress: billingAddress.address2,\n locality: billingAddress.city,\n region: billingAddress.stateOrProvinceCode,\n postalCode: billingAddress.postalCode,\n },\n };\n }\n\n private getUsBankAccountOrThrow(): BraintreeUsBankAccount {\n if (!this.usBankAccount) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n return this.usBankAccount;\n }\n\n private handleBraintreeError(error: unknown): never {\n if (!isBraintreeError(error)) {\n throw error;\n }\n\n throw new PaymentMethodFailedError(error.message);\n }\n}\n","import { createBraintreeSdk } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeAchPaymentStrategy from './braintree-ach-payment-strategy';\n\nconst createBraintreeAchPaymentStrategy: PaymentStrategyFactory<BraintreeAchPaymentStrategy> = (\n paymentIntegrationService,\n) => {\n return new BraintreeAchPaymentStrategy(\n paymentIntegrationService,\n createBraintreeSdk(paymentIntegrationService),\n );\n};\n\nexport default toResolvableModule(createBraintreeAchPaymentStrategy, [{ id: 'braintreeach' }]);\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeScriptLoader from './braintree-script-loader';\nimport BraintreeSdk from './braintree-sdk';\nimport BraintreeSDKVersionManager from './braintree-sdk-version-manager';\n\nconst createBraintreeSdk = (paymentIntegrationService: PaymentIntegrationService) => {\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeScriptLoader = new BraintreeScriptLoader(\n getScriptLoader(),\n window,\n braintreeSDKVersionManager,\n );\n\n return new BraintreeSdk(braintreeScriptLoader);\n};\n\nexport default createBraintreeSdk;\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 { BraintreePaypalCheckout, BraintreePaypalSdkCreatorConfig } from './braintree';\nimport { BraintreeError } from './types';\n\nlet paypalSdkPromise: Promise<BraintreePaypalCheckout | null> | null = null;\n\nexport default function loadPayPalSDKOnce(\n paypalCheckout: BraintreePaypalCheckout,\n config: BraintreePaypalSdkCreatorConfig,\n): Promise<BraintreePaypalCheckout | null> {\n if (!paypalSdkPromise) {\n paypalSdkPromise = new Promise((resolve, reject) => {\n paypalCheckout.loadPayPalSDK(config, (err: null | undefined | BraintreeError) => {\n if (err) {\n paypalSdkPromise = null;\n\n reject(err);\n } else {\n resolve(paypalCheckout);\n }\n });\n });\n }\n\n return paypalSdkPromise;\n}\n\n// for testing purposes\nexport function resetLoadPayPalSDKOncePromise() {\n paypalSdkPromise = null;\n}\n","// the PayPal side of things uses uppercase keys instead of camel case\n\n/**\n *\n * PayPal constants\n *\n */\nexport const PAYPAL_COMPONENTS = ['buttons', 'messages'];\n\nexport enum PaypalButtonStyleLayoutOption {\n HORIZONTAL = 'horizontal',\n VERTICAL = 'vertical',\n}\n\nexport enum PaypalButtonStyleSizeOption {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large',\n RESPONSIVE = 'responsive',\n}\n\nexport enum PaypalButtonStyleColorOption {\n GOLD = 'gold',\n BLUE = 'blue',\n SIlVER = 'silver',\n BLACK = 'black',\n WHITE = 'white',\n}\n\nexport enum PaypalButtonStyleLabelOption {\n CHECKOUT = 'checkout',\n PAY = 'pay',\n BUYNOW = 'buynow',\n PAYPAL = 'paypal',\n CREDIT = 'credit',\n}\n\nexport enum PaypalButtonStyleShapeOption {\n PILL = 'pill',\n RECT = 'rect',\n}\n\n/**\n *\n * PayPal interfaces\n *\n */\nexport interface PaypalSDK {\n Button: PaypalButton;\n checkout: PaypalExpressCheckout;\n FUNDING: PaypalFundingTypeList;\n Buttons(options: PaypalButtonOptions): PaypalButtonRender;\n Messages(options: MessagingOptions): MessagingRender;\n}\n\nexport interface PaypalButton {\n render(options: PaypalButtonOptions, container: string): void;\n}\n\nexport interface PaypalExpressCheckout {\n initXO(): void;\n startFlow(url: string): void;\n closeFlow(): void;\n setup(merchantId: string, options: PaypalExpressCheckoutOptions): void;\n}\n\nexport interface PaypalExpressCheckoutOptions {\n button: string;\n environment: string;\n}\n\nexport interface MessagingOptions {\n amount: number;\n buyerCountry?: string;\n placement: string;\n style?: MessagesStyleOptions;\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 enum MessagingPlacements {\n CART = 'cart',\n HOME = 'homepage',\n PAYMENT = 'payment',\n PRODUCT = 'product',\n}\n\nexport interface MessagingRender {\n render(container: string): void;\n}\n\nexport interface PaypalButtonOptions {\n env?: string;\n commit?: boolean;\n style?: PaypalStyleOptions;\n funding?: PaypalFundingType;\n fundingSource?: string;\n client?: PaypalClientToken;\n payment?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise<unknown>;\n onAuthorize?(data: PaypalAuthorizeData, actions?: PaypalActions): Promise<unknown>;\n createOrder?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise<unknown>;\n onApprove?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise<unknown>;\n onClick?(payload: ClickCallbackPayload, actions: ClickButtonActions): void;\n onInit?(payload: InitCallbackPayload, actions: InitButtonActions): void;\n onCancel?(): void;\n onError?(error: Error): void;\n}\n\nexport interface PaypalStyleOptions {\n layout?: PaypalButtonStyleLayoutOption;\n size?: PaypalButtonStyleSizeOption;\n color?: PaypalButtonStyleColorOption;\n label?: PaypalButtonStyleLabelOption;\n shape?: PaypalButtonStyleShapeOption;\n tagline?: boolean;\n fundingicons?: boolean;\n height?: number | string;\n}\n\nexport interface PaypalClientToken {\n production?: string;\n sandbox?: string;\n}\n\nexport interface PaypalFundingType {\n allowed?: string[];\n disallowed?: string[];\n}\n\nexport interface PaypalActions {\n payment: PaypalPaymentActions;\n request: PaypalRequestActions;\n}\n\nexport interface PaypalButtonRender {\n render(container: string): void;\n isEligible(): boolean;\n close(): void;\n}\n\nexport interface PaypalAuthorizeData {\n payerId: string;\n paymentId?: string;\n billingToken?: string;\n payerID?: string;\n paymentID?: string;\n}\n\nexport interface PaypalFundingTypeList {\n CARD?: string;\n CREDIT?: string;\n PAYPAL?: string;\n PAYLATER?: string;\n}\n\nexport interface PaypalPaymentActions {\n get(id: string): Promise<unknown>;\n}\n\nexport interface PaypalRequestActions {\n post(url: string, payload?: object, options?: object): Promise<{ id: string }>;\n}\n\nexport interface InitCallbackPayload {\n correlationID: string;\n}\n\nexport interface ClickCallbackPayload {\n fundingSource: string;\n}\n\nexport interface InitButtonActions {\n enable(): void;\n disable(): void;\n}\n\nexport interface ClickButtonActions {\n reject(): void;\n resolve(): void;\n}\n","import { supportsPopups } from '@braintree/browser-detection';\nimport { isEmpty } from 'lodash';\n\nimport {\n Address,\n CreditCardInstrument,\n LegacyAddress,\n NonceInstrument,\n NotInitializedError,\n NotInitializedErrorType,\n Payment,\n PaymentArgumentInvalidError,\n PaymentInvalidFormError,\n PaymentInvalidFormErrorDetails,\n UnsupportedBrowserError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { Overlay } from '@bigcommerce/checkout-sdk/ui';\n\nimport BraintreeScriptLoader from './braintree-script-loader';\nimport loadPayPalSDKOnce from './load-paypal-sdk-once';\nimport {\n BraintreeClient,\n BraintreeDataCollector,\n BraintreeDataCollectorCreatorConfig,\n BraintreeDataCollectors,\n BraintreeEnv,\n BraintreeError,\n BraintreeFastlane,\n BraintreeFastlaneStylesOption,\n BraintreeHostWindow,\n BraintreeModule,\n BraintreePaypal,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeRequestData,\n BraintreeShippingAddressOverride,\n BraintreeThreeDSecure,\n BraintreeThreeDSecureOptions,\n BraintreeTokenizationDetails,\n BraintreeTokenizePayload,\n BraintreeVenmoCheckout,\n BraintreeVenmoCreatorConfig,\n BraintreeVerifyPayload,\n PAYPAL_COMPONENTS,\n TokenizationPayload,\n} from './types';\nimport isBraintreeError from './utils/is-braintree-error';\nimport isCreditCardInstrumentLike from './utils/is-credit-card-instrument-like';\n\nexport interface PaypalConfig {\n amount: number;\n currency: string;\n locale: string;\n offerCredit?: boolean;\n shippingAddressEditable?: boolean;\n shippingAddressOverride?: BraintreeShippingAddressOverride;\n shouldSaveInstrument?: boolean;\n}\n\n// Info: this class is deprecated and will be removed in a nearest future. Please, do not add anything here.\nexport default class BraintreeIntegrationService {\n private client?: Promise<BraintreeClient>;\n private clientToken?: string;\n private dataCollectors: BraintreeDataCollectors = {};\n private paypalCheckout?: BraintreePaypalCheckout;\n private braintreePaypal?: Promise<BraintreePaypal>;\n private threeDSecureOptions?: BraintreeThreeDSecureOptions;\n private threeDS?: Promise<BraintreeThreeDSecure>;\n private venmoCheckout?: BraintreeVenmoCheckout;\n\n constructor(\n private braintreeScriptLoader: BraintreeScriptLoader,\n private braintreeHostWindow: BraintreeHostWindow,\n private overlay?: Overlay,\n ) {}\n\n initialize(clientToken: string, threeDSecureOptions?: BraintreeThreeDSecureOptions) {\n this.clientToken = clientToken;\n this.threeDSecureOptions = threeDSecureOptions;\n }\n\n async getBraintreeFastlane(\n cardId?: string,\n isTestModeEnabled?: boolean,\n styles?: BraintreeFastlaneStylesOption,\n ): Promise<BraintreeFastlane> {\n if (isTestModeEnabled) {\n window.localStorage.setItem('axoEnv', 'sandbox');\n window.localStorage.setItem('fastlaneEnv', 'sandbox');\n }\n\n if (!this.braintreeHostWindow.braintreeFastlane) {\n const clientToken = this.getClientTokenOrThrow();\n const client = await this.getClient();\n const deviceData = await this.getSessionId(cardId);\n\n const braintreeFastlaneCreator = await this.braintreeScriptLoader.loadFastlane();\n\n const defaultStyles = {\n root: {\n backgroundColorPrimary: 'transparent',\n },\n };\n\n this.braintreeHostWindow.braintreeFastlane = await braintreeFastlaneCreator.create({\n authorization: clientToken,\n client,\n deviceData,\n styles: styles || defaultStyles,\n });\n }\n\n return this.braintreeHostWindow.braintreeFastlane;\n }\n\n // Info: This method is deprecated. Use getClient method from BraintreeSdk class instead\n async getClient(): Promise<BraintreeClient> {\n if (!this.client) {\n const clientToken = this.getClientTokenOrThrow();\n const clientCreator = await this.braintreeScriptLoader.loadClient();\n\n this.client = clientCreator.create({ authorization: clientToken });\n }\n\n return this.client;\n }\n\n getPaypal(): Promise<BraintreePaypal> {\n if (!this.braintreePaypal) {\n this.braintreePaypal = Promise.all([\n this.getClient(),\n this.braintreeScriptLoader.loadPaypal(),\n ]).then(([client, paypal]) => paypal.create({ client }));\n }\n\n return this.braintreePaypal;\n }\n\n paypal({ shouldSaveInstrument, ...config }: PaypalConfig): Promise<BraintreeTokenizePayload> {\n const newWindowFlow = supportsPopups();\n\n return this.getPaypal()\n .then((paypal) => {\n if (newWindowFlow) {\n this.overlay?.show({\n onClick: () => paypal.focusWindow(),\n });\n }\n\n return paypal.tokenize({\n enableShippingAddress: true,\n flow: shouldSaveInstrument ? 'vault' : 'checkout',\n useraction: 'commit',\n ...config,\n });\n })\n .then((response) => {\n this.overlay?.remove();\n\n return response;\n })\n .catch((error) => {\n this.overlay?.remove();\n\n throw error;\n });\n }\n\n async getPaypalCheckout(\n config: Partial<BraintreePaypalSdkCreatorConfig>,\n onSuccess: (instance: BraintreePaypalCheckout) => void,\n onError: (error: BraintreeError) => void,\n ): Promise<BraintreePaypalCheckout> {\n const client = await this.getClient();\n const paypalCheckout = await this.braintreeScriptLoader.loadPaypalCheckout();\n\n const paypalCheckoutConfig = { client };\n const paypalCheckoutCallback = (\n error: BraintreeError | undefined,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n ) => {\n if (error) {\n return onError(error);\n }\n\n const paypalSdkLoadCallback = () => onSuccess(braintreePaypalCheckout);\n const paypalSdkLoadConfig = {\n currency: config.currency,\n ...(config.isCreditEnabled && { 'enable-funding': 'paylater' }),\n components: PAYPAL_COMPONENTS.toString(),\n intent: config.intent,\n commit: config.commit ?? true,\n };\n\n if (!this.braintreeHostWindow.paypal) {\n void loadPayPalSDKOnce(braintreePaypalCheckout, paypalSdkLoadConfig).then(\n paypalSdkLoadCallback,\n );\n } else {\n onSuccess(braintreePaypalCheckout);\n }\n };\n\n this.paypalCheckout = await paypalCheckout.create(\n paypalCheckoutConfig,\n paypalCheckoutCallback,\n );\n\n return this.paypalCheckout;\n }\n\n async getDataCollector(\n options?: Partial<BraintreeDataCollectorCreatorConfig>,\n ): Promise<BraintreeDataCollector> {\n const cacheKey: keyof BraintreeDataCollectors = options?.paypal ? 'paypal' : 'default';\n\n let cached = this.dataCollectors[cacheKey];\n\n if (!cached) {\n try {\n const client = await this.getClient();\n const dataCollector = await this.braintreeScriptLoader.loadDataCollector();\n\n const dataCollectorConfig: BraintreeDataCollectorCreatorConfig = {\n client,\n kount: true,\n ...options,\n };\n\n cached = await dataCollector.create(dataCollectorConfig);\n } catch (error) {\n if (isBraintreeError(error) && error.code === 'DATA_COLLECTOR_KOUNT_NOT_ENABLED') {\n cached = {\n deviceData: undefined,\n teardown: () => Promise.resolve(),\n };\n } else {\n throw error;\n }\n }\n\n this.dataCollectors[cacheKey] = cached;\n }\n\n return cached;\n }\n\n getBraintreeEnv(isTestMode = false): BraintreeEnv {\n return isTestMode ? BraintreeEnv.Sandbox : BraintreeEnv.Production;\n }\n\n mapToBraintreeShippingAddressOverride(address: Address): BraintreeShippingAddressOverride {\n return {\n recipientName: `${address.firstName} ${address.lastName}`,\n line1: address.address1,\n line2: address.address2,\n city: address.city,\n state: address.stateOrProvinceCode,\n postalCode: address.postalCode,\n countryCode: address.countryCode,\n phone: address.phone,\n };\n }\n\n mapToLegacyShippingAddress(details: BraintreeTokenizationDetails): Partial<LegacyAddress> {\n const { email, phone, shippingAddress } = details;\n const recipientName = shippingAddress?.recipientName || '';\n const [firstName, lastName] = recipientName.split(' ');\n\n return {\n email,\n first_name: firstName || '',\n last_name: lastName || '',\n phone_number: phone,\n address_line_1: shippingAddress?.line1,\n address_line_2: shippingAddress?.line2,\n city: shippingAddress?.city,\n state: shippingAddress?.state,\n country_code: shippingAddress?.countryCode,\n postal_code: shippingAddress?.postalCode,\n };\n }\n\n mapToLegacyBillingAddress(details: BraintreeTokenizationDetails): Partial<LegacyAddress> {\n const { billingAddress, email, firstName, lastName, phone, shippingAddress } = details;\n\n const address = billingAddress || shippingAddress;\n\n return {\n email,\n first_name: firstName,\n last_name: lastName,\n phone_number: phone,\n address_line_1: address?.line1,\n address_line_2: address?.line2,\n city: address?.city,\n state: address?.state,\n country_code: address?.countryCode,\n postal_code: address?.postalCode,\n };\n }\n\n removeElement(elementId?: string): void {\n const element = elementId && document.getElementById(elementId);\n\n if (element) {\n element.remove();\n }\n }\n\n async getSessionId(cartId?: string): Promise<string | undefined> {\n const { deviceData } = await this.getDataCollector({\n riskCorrelationId: cartId,\n });\n\n return deviceData;\n }\n\n async teardown(): Promise<void> {\n await this.teardownModule(this.dataCollectors.default);\n await this.teardownModule(this.dataCollectors.paypal);\n this.dataCollectors = {};\n\n await this.teardownModule(this.paypalCheckout);\n this.paypalCheckout = undefined;\n\n // await this.teardownModule(this._venmoCheckout);\n // this._venmoCheckout = undefined;\n\n // await this.teardownModule(this._visaCheckout);\n // this._visaCheckout = undefined;\n }\n\n async get3DS(): Promise<BraintreeThreeDSecure> {\n if (!this.threeDS) {\n this.threeDS = Promise.all([\n this.getClient(),\n this.braintreeScriptLoader.load3DS(),\n ]).then(([client, threeDSecure]) => threeDSecure.create({ client, version: 2 }));\n }\n\n return this.threeDS;\n }\n\n async getVenmoCheckout(\n venmoConfig?: BraintreeVenmoCreatorConfig,\n ): Promise<BraintreeVenmoCheckout> {\n if (!this.venmoCheckout) {\n const client = await this.getClient();\n const venmoCheckout = await this.braintreeScriptLoader.loadVenmoCheckout();\n\n const venmoCheckoutConfig = {\n client,\n allowDesktop: true,\n paymentMethodUsage: 'multi_use',\n ...(venmoConfig || {}),\n };\n\n this.venmoCheckout = await new Promise<BraintreeVenmoCheckout>((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n venmoCheckout.create(\n venmoCheckoutConfig,\n (error: BraintreeError, braintreeVenmoCheckout: BraintreeVenmoCheckout) => {\n if (error) {\n return reject(error);\n }\n\n if (!braintreeVenmoCheckout.isBrowserSupported()) {\n return reject(new UnsupportedBrowserError());\n }\n\n resolve(braintreeVenmoCheckout);\n },\n );\n });\n }\n\n return this.venmoCheckout;\n }\n\n /*\n Braintree Credit Card and Braintree Hosted Form\n */\n async verifyCard(\n payment: Payment,\n billingAddress: Address,\n amount: number,\n ): Promise<NonceInstrument> {\n const tokenizationPayload = await this.tokenizeCard(payment, billingAddress);\n\n return this.challenge3DSVerification(tokenizationPayload, amount);\n }\n\n async tokenizeCard(payment: Payment, billingAddress: Address): Promise<TokenizationPayload> {\n const { paymentData } = payment;\n\n if (!isCreditCardInstrumentLike(paymentData)) {\n throw new PaymentArgumentInvalidError(['payment.paymentData']);\n }\n\n const errors = this.getErrorsRequiredFields(paymentData);\n\n if (!isEmpty(errors)) {\n throw new PaymentInvalidFormError(errors);\n }\n\n const requestData = this.mapToCreditCard(paymentData, billingAddress);\n const client = await this.getClient();\n const { creditCards } = await client.request(requestData);\n\n return {\n nonce: creditCards[0].nonce,\n bin: creditCards[0].details.bin,\n };\n }\n\n async challenge3DSVerification(\n tokenizationPayload: TokenizationPayload,\n amount: number,\n ): Promise<BraintreeVerifyPayload> {\n const threeDSecure = await this.get3DS();\n\n return this.present3DSChallenge(threeDSecure, amount, tokenizationPayload);\n }\n\n private teardownModule(module?: BraintreeModule) {\n return module ? module.teardown() : Promise.resolve();\n }\n\n private getClientTokenOrThrow(): string {\n if (!this.clientToken) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n return this.clientToken;\n }\n\n private getErrorsRequiredFields(\n paymentData: CreditCardInstrument,\n ): PaymentInvalidFormErrorDetails {\n const { ccNumber, ccExpiry } = paymentData;\n const errors: PaymentInvalidFormErrorDetails = {};\n\n if (!ccNumber) {\n errors.ccNumber = [\n {\n message: 'Credit card number is required',\n type: 'required',\n },\n ];\n }\n\n if (!ccExpiry) {\n errors.ccExpiry = [\n {\n message: 'Expiration date is required',\n type: 'required',\n },\n ];\n }\n\n return errors;\n }\n\n private mapToCreditCard(\n creditCard: CreditCardInstrument,\n billingAddress?: Address,\n ): BraintreeRequestData {\n return {\n data: {\n creditCard: {\n cardholderName: creditCard.ccName,\n number: creditCard.ccNumber,\n cvv: creditCard.ccCvv,\n expirationDate: `${creditCard.ccExpiry.month}/${creditCard.ccExpiry.year}`,\n options: {\n validate: false,\n },\n billingAddress: billingAddress && {\n countryCodeAlpha2: billingAddress.countryCode,\n locality: billingAddress.city,\n countryName: billingAddress.country,\n postalCode: billingAddress.postalCode,\n streetAddress: billingAddress.address2\n ? `${billingAddress.address1} ${billingAddress.address2}`\n : billingAddress.address1,\n },\n },\n },\n endpoint: 'payment_methods/credit_cards',\n method: 'post',\n };\n }\n\n private present3DSChallenge(\n threeDSecure: BraintreeThreeDSecure,\n amount: number,\n tokenizationPayload: TokenizationPayload,\n ): Promise<BraintreeVerifyPayload> {\n const { nonce, bin } = tokenizationPayload;\n\n if (!nonce) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n const { challengeRequested = true, additionalInformation = undefined } =\n this.threeDSecureOptions || {};\n\n const roundedAmount = amount.toFixed(2);\n\n return threeDSecure.verifyCard({\n amount: Number(roundedAmount),\n bin,\n challengeRequested,\n nonce,\n onLookupComplete: (_data, next) => {\n next();\n },\n collectDeviceData: true,\n additionalInformation,\n });\n }\n}\n","import { CreditCardInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function isCreditCardInstrumentLike(\n instrument: unknown,\n): instrument is CreditCardInstrument {\n if (typeof instrument !== 'object' || instrument === null) {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const creditCardInstrument = instrument as Partial<Record<string, unknown>>;\n\n return (\n typeof creditCardInstrument.ccExpiry === 'object' &&\n creditCardInstrument.ccExpiry !== null &&\n typeof creditCardInstrument.ccNumber === 'string' &&\n typeof creditCardInstrument.ccName === 'string'\n );\n}\n","import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n BraintreeHostWindow,\n BraintreeInitializationData,\n PayPalBNPLConfigurationItem,\n} from './braintree';\nimport { MessagesStyleOptions, MessagingPlacements } from './paypal';\n\nexport default class BraintreeMessages {\n private braintreeHostWindow: BraintreeHostWindow = window;\n\n constructor(private paymentIntegrationService: PaymentIntegrationService) {}\n\n render(methodId: string, containerId: string, placement: MessagingPlacements): void {\n const messagingContainer = containerId && document.getElementById(containerId);\n\n if (this.braintreeHostWindow.paypal && messagingContainer) {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const billingAddress = state.getBillingAddressOrThrow();\n const paymentMethod =\n state.getPaymentMethodOrThrow<BraintreeInitializationData>(methodId);\n\n if (!paymentMethod.initializationData) {\n return;\n }\n\n const { paypalBNPLConfiguration = [] } = paymentMethod.initializationData;\n\n const bannedId = placement === MessagingPlacements.PAYMENT ? 'checkout' : placement;\n const bannerConfiguration =\n paypalBNPLConfiguration &&\n paypalBNPLConfiguration.find(({ id }) => id === bannedId);\n\n if (!bannerConfiguration || !bannerConfiguration.status) {\n return;\n }\n\n // TODO: remove this code when this data attributes will be removed from banner div container in content service\n if (placement === MessagingPlacements.CART) {\n messagingContainer.removeAttribute('data-pp-style-logo-type');\n messagingContainer.removeAttribute('data-pp-style-logo-position');\n messagingContainer.removeAttribute('data-pp-style-text-color');\n messagingContainer.removeAttribute('data-pp-style-text-size');\n }\n\n this.braintreeHostWindow.paypal\n .Messages({\n amount: cart.cartAmount,\n buyerCountry: billingAddress.countryCode,\n placement,\n style: this.getPaypalMessagesStylesFromBNPLConfig(bannerConfiguration),\n })\n .render(`#${containerId}`);\n }\n }\n\n private 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}\n","import getOverlayStyle from './overlay-style';\n\nexport interface OverlayOptions {\n background?: string;\n id?: string;\n transitionDuration?: number;\n hasCloseButton?: boolean;\n innerHtml?: HTMLElement | DocumentFragment;\n}\n\nexport interface OverlayShowOptions {\n onClick?(event: MouseEvent): void;\n onClickClose?(event: MouseEvent): void;\n}\n\nexport interface Elements {\n element: HTMLElement;\n mainElement: HTMLElement;\n closeElement?: HTMLElement;\n}\n\nexport default class Overlay {\n private _element: HTMLElement;\n private _mainElement: HTMLElement;\n private _closeElement?: HTMLElement;\n private _unregisterClick?: () => void;\n\n constructor(options?: OverlayOptions) {\n const { element, closeElement, mainElement } = this._createElements(options);\n\n this._element = element;\n this._closeElement = closeElement;\n this._mainElement = mainElement;\n }\n\n show(options?: OverlayShowOptions): void {\n if (this._mainElement.parentElement) {\n return;\n }\n\n this._registerClick(options);\n\n document.body.appendChild(this._mainElement);\n\n // Fade In\n setTimeout(() => (this._element.style.opacity = '1'));\n }\n\n remove(): void {\n if (!this._mainElement.parentElement) {\n return;\n }\n\n if (this._unregisterClick) {\n this._unregisterClick();\n }\n\n this._removeAfterTransition();\n\n setTimeout(() => (this._element.style.opacity = '0'));\n }\n\n private _createElements(options?: OverlayOptions): Elements {\n const element = document.createElement('div');\n const {\n background = 'rgba(0, 0, 0, 0.8)',\n id = 'checkoutOverlay',\n transitionDuration = 400,\n hasCloseButton = false,\n innerHtml = null,\n } = options || {};\n let mainElement = element;\n let closeElement: HTMLElement | undefined;\n let classLayout: string | undefined;\n let classClose: string | undefined;\n let classOverlayText: string | undefined;\n\n if (id) {\n element.id = id;\n }\n\n if (innerHtml) {\n const overlayText = document.createElement('div');\n\n classOverlayText = `${id}--overlayText`;\n overlayText.className = classOverlayText;\n overlayText.appendChild(innerHtml);\n\n element.appendChild(overlayText);\n }\n\n if (hasCloseButton) {\n classClose = `${id}--close`;\n closeElement = document.createElement('div');\n closeElement.className = classClose;\n\n classLayout = `${id}--layout`;\n mainElement = document.createElement('div');\n mainElement.className = classLayout;\n\n mainElement.appendChild(element);\n mainElement.appendChild(closeElement);\n }\n\n mainElement.appendChild(\n getOverlayStyle({\n id,\n background,\n transitionDuration,\n classLayout,\n classOverlayText,\n classClose,\n }),\n );\n\n return { element, closeElement, mainElement };\n }\n\n private _addEventListener(element?: HTMLElement, onClick?: (event: MouseEvent) => void): void {\n if (!element || !onClick) {\n return;\n }\n\n element.addEventListener('click', onClick);\n }\n\n private _removeEventListener(\n element?: HTMLElement,\n onClick?: (event: MouseEvent) => void,\n ): void {\n if (!element || !onClick) {\n return;\n }\n\n element.removeEventListener('click', onClick);\n }\n\n private _registerClick(options?: OverlayShowOptions): void {\n if (this._unregisterClick) {\n this._unregisterClick();\n }\n\n if (options) {\n const { onClick, onClickClose } = options;\n\n this._addEventListener(this._element, onClick);\n this._addEventListener(this._closeElement, onClickClose);\n\n this._unregisterClick = () => {\n this._removeEventListener(this._element, onClick);\n this._removeEventListener(this._closeElement, onClickClose);\n this._unregisterClick = undefined;\n };\n }\n }\n\n private _removeAfterTransition(): void {\n const handleTransition: (event: Event) => void = (event) => {\n // NOTE: `event` is not correctly typed in this version of TS\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n if ((event as TransitionEvent).propertyName !== 'opacity') {\n return;\n }\n\n if (this._mainElement.parentElement) {\n this._mainElement.remove();\n }\n\n this._element.removeEventListener('transitionend', handleTransition);\n };\n\n this._element.addEventListener('transitionend', handleTransition);\n }\n}\n","interface OverlayStyleOptions {\n background?: string;\n id?: string;\n transitionDuration?: number;\n classLayout?: string;\n classOverlayText?: string;\n classClose?: string;\n}\n\nexport default function getOverlayStyle(options: OverlayStyleOptions): HTMLElement {\n const { id, background, transitionDuration, classLayout, classOverlayText, classClose } =\n options;\n const styles = document.createElement('style');\n const addClassLayout = classLayout ? `, .${classLayout}` : '';\n\n styles.id = `${id}--styles`;\n styles.type = 'text/css';\n styles.innerText = `\n #${id}${addClassLayout} {\n display: block;\n height: 100%;\n width: 100%;\n left: 0;\n top: 0;\n position: fixed;\n z-index: 2147483647;\n }\n #${id} {\n transition: opacity ${transitionDuration}ms ease-out;\n background: ${background};\n opacity: 0;\n }\n `;\n\n if (classOverlayText) {\n styles.innerText += `\n #${id} {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n #${id} .${classOverlayText} {\n color: white;\n max-width: 330px;\n font-size: 1.2em;\n text-align: center;\n }\n `;\n }\n\n if (classClose) {\n styles.innerText += `\n #${id} {\n opacity: 1;\n }\n .${classLayout} .${classClose} {\n position: fixed;\n right: 16px;\n top: 16px;\n width: 16px;\n height: 16px;\n opacity: 0.6;\n cursor: pointer;\n z-index: 3147483647;\n }\n .${classLayout} .${classClose}::after, .${classLayout} .${classClose}::before {\n position: absolute;\n left: 8px;\n content: '';\n height: 16px;\n width: 2px;\n background-color: #fff;\n }\n .${classLayout} .${classClose}::after {\n transform: rotate(-45deg);\n }\n .${classLayout} .${classClose}::before {\n transform: rotate(45deg);\n }\n `;\n }\n\n return styles;\n}\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","export const LOADING_INDICATOR_STYLES = {\n 'background-color': 'rgba(0, 0, 0, 0.4)',\n 'z-index': '1000',\n};\n","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when the payment flow is cancelled. It could be\n * due to a deliberate user interaction, i.e.: the user clicks on a cancel\n * button which dismisses the payment modal.\n */\nexport default class PaymentMethodCancelledError extends StandardError {\n constructor(message?: string) {\n super(message || 'Payment process was cancelled.');\n\n this.name = 'PaymentMethodCancelledError';\n this.type = 'payment_cancelled';\n }\n}\n","import { BraintreeError } from '@bigcommerce/checkout-sdk/braintree-utils';\n\nexport default function isBraintreeError(\n error: BraintreeError | Error | unknown,\n): error is BraintreeError {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'name' in error &&\n (error as BraintreeError).name === 'BraintreeError'\n );\n}\n","import { BraintreeShippingAddressOverride } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { Address } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function mapToBraintreeShippingAddressOverride(\n address: Address,\n): BraintreeShippingAddressOverride {\n return {\n recipientName: `${address.firstName} ${address.lastName}`,\n line1: address.address1,\n line2: address.address2,\n city: address.city,\n state: address.stateOrProvinceCode,\n postalCode: address.postalCode,\n countryCode: address.countryCode,\n phone: address.phone,\n };\n}\n","import {\n BraintreeError,\n BraintreeHostWindow,\n BraintreeInitializationData,\n BraintreeIntegrationService,\n BraintreeMessages,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeTokenizePayload,\n MessagingPlacements,\n PaypalAuthorizeData,\n PaypalButtonRender,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n FormattedPayload,\n InvalidArgumentError,\n isHostedInstrumentLike,\n isHostedVaultedInstrument,\n isVaultedInstrument,\n MissingDataError,\n MissingDataErrorType,\n NotInitializedError,\n NotInitializedErrorType,\n OrderFinalizationNotRequiredError,\n OrderPaymentRequestBody,\n OrderRequestBody,\n Payment,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethod,\n PaymentMethodCancelledError,\n PaymentMethodFailedError,\n PaymentRequestOptions,\n PaymentStrategy,\n PaypalInstrument,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport isBraintreeError from '../is-braintree-error';\nimport isBraintreePaypalProviderError from '../is-braintree-paypal-provider-error';\nimport mapToBraintreeShippingAddressOverride from '../map-to-braintree-shipping-address-override';\n\nimport {\n BraintreePaypalPaymentInitializeOptions,\n WithBraintreePaypalPaymentInitializeOptions,\n} from './braintree-paypal-payment-initialize-options';\n\nexport default class BraintreePaypalPaymentStrategy implements PaymentStrategy {\n private paymentMethod?: PaymentMethod<BraintreeInitializationData>;\n private braintreeHostWindow: BraintreeHostWindow = window;\n private braintreeButtonOptions?: BraintreePaypalPaymentInitializeOptions;\n private braintreeTokenizePayload?: BraintreeTokenizePayload;\n private paypalButtonRender?: PaypalButtonRender;\n private loadingIndicatorContainer?: string;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private braintreeIntegrationService: BraintreeIntegrationService,\n private braintreeMessages: BraintreeMessages,\n private loadingIndicator: LoadingIndicator,\n ) {}\n\n async initialize(\n options: PaymentInitializeOptions & WithBraintreePaypalPaymentInitializeOptions,\n ) {\n const { braintree: braintreeOptions, methodId } = options;\n\n if (braintreeOptions?.containerId) {\n this.braintreeButtonOptions = braintreeOptions;\n }\n\n if (!this.paymentMethod || !this.paymentMethod.nonce) {\n this.paymentMethod = this.paymentIntegrationService\n .getState()\n .getPaymentMethodOrThrow(methodId);\n }\n\n if (this.paymentMethod.clientToken && braintreeOptions?.bannerContainerId) {\n await this.loadPaypal();\n\n return this.loadPaypalCheckoutInstance(braintreeOptions);\n }\n\n if (this.paymentMethod.clientToken) {\n return this.loadPaypal();\n }\n\n const state = await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n this.paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n if (braintreeOptions?.bannerContainerId) {\n return this.loadPaypalCheckoutInstance(braintreeOptions);\n }\n\n if (!this.paymentMethod.clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n return this.loadPaypal();\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 { onError } = this.braintreeButtonOptions || {};\n\n try {\n const paymentData = await this.preparePaymentData(payment, order.useStoreCredit);\n\n await this.paymentIntegrationService.submitOrder(order, options);\n await this.paymentIntegrationService.submitPayment(paymentData);\n } catch (error) {\n if (this.isProviderError(error)) {\n await this.loadPaypal();\n\n this.paypalButtonRender?.close();\n\n await this.loadPaypalCheckoutInstance(this.braintreeButtonOptions);\n\n await new Promise((_resolve, reject) => {\n if (onError && typeof onError === 'function') {\n onError(new Error('INSTRUMENT_DECLINED'));\n }\n\n reject();\n });\n }\n\n this.handleError(error);\n }\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n deinitialize(): Promise<void> {\n this.braintreeTokenizePayload = undefined;\n\n this.paypalButtonRender?.close();\n\n return this.braintreeIntegrationService.teardown();\n }\n\n private async preparePaymentData(\n payment: OrderPaymentRequestBody,\n useStoreCredit?: boolean,\n ): Promise<Payment> {\n const state = this.paymentIntegrationService.getState();\n\n const grandTotal = state.getOutstandingBalance(useStoreCredit);\n const config = state.getStoreConfig();\n\n if (!grandTotal) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n }\n\n if (!config) {\n throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n }\n\n if (!this.paymentMethod) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n const {\n currency,\n storeProfile: { storeLanguage },\n } = config;\n const {\n nonce,\n config: { isVaultingEnabled },\n } = this.paymentMethod;\n const { methodId, paymentData = {} } = payment;\n\n const token = this.braintreeTokenizePayload?.nonce || nonce;\n\n if (token) {\n const state = await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n this.paymentMethod = state.getPaymentMethod(methodId);\n\n return {\n ...payment,\n paymentData: this.formattedPayload(token),\n };\n }\n\n if (isVaultedInstrument(paymentData) || isHostedVaultedInstrument(paymentData)) {\n if (!isVaultingEnabled) {\n throw new InvalidArgumentError(\n 'Vaulting is disabled but a vaulted instrument was being used for this transaction',\n );\n }\n\n return Promise.resolve(payment);\n }\n\n if (!isHostedInstrumentLike(paymentData)) {\n throw new MissingDataError(MissingDataErrorType.MissingPayment);\n }\n\n const { shouldSaveInstrument, shouldSetAsDefaultInstrument } = paymentData;\n\n if (shouldSaveInstrument && !isVaultingEnabled) {\n throw new InvalidArgumentError(\n 'Vaulting is disabled but shouldSaveInstrument is set to true',\n );\n }\n\n const shippingAddress = state.getShippingAddress();\n\n const shippingAddressOverride = shippingAddress\n ? mapToBraintreeShippingAddressOverride(shippingAddress)\n : undefined;\n\n return Promise.all([\n this.braintreeIntegrationService.paypal({\n amount: grandTotal,\n locale: storeLanguage,\n currency: currency.code,\n offerCredit: this.paymentMethod.id === 'braintreepaypalcredit',\n shippingAddressOverride,\n shouldSaveInstrument: shouldSaveInstrument || false,\n shippingAddressEditable: false,\n }),\n this.braintreeIntegrationService.getSessionId(),\n ]).then(([{ nonce, details } = {} as any, sessionId]) => ({\n ...payment,\n paymentData: this.formattedPayload(\n nonce,\n details && details.email,\n sessionId,\n shouldSaveInstrument,\n shouldSetAsDefaultInstrument,\n ),\n }));\n }\n\n private formattedPayload(\n token: string,\n email?: string,\n sessionId?: string,\n vaultPaymentInstrument?: boolean,\n shouldSetAsDefaultInstrument?: boolean,\n ): FormattedPayload<PaypalInstrument> {\n return {\n formattedPayload: {\n vault_payment_instrument: vaultPaymentInstrument || null,\n set_as_default_stored_instrument: shouldSetAsDefaultInstrument || null,\n device_info: sessionId || null,\n paypal_account: {\n token,\n email: email || null,\n },\n },\n };\n }\n\n private async loadPaypalCheckoutInstance(options?: BraintreePaypalPaymentInitializeOptions) {\n const { clientToken, initializationData, id: paymentMethodId } = this.paymentMethod || {};\n\n if (!clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n try {\n this.braintreeIntegrationService.initialize(clientToken);\n\n const currencyCode = this.paymentIntegrationService.getState().getCartOrThrow()\n .currency.code;\n\n const paypalCheckoutConfig: Partial<BraintreePaypalSdkCreatorConfig> = {\n currency: currencyCode,\n intent: initializationData?.intent,\n isCreditEnabled: initializationData?.isCreditEnabled,\n };\n\n const isBraintreePaypalCredit = paymentMethodId === 'braintreepaypalcredit';\n const shouldShowPayPalCreditBanner =\n isBraintreePaypalCredit || !initializationData?.isCreditEnabled;\n\n await this.braintreeIntegrationService.getPaypalCheckout(\n paypalCheckoutConfig,\n (braintreePaypalCheckout) => {\n if (\n shouldShowPayPalCreditBanner &&\n paymentMethodId &&\n options?.bannerContainerId\n ) {\n this.renderPayPalMessages(paymentMethodId, options.bannerContainerId);\n }\n\n this.renderPayPalButton(braintreePaypalCheckout, options);\n },\n this.handleError,\n );\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private renderPayPalMessages(methodId: string, containerId: string) {\n this.braintreeMessages.render(methodId, containerId, MessagingPlacements.PAYMENT);\n }\n\n private renderPayPalButton(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n options?: BraintreePaypalPaymentInitializeOptions,\n ) {\n const { onPaymentError, submitForm, onRenderButton, containerId, onError } = options || {};\n\n if (!containerId) {\n return;\n }\n\n const container = this.getSmartButtonContainerId(containerId);\n const smartButtonContainer = document.getElementById(container);\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 if (!this.paymentMethod) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n this.loadingIndicatorContainer = containerId.split('#')[1];\n\n const {\n id,\n config: { testMode },\n } = this.paymentMethod;\n\n const { paypal } = this.braintreeHostWindow;\n const fundingSource = paypal?.FUNDING.PAYPAL;\n\n if (paypal && fundingSource) {\n this.paypalButtonRender = paypal.Buttons({\n env: testMode ? 'sandbox' : 'production',\n commit: false,\n fundingSource,\n onInit: (_, actions) => {\n options?.onInitButton?.(actions);\n },\n onClick: (_, actions) => {\n const { resolve, reject } = actions;\n\n const onValidationPassed = () => {\n this.toggleLoadingIndicator(true);\n\n return resolve();\n };\n\n return typeof options?.onValidate !== 'undefined'\n ? options.onValidate(onValidationPassed, reject)\n : onValidationPassed();\n },\n createOrder: () => this.setupPayment(braintreePaypalCheckout, id, onPaymentError),\n onApprove: async (authorizeData: PaypalAuthorizeData) => {\n this.braintreeTokenizePayload = await this.tokenizePaymentOrThrow(\n authorizeData,\n braintreePaypalCheckout,\n );\n\n if (submitForm && typeof submitForm === 'function') {\n submitForm();\n }\n },\n onCancel: () => {\n this.toggleLoadingIndicator(false);\n },\n onError: (error: Error) => {\n this.toggleLoadingIndicator(false);\n\n onError?.(error);\n },\n });\n\n if (onRenderButton && typeof onRenderButton === 'function') {\n onRenderButton();\n }\n\n if (this.paypalButtonRender.isEligible()) {\n this.paypalButtonRender.render(`${containerId}`);\n }\n } else {\n this.removeElement(containerId.split('#')[1]);\n }\n }\n\n private async setupPayment(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n method: string,\n onPaymentError: BraintreePaypalPaymentInitializeOptions['onPaymentError'],\n ): Promise<string> {\n const state = this.paymentIntegrationService.getState();\n\n try {\n const customer = state.getCustomer();\n\n const paymentMethod: PaymentMethod = state.getPaymentMethodOrThrow(method);\n\n const amount = state.getCheckoutOrThrow().outstandingBalance;\n const currencyCode = state.getStoreConfigOrThrow().currency.code;\n\n const shippingAddress = state.getShippingAddress();\n\n const address = shippingAddress || customer?.addresses[0];\n\n const shippingAddressOverride = address\n ? mapToBraintreeShippingAddressOverride(address)\n : undefined;\n\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n shippingAddressOverride,\n amount,\n currency: currencyCode,\n offerCredit: false,\n intent: paymentMethod.initializationData.intent,\n });\n } catch (error) {\n if (onPaymentError && (isBraintreeError(error) || error instanceof StandardError)) {\n onPaymentError(error);\n }\n\n throw error;\n }\n }\n\n private async tokenizePaymentOrThrow(\n authorizeData: PaypalAuthorizeData,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n onError?: (error: BraintreeError | StandardError) => void,\n ): Promise<BraintreeTokenizePayload> {\n try {\n return await braintreePaypalCheckout.tokenizePayment(authorizeData);\n } catch (error) {\n if (onError && (isBraintreeError(error) || error instanceof StandardError)) {\n onError(error);\n }\n\n throw error;\n }\n }\n\n private async loadPaypal() {\n const { clientToken, initializationData } = this.paymentMethod || {};\n\n if (!clientToken || !initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n try {\n this.braintreeIntegrationService.initialize(clientToken);\n\n await this.braintreeIntegrationService.getPaypal();\n } catch (error) {\n this.handleError(error);\n }\n\n return Promise.resolve();\n }\n\n private handleError(error: BraintreeError | Error | unknown): never {\n if (!isBraintreeError(error)) {\n throw error;\n }\n\n if (error.code === 'PAYPAL_POPUP_CLOSED') {\n throw new PaymentMethodCancelledError(error.message);\n }\n\n throw new PaymentMethodFailedError(error.message);\n }\n\n private isProviderError(error: unknown): boolean {\n if (isBraintreePaypalProviderError(error)) {\n const paypalProviderError = error?.errors?.filter((e) => e.provider_error) || [];\n\n return paypalProviderError[0]?.provider_error?.code === '2046';\n }\n\n return false;\n }\n\n private removeElement(elementId?: string): void {\n const element = elementId && document.getElementById(elementId);\n\n if (element) {\n element.remove();\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 private getSmartButtonContainerId(container: string) {\n return container.split('#')[1] ?? container;\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 isBraintreePaypalProviderError(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 BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeMessages,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator, Overlay } from '@bigcommerce/checkout-sdk/ui';\n\nimport { LOADING_INDICATOR_STYLES } from '../braintree-paypal-constants';\n\nimport BraintreePaypalPaymentStrategy from './braintree-paypal-payment-strategy';\n\nconst createBraintreePaypalPaymentStrategy: PaymentStrategyFactory<\n BraintreePaypalPaymentStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const overlay = new Overlay();\n\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n ),\n braintreeHostWindow,\n overlay,\n );\n const braintreeMessages = new BraintreeMessages(paymentIntegrationService);\n\n return new BraintreePaypalPaymentStrategy(\n paymentIntegrationService,\n braintreeIntegrationService,\n braintreeMessages,\n new LoadingIndicator({\n containerStyles: LOADING_INDICATOR_STYLES,\n }),\n );\n};\n\nexport default toResolvableModule(createBraintreePaypalPaymentStrategy, [\n { id: 'braintreepaypal' },\n { id: 'braintreepaypalcredit' },\n]);\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 { BraintreeOrderStatusData } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n ContentType,\n INTERNAL_USE_ONLY,\n RequestOptions,\n SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class BraintreeRequestSender {\n constructor(private requestSender: RequestSender) {}\n\n async getOrderStatus(\n methodId = 'braintreelocalmethods',\n options?: RequestOptions,\n ): Promise<BraintreeOrderStatusData> {\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<BraintreeOrderStatusData>(url, {\n headers,\n ...options,\n });\n\n return res.body;\n }\n}\n","export const INTERNAL_USE_ONLY =\n 'This API endpoint is for internal use only and may change in the future';\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","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 { 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 { noop } from 'lodash';\n\nimport {\n BraintreeInitializationData,\n BraintreeLocalPayment,\n BraintreeLocalPaymentConfig,\n BraintreeLocalPaymentMethodRedirectAction,\n BraintreeLocalPaymentsPayload,\n BraintreeLPMPaymentStartData,\n BraintreeLPMStartPaymentError,\n BraintreeOrderSavedResponse,\n BraintreeOrderStatus,\n BraintreeRedirectError,\n BraintreeSdk,\n NonInstantLocalPaymentMethods,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n OrderFinalizationNotRequiredError,\n OrderRequestBody,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentInstrumentMeta,\n PaymentIntegrationService,\n PaymentMethodInvalidError,\n PaymentRequestOptions,\n PaymentStrategy,\n RequestOptions,\n TimeoutError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport BraintreeRequestSender from '../braintree-request-sender';\n\nimport {\n BraintreeLocalMethodsPaymentInitializeOptions,\n WithBraintreeLocalMethodsPaymentInitializeOptions,\n} from './braintree-local-methods-payment-initialize-options';\n\nconst POLLING_INTERVAL = 3000;\nconst MAX_POLLING_TIME = 300000;\n\nexport default class BraintreeLocalMethodsPaymentStrategy implements PaymentStrategy {\n private braintreelocalmethods?: BraintreeLocalMethodsPaymentInitializeOptions;\n private braintreeLocalPayment?: BraintreeLocalPayment;\n private loadingIndicatorContainer?: string;\n private orderId?: string;\n private gatewayId?: string;\n private isLPMsUpdateExperimentEnabled = false;\n private pollingTimer = 0;\n private stopPolling = noop;\n private isPollingEnabled = false;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private braintreeSdk: BraintreeSdk,\n private braintreeRequestSender: BraintreeRequestSender,\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 & WithBraintreeLocalMethodsPaymentInitializeOptions,\n ): Promise<void> {\n const { gatewayId, methodId, braintreelocalmethods } = options;\n\n this.gatewayId = gatewayId;\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 (!braintreelocalmethods) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreelocalmethods\" argument is not provided.`,\n );\n }\n\n this.braintreelocalmethods = braintreelocalmethods;\n this.loadingIndicatorContainer = braintreelocalmethods.container.split('#')[1];\n\n await this.paymentIntegrationService.loadPaymentMethod(gatewayId);\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow<BraintreeInitializationData>(gatewayId);\n const { clientToken, config, initializationData } = paymentMethod;\n const features = state.getStoreConfigOrThrow().checkoutSettings.features;\n\n this.isPollingEnabled = isExperimentEnabled(\n features,\n 'PAYPAL-5258.braintree_local_methods_polling',\n );\n\n this.isLPMsUpdateExperimentEnabled = isExperimentEnabled(\n features,\n 'PAYPAL-4853.add_new_payment_flow_for_braintree_lpms',\n );\n\n if (!clientToken || !initializationData || !config.merchantId) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n try {\n this.braintreeSdk.initialize(clientToken);\n\n if (!this.isNonInstantPaymentMethod(methodId)) {\n this.braintreeLocalPayment = await this.braintreeSdk.getBraintreeLocalPayment(\n config.merchantId,\n );\n }\n } catch (error: unknown) {\n this.handleError(error);\n }\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n async deinitialize(): Promise<void> {\n this.toggleLoadingIndicator(false);\n\n return Promise.resolve();\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 } = payment;\n\n this.toggleLoadingIndicator(true);\n\n if (this.isNonInstantPaymentMethod(methodId)) {\n await this.executeWithNotInstantLPM(methodId);\n } else {\n await this.executeWithInstantLPM(methodId, order, options);\n }\n }\n\n private async executeWithNotInstantLPM(methodId: string): Promise<void> {\n try {\n const basicPaymentData = await this.getLPMsBasicPaymentData();\n\n await this.paymentIntegrationService.submitOrder();\n await this.paymentIntegrationService.submitPayment({\n methodId,\n paymentData: {\n ...basicPaymentData,\n formattedPayload: {\n method: methodId,\n },\n },\n });\n } catch (error: unknown) {\n if (this.isBraintreeRedirectError(error)) {\n const redirectUrl = error.body.additional_action_required.data.redirect_url;\n\n return new Promise((_, reject) => {\n window.location.replace(redirectUrl);\n\n this.toggleLoadingIndicator(false);\n\n reject();\n });\n }\n\n this.handleError(error);\n\n return Promise.reject(error);\n }\n }\n\n private async executeWithInstantLPM(\n methodId: string,\n order: Omit<OrderRequestBody, 'payment'>,\n options?: PaymentRequestOptions,\n ): Promise<void> {\n if (!this.braintreeLocalPayment) {\n throw new PaymentMethodInvalidError();\n }\n\n await new Promise((resolve, reject): void => {\n this.braintreeLocalPayment?.startPayment(\n this.getInstantLPMConfig(methodId, order, options),\n this.getInstantLPMCallback(resolve, reject, methodId, order, options),\n );\n });\n }\n\n private async getLPMsBasicPaymentData(): Promise<PaymentInstrumentMeta> {\n const { deviceData } = await this.braintreeSdk.getDataCollectorOrThrow();\n\n return { deviceSessionId: deviceData };\n }\n\n private getInstantLPMConfig(\n methodId: string,\n order: Omit<OrderRequestBody, 'payment'>,\n options?: RequestOptions,\n ): BraintreeLocalPaymentConfig {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const billing = state.getBillingAddressOrThrow();\n const { firstName, lastName, countryCode } = billing;\n const { currency, email, lineItems } = cart;\n const isShippingRequired = lineItems.physicalItems.length > 0;\n const grandTotal = state.getCheckoutOrThrow().outstandingBalance;\n const checkoutUrl = state.getStoreConfigOrThrow().links.checkoutLink;\n\n return {\n paymentType: methodId,\n amount: grandTotal,\n fallback: {\n url: checkoutUrl,\n buttonText: 'Complete Payment',\n },\n currencyCode: currency.code,\n shippingAddressRequired: isShippingRequired,\n email,\n givenName: firstName,\n surname: lastName,\n address: {\n countryCode,\n },\n onPaymentStart: async (data: BraintreeLPMPaymentStartData, start: () => void) => {\n if (!this.isLPMsUpdateExperimentEnabled) {\n this.orderId = data.paymentId;\n\n start();\n\n return;\n }\n\n const basicPaymentData = await this.getLPMsBasicPaymentData();\n const paymentData = {\n ...basicPaymentData,\n formattedPayload: {\n method: methodId,\n [`${methodId}_account`]: {\n order_id: data.paymentId,\n },\n },\n };\n\n try {\n // Submit order and payment should be performed to pass order_id to the backend\n await this.paymentIntegrationService.submitOrder(order, options);\n await this.paymentIntegrationService.submitPayment({\n methodId,\n paymentData,\n });\n } catch (error: unknown) {\n if (\n this.isBraintreeOrderSavedResponse(error) &&\n error.body.additional_action_required.data.order_id_saved_successfully\n ) {\n // Start method call initiates the popup\n start();\n\n if (this.isPollingEnabled) {\n return new Promise((resolve, reject) => {\n void this.initializePollingMechanism(\n methodId,\n resolve,\n reject,\n this.gatewayId,\n );\n });\n }\n\n return;\n }\n\n throw error;\n }\n },\n };\n }\n\n private getInstantLPMCallback(\n resolve: (value: unknown) => void,\n reject: (reason?: unknown) => void,\n methodId: string,\n order: Omit<OrderRequestBody, 'payment'>,\n options?: RequestOptions,\n ) {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n\n return async (\n startPaymentError: BraintreeLPMStartPaymentError | undefined,\n payloadData: BraintreeLocalPaymentsPayload,\n ) => {\n if (startPaymentError) {\n if (startPaymentError.code === 'LOCAL_PAYMENT_WINDOW_CLOSED') {\n this.toggleLoadingIndicator(false);\n this.resetPollingMechanism();\n\n return reject();\n }\n\n if (this.isPollingEnabled) {\n this.resetPollingMechanism();\n }\n\n this.toggleLoadingIndicator(false);\n\n return reject(new PaymentMethodInvalidError());\n }\n\n const basicPaymentData = await this.getLPMsBasicPaymentData();\n const paymentData = {\n ...basicPaymentData,\n formattedPayload: {\n method: methodId,\n [`${methodId}_account`]: {\n email: cart.email,\n token: payloadData.nonce,\n ...(!this.isLPMsUpdateExperimentEnabled ? { order_id: this.orderId } : {}),\n },\n },\n };\n\n try {\n if (!this.isLPMsUpdateExperimentEnabled) {\n await this.paymentIntegrationService.submitOrder(order, options);\n }\n\n await this.paymentIntegrationService.submitPayment({\n methodId,\n paymentData,\n });\n\n return resolve(undefined);\n } catch (error: unknown) {\n this.handleError(error);\n\n return reject(error);\n }\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 private handleError(error: unknown) {\n const { onError } = this.braintreelocalmethods || {};\n\n if (this.isPollingEnabled) {\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 * Utils\n *\n * */\n private isNonInstantPaymentMethod(methodId: string): boolean {\n return methodId.toUpperCase() in NonInstantLocalPaymentMethods;\n }\n\n private isBraintreeRedirectError(error: unknown): error is BraintreeRedirectError {\n if (typeof error !== 'object' || error === null) {\n return false;\n }\n\n const { body }: Partial<BraintreeLocalPaymentMethodRedirectAction> = error;\n\n if (!body) {\n return false;\n }\n\n return !!body.additional_action_required?.data.redirect_url;\n }\n\n private isBraintreeOrderSavedResponse(\n response: unknown,\n ): response is BraintreeOrderSavedResponse {\n if (typeof response !== 'object' || response === null) {\n return false;\n }\n\n const { body }: Partial<BraintreeOrderSavedResponse> = response;\n\n if (!body) {\n return false;\n }\n\n return body.additional_action_required?.data.hasOwnProperty('order_id_saved_successfully');\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.braintreeRequestSender.getOrderStatus(gatewayId, {\n params: {\n useMetadata: false,\n },\n });\n\n const isOrderPending = orderStatus.status === BraintreeOrderStatus.Pending;\n const isOrderApproved = orderStatus.status === BraintreeOrderStatus.Completed;\n const isPollingError = orderStatus.status === BraintreeOrderStatus.Failed;\n\n if (isOrderApproved) {\n this.deinitializePollingMechanism();\n\n return resolvePromise();\n }\n\n if (isPollingError) {\n return rejectPromise();\n }\n\n if (\n !isOrderApproved &&\n isOrderPending &&\n this.pollingTimer < this.maxPollingIntervalTime\n ) {\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 braintreelocalmethods: this.braintreelocalmethods,\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 & WithBraintreeLocalMethodsPaymentInitializeOptions,\n ) {\n await this.deinitialize();\n await this.initialize(options);\n }\n}\n","import { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeScriptLoader,\n BraintreeSdk,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport BraintreeRequestSender from '../braintree-request-sender';\n\nimport BraintreeLocalMethodsPaymentStrategy from './braintree-local-methods-payment-strategy';\n\nconst createBraintreeLocalMethodsPaymentStrategy: PaymentStrategyFactory<\n BraintreeLocalMethodsPaymentStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeSdk = new BraintreeSdk(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n ),\n );\n const requestSender = createRequestSender();\n const braintreeRequestSender = new BraintreeRequestSender(requestSender);\n\n return new BraintreeLocalMethodsPaymentStrategy(\n paymentIntegrationService,\n braintreeSdk,\n braintreeRequestSender,\n new LoadingIndicator({ styles: { backgroundColor: 'black' } }),\n );\n};\n\nexport default toResolvableModule(createBraintreeLocalMethodsPaymentStrategy, [\n { gateway: 'braintreelocalmethods' },\n]);\n","import { omitBy } from 'lodash';\n\nimport { BraintreeFastlaneStylesOption, FastlaneStylesSettings } from '../index';\n\nfunction isInvalidStyleOption(styleOption: unknown) {\n return typeof styleOption !== 'string';\n}\n\nexport default function getFastlaneStyles(\n styleSettings?: FastlaneStylesSettings,\n uiStyles?: BraintreeFastlaneStylesOption,\n): BraintreeFastlaneStylesOption | undefined {\n if (!uiStyles && !styleSettings) {\n return undefined;\n }\n\n return cleanUpFastlaneStyles(mergeFastlaneStyles(styleSettings, uiStyles));\n}\n\nfunction mergeFastlaneStyles(\n styleSettings?: FastlaneStylesSettings,\n uiStyles?: BraintreeFastlaneStylesOption,\n): BraintreeFastlaneStylesOption {\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: BraintreeFastlaneStylesOption) {\n const fastlaneStyles: BraintreeFastlaneStylesOption = {};\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\nexport default function isBraintreeAcceleratedCheckoutCustomer(\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 { 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","import {\n Braintree3DSVerifyCardError,\n Braintree3DSVerifyCardPayload,\n BraintreeFastlaneAddress,\n BraintreeFastlaneAuthenticationState,\n BraintreeFastlaneCardComponent,\n BraintreeFastlaneCardComponentOptions,\n BraintreeInitializationData,\n BraintreeSdk,\n getFastlaneStyles,\n isBraintreeAcceleratedCheckoutCustomer,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n Address,\n CardInstrument,\n InvalidArgumentError,\n OrderFinalizationNotRequiredError,\n OrderRequestBody,\n Payment,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethodCancelledError,\n PaymentMethodClientUnavailableError,\n PaymentRequestOptions,\n PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport { WithBraintreeFastlanePaymentInitializeOptions } from './braintree-fastlane-payment-initialize-options';\nimport BraintreeFastlaneUtils from './braintree-fastlane-utils';\n\nexport default class BraintreeFastlanePaymentStrategy implements PaymentStrategy {\n private braintreeCardComponent?: BraintreeFastlaneCardComponent;\n private is3DSEnabled?: boolean;\n private onError?: (error: Error) => void;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private braintreeFastlaneUtils: BraintreeFastlaneUtils,\n private braintreeSdk: BraintreeSdk,\n ) {}\n\n /**\n *\n * Default methods\n *\n */\n async initialize(\n options: PaymentInitializeOptions & WithBraintreeFastlanePaymentInitializeOptions,\n ): Promise<void> {\n const { methodId, braintreefastlane } = 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 (!braintreefastlane) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.braintreefastlane\" argument is not provided.',\n );\n }\n\n if (!braintreefastlane.onInit || typeof braintreefastlane.onInit !== 'function') {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.braintreefastlane.onInit\" argument is not provided or it is not a function.',\n );\n }\n\n if (!braintreefastlane.onChange || typeof braintreefastlane.onChange !== 'function') {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.braintreefastlane.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 paymentMethod = state.getPaymentMethodOrThrow<BraintreeInitializationData>(methodId);\n const { initializationData, clientToken } = paymentMethod || {};\n const { isFastlaneStylingEnabled } = initializationData || {};\n const features = state.getStoreConfigOrThrow().checkoutSettings.features;\n const isThreeDSExperimentEnabled = isExperimentEnabled(\n features,\n 'PROJECT-7080.braintree_fastlane_three_ds',\n );\n\n this.is3DSEnabled = paymentMethod.config.is3dsEnabled;\n\n if (clientToken && isThreeDSExperimentEnabled) {\n this.braintreeSdk.initialize(clientToken);\n }\n\n const paypalFastlaneStyleSettings = isFastlaneStylingEnabled\n ? paymentMethod.initializationData?.fastlaneStyles\n : undefined;\n\n const fastlaneStyles = getFastlaneStyles(\n paypalFastlaneStyleSettings,\n braintreefastlane.styles,\n );\n\n await this.braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow(\n methodId,\n fastlaneStyles,\n );\n\n if (this.shouldRunAuthenticationFlow()) {\n await this.braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow();\n }\n\n await this.initializeCardComponent();\n\n this.onError = braintreefastlane.onError;\n\n braintreefastlane.onInit((container) => this.renderBraintreeCardComponent(container));\n braintreefastlane.onChange(() => this.handleBraintreeStoredInstrumentChange(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 await this.paymentIntegrationService.submitOrder(order, options);\n\n const paymentPayload = await this.preparePaymentPayload(payment.methodId);\n\n await this.paymentIntegrationService.submitPayment(paymentPayload);\n\n this.braintreeFastlaneUtils.removeSessionIdFromCookies();\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n async deinitialize(): Promise<void> {\n this.braintreeCardComponent = undefined;\n\n return Promise.resolve();\n }\n\n /**\n *\n * Braintree Fastlane Component rendering method\n *\n */\n private async initializeCardComponent() {\n const state = this.paymentIntegrationService.getState();\n const { phone, firstName, lastName } = state.getBillingAddressOrThrow();\n const fullName = `${firstName} ${lastName}`;\n\n const cardComponentOptions: BraintreeFastlaneCardComponentOptions = {\n styles: {},\n fields: {\n cardholderName: {\n prefill: fullName,\n enabled: true,\n },\n ...(phone && {\n phoneNumber: {\n prefill: phone,\n },\n }),\n },\n };\n\n const paypalPaymentComponent =\n this.braintreeFastlaneUtils.getBraintreeFastlaneComponentOrThrow();\n\n this.braintreeCardComponent = await paypalPaymentComponent(cardComponentOptions);\n }\n\n private renderBraintreeCardComponent(container?: string) {\n const braintreeCardComponent = this.getBraintreeCardComponentOrThrow();\n\n if (!container) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"container\" argument is not provided.',\n );\n }\n\n braintreeCardComponent.render(container);\n }\n\n /**\n *\n * Payment Payload preparation methods\n *\n */\n private async preparePaymentPayload(methodId: string): Promise<Payment> {\n const state = this.paymentIntegrationService.getState();\n const billingAddress = state.getBillingAddressOrThrow();\n const fullName = `${billingAddress.firstName} ${billingAddress.lastName}`;\n\n const paypalInstrument = this.getPayPalInstruments()[0];\n\n const deviceSessionId = await this.braintreeFastlaneUtils.getDeviceSessionId();\n const features = state.getStoreConfigOrThrow().checkoutSettings.features;\n const isThreeDSExperimentEnabled = isExperimentEnabled(\n features,\n 'PROJECT-7080.braintree_fastlane_three_ds',\n );\n\n if (paypalInstrument) {\n const threeDSToken =\n this.is3DSEnabled && isThreeDSExperimentEnabled\n ? await this.get3DS(paypalInstrument.bigpayToken, paypalInstrument?.iin || '')\n : undefined;\n\n return {\n methodId,\n paymentData: {\n deviceSessionId,\n formattedPayload: {\n paypal_fastlane_token: {\n token: threeDSToken || paypalInstrument.bigpayToken,\n },\n },\n },\n };\n }\n\n const { getPaymentToken } = this.getBraintreeCardComponentOrThrow();\n\n const paymentToken = await getPaymentToken({\n name: { fullName },\n billingAddress: this.mapToPayPalAddress(billingAddress),\n });\n\n const binGuest = paymentToken.paymentSource.card?.binDetails?.bin || '';\n const threeDSToken =\n this.is3DSEnabled && isThreeDSExperimentEnabled\n ? await this.get3DS(paymentToken.id, binGuest)\n : undefined;\n\n return {\n methodId,\n paymentData: {\n deviceSessionId,\n nonce: threeDSToken || paymentToken.id,\n },\n };\n }\n\n /**\n * 3DS\n */\n private async get3DS(nonce: string, bin: string): Promise<string> {\n const state = this.paymentIntegrationService.getState();\n const threeDSecure = await this.braintreeSdk.getBraintreeThreeDS();\n const order = state.getOrderOrThrow();\n\n return new Promise<string>((resolve, reject) => {\n void threeDSecure.verifyCard(\n {\n amount: order?.orderAmount,\n nonce,\n bin,\n onLookupComplete: (_data, next) => {\n threeDSecure.on('customer-canceled', () => {\n if (typeof this.onError === 'function') {\n this.onError(new PaymentMethodCancelledError());\n }\n\n reject(new PaymentMethodCancelledError());\n });\n\n next();\n },\n },\n (\n verifyError: Braintree3DSVerifyCardError,\n payload: Braintree3DSVerifyCardPayload,\n ) => {\n if (\n verifyError &&\n verifyError.code === 'THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT'\n ) {\n if (typeof this.onError === 'function') {\n this.onError(new PaymentMethodCancelledError());\n }\n\n reject(new PaymentMethodCancelledError());\n }\n\n return resolve(payload.nonce);\n },\n );\n });\n }\n\n /**\n *\n * Mapper methods\n *\n */\n private mapToPayPalAddress(address?: Address): BraintreeFastlaneAddress {\n return {\n streetAddress: address?.address1 || '',\n locality: address?.city || '',\n region: address?.stateOrProvinceCode || address?.stateOrProvince || '',\n postalCode: address?.postalCode || '',\n countryCodeAlpha2: address?.countryCode || '',\n };\n }\n\n /**\n *\n * Other 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 braintreePaymentProviderCustomer = isBraintreeAcceleratedCheckoutCustomer(\n paymentProviderCustomer,\n )\n ? paymentProviderCustomer\n : {};\n\n const paypalFastlaneSessionId = this.braintreeFastlaneUtils.getSessionIdFromCookies();\n\n if (\n !customer.isGuest ||\n braintreePaymentProviderCustomer?.authenticationState ===\n BraintreeFastlaneAuthenticationState.CANCELED\n ) {\n return false;\n }\n\n return (\n !braintreePaymentProviderCustomer?.authenticationState &&\n paypalFastlaneSessionId === cart.id\n );\n }\n\n private getBraintreeCardComponentOrThrow() {\n if (!this.braintreeCardComponent) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.braintreeCardComponent;\n }\n\n private getPayPalInstruments(): CardInstrument[] {\n const state = this.paymentIntegrationService.getState();\n const paymentProviderCustomer = state.getPaymentProviderCustomerOrThrow();\n const braintreePaymentProviderCustomer = isBraintreeAcceleratedCheckoutCustomer(\n paymentProviderCustomer,\n )\n ? paymentProviderCustomer\n : {};\n\n return braintreePaymentProviderCustomer.instruments || [];\n }\n\n /**\n *\n * Braintree Fastlane instrument change\n *\n */\n private async handleBraintreeStoredInstrumentChange(\n methodId: string,\n ): Promise<CardInstrument | undefined> {\n const paypalAxoSdk = this.braintreeFastlaneUtils.getBraintreeFastlaneOrThrow();\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 braintreeFastlaneCustomer = isBraintreeAcceleratedCheckoutCustomer(\n paymentProviderCustomer,\n )\n ? paymentProviderCustomer\n : {};\n\n const selectedInstruments = this.braintreeFastlaneUtils.mapPayPalToBcInstrument(\n methodId,\n [selectedCard],\n );\n\n if (selectedInstruments && selectedInstruments.length > 0) {\n await this.paymentIntegrationService.updatePaymentProviderCustomer({\n ...braintreeFastlaneCustomer,\n instruments: [...selectedInstruments],\n });\n\n return selectedInstruments[0];\n }\n }\n\n return undefined;\n }\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","import { isEqual, omit } from 'lodash';\n\nimport {\n BraintreeFastlane,\n BraintreeFastlaneAddress,\n BraintreeFastlaneAuthenticationState,\n BraintreeFastlaneProfileData,\n BraintreeFastlaneStylesOption,\n BraintreeFastlaneVaultedInstrument,\n BraintreeInitializationData,\n BraintreeIntegrationService,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CardInstrument,\n CustomerAddress,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethodClientUnavailableError,\n UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { CookieStorage } from '@bigcommerce/checkout-sdk/storage';\n\nexport default class BraintreeFastlaneUtils {\n private braintreeFastlane?: BraintreeFastlane;\n private methodId?: string;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private braintreeIntegrationService: BraintreeIntegrationService,\n ) {}\n\n async getDeviceSessionId(): Promise<string | undefined> {\n const cart = this.paymentIntegrationService.getState().getCart();\n\n return this.braintreeIntegrationService.getSessionId(cart?.id);\n }\n\n /**\n *\n * Initialization method\n *\n */\n async initializeBraintreeFastlaneOrThrow(\n methodId: string,\n styles?: BraintreeFastlaneStylesOption,\n ) {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCart();\n const { clientToken, config } =\n state.getPaymentMethodOrThrow<BraintreeInitializationData>(methodId);\n\n if (!clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n this.methodId = methodId;\n\n this.braintreeIntegrationService.initialize(clientToken);\n\n this.braintreeFastlane = await this.braintreeIntegrationService.getBraintreeFastlane(\n cart?.id,\n config.testMode,\n styles,\n );\n }\n\n getBraintreeFastlaneOrThrow(): BraintreeFastlane {\n if (!this.braintreeFastlane) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.braintreeFastlane;\n }\n\n getBraintreeFastlaneComponentOrThrow(): BraintreeFastlane['FastlaneCardComponent'] {\n const braintreeFastlane = this.getBraintreeFastlaneOrThrow();\n\n return braintreeFastlane.FastlaneCardComponent;\n }\n\n /**\n *\n * Authentication methods\n *\n * */\n // Remove this rule disabling after method refactor\n // eslint-disable-next-line complexity\n async runPayPalAuthenticationFlowOrThrow(\n email?: string,\n shouldSetShippingOption?: boolean,\n ): Promise<void> {\n try {\n const methodId = this.getMethodIdOrThrow();\n const braintreeFastlane = this.getBraintreeFastlaneOrThrow();\n const { lookupCustomerByEmail, triggerAuthenticationFlow } = braintreeFastlane.identity;\n\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const customer = state.getCustomer();\n const billingAddress = state.getBillingAddress();\n const { isFastlaneShippingOptionAutoSelectEnabled } =\n state.getPaymentMethodOrThrow<BraintreeInitializationData>(methodId)\n .initializationData || {};\n\n const customerEmail = email || customer?.email || billingAddress?.email || '';\n\n const { customerContextId } = await lookupCustomerByEmail(customerEmail);\n\n if (!customerContextId) {\n // Info: we should clean up previous experience with default data and related authenticationState\n await this.paymentIntegrationService.updatePaymentProviderCustomer({\n authenticationState: BraintreeFastlaneAuthenticationState.UNRECOGNIZED,\n addresses: [],\n instruments: [],\n });\n\n this.saveSessionIdToCookies(cart.id);\n\n return;\n }\n\n const { authenticationState, profileData } = await triggerAuthenticationFlow(\n customerContextId,\n );\n\n const phoneNumber = profileData?.shippingAddress?.phoneNumber || '';\n\n if (authenticationState === BraintreeFastlaneAuthenticationState.CANCELED) {\n await this.paymentIntegrationService.updatePaymentProviderCustomer({\n authenticationState,\n addresses: [],\n instruments: [],\n });\n\n this.removeSessionIdFromCookies();\n\n return;\n }\n\n const shippingAddresses =\n this.mapPayPalToBcAddress([profileData.shippingAddress], [phoneNumber]) || [];\n const paypalBillingAddress = this.getPayPalBillingAddresses(profileData);\n const billingAddresses = paypalBillingAddress\n ? this.mapPayPalToBcAddress([paypalBillingAddress], [phoneNumber])\n : [];\n const instruments = profileData.card\n ? this.mapPayPalToBcInstrument(methodId, [profileData.card])\n : [];\n const addresses = this.mergeShippingAndBillingAddresses(\n shippingAddresses,\n billingAddresses,\n );\n\n this.saveSessionIdToCookies(cart.id);\n\n await this.paymentIntegrationService.updatePaymentProviderCustomer({\n authenticationState,\n addresses,\n instruments,\n });\n\n if (billingAddresses.length > 0 && cart.lineItems.physicalItems.length > 0) {\n await this.paymentIntegrationService.updateBillingAddress(billingAddresses[0]);\n }\n\n // Prefill billing form if only digital items in cart with billing data and firstName and lastName\n // from shippingAddresses because there are empty in billing\n if (\n billingAddresses.length > 0 &&\n cart.lineItems.digitalItems.length > 0 &&\n cart.lineItems.physicalItems.length === 0\n ) {\n const { firstName, lastName } = addresses[0];\n const digitalItemBilling = {\n ...billingAddresses[0],\n firstName,\n lastName,\n };\n\n await this.paymentIntegrationService.updateBillingAddress(digitalItemBilling);\n }\n\n if (shippingAddresses.length > 0 && cart.lineItems.physicalItems.length > 0) {\n await this.paymentIntegrationService.updateShippingAddress(shippingAddresses[0]);\n\n if (shouldSetShippingOption && isFastlaneShippingOptionAutoSelectEnabled) {\n await this.setShippingOption();\n }\n }\n } catch (error) {\n // TODO: we should figure out what to do here\n // TODO: because we should not to stop the flow if the error occurs on paypal side\n }\n }\n\n /**\n *\n * Session id management\n *\n */\n getSessionIdFromCookies(): string {\n return CookieStorage.get('bc-fastlane-sessionId') || '';\n }\n\n saveSessionIdToCookies(sessionId: string): void {\n const expires = new Date();\n\n expires.setDate(expires.getDate() + 14); // 2 weeks expiry\n\n CookieStorage.set('bc-fastlane-sessionId', sessionId, {\n expires,\n secure: true,\n });\n }\n\n removeSessionIdFromCookies(): void {\n CookieStorage.remove('bc-fastlane-sessionId');\n }\n\n /**\n *\n * PayPal to BC data mappers\n *\n * */\n mapPayPalToBcInstrument(\n methodId: string,\n instruments?: BraintreeFastlaneVaultedInstrument[],\n ): CardInstrument[] | undefined {\n if (!instruments) {\n return;\n }\n\n return instruments.map((instrument) => {\n const { id, paymentSource } = instrument;\n const { brand, expiry, lastDigits, binDetails } = paymentSource.card;\n\n const [expiryYear, expiryMonth] = expiry.split('-');\n\n return {\n bigpayToken: id,\n brand,\n defaultInstrument: false,\n expiryMonth,\n expiryYear,\n iin: binDetails?.bin || '',\n last4: lastDigits,\n method: methodId,\n provider: methodId,\n trustedShippingAddress: false,\n type: 'card',\n untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n };\n });\n }\n\n private mapPayPalToBcAddress(\n addresses?: BraintreeFastlaneAddress[],\n phones?: string[],\n ): CustomerAddress[] {\n if (!addresses) {\n return [];\n }\n\n const countries = this.paymentIntegrationService.getState().getCountries() || [];\n\n const getCountryNameByCountryCode = (countryCode: string) => {\n const matchedCountry = countries.find((country) => country.code === countryCode);\n\n return matchedCountry?.name || '';\n };\n\n return addresses.map((address) => ({\n id: Date.now(),\n type: 'paypal-address',\n firstName: address.firstName || '',\n lastName: address.lastName || '',\n company: address.company || '',\n address1: address.streetAddress,\n address2: address.extendedAddress || '',\n city: address.locality,\n stateOrProvince: address.region,\n stateOrProvinceCode: address.region,\n country: getCountryNameByCountryCode(address.countryCodeAlpha2),\n countryCode: address.countryCodeAlpha2,\n postalCode: address.postalCode,\n phone: (phones && phones[0]) || '',\n customFields: [],\n }));\n }\n\n /**\n *\n * Get PayPal billing addresses from stored braintree instruments info\n *\n * */\n private getPayPalBillingAddresses(\n profileData?: BraintreeFastlaneProfileData,\n ): BraintreeFastlaneAddress | undefined {\n const { card, name } = profileData || {};\n\n if (!card) {\n return;\n }\n\n const { firstName, lastName } = card.paymentSource.card.billingAddress;\n const { firstName: given_name, lastName: surname } = name || {};\n const { shippingAddress } = profileData || {};\n const address = {\n ...card.paymentSource.card.billingAddress,\n firstName: firstName || given_name,\n lastName: lastName || surname,\n };\n\n const isAddressExist =\n shippingAddress &&\n isEqual(this.normalizeAddress(address), this.normalizeAddress(shippingAddress));\n\n return isAddressExist ? shippingAddress : address;\n }\n\n private normalizeAddress(address: CustomerAddress | BraintreeFastlaneAddress) {\n return omit(address, ['id']);\n }\n\n private mergeShippingAndBillingAddresses(\n shippingAddresses: CustomerAddress[],\n billingAddresses: CustomerAddress[],\n ): CustomerAddress[] {\n const filteredBillingAddresses = billingAddresses.filter(\n (billingAddress: CustomerAddress) =>\n !shippingAddresses.some((shippingAddress: CustomerAddress) => {\n return isEqual(\n this.normalizeAddress(shippingAddress),\n this.normalizeAddress(billingAddress),\n );\n }),\n );\n\n return [...shippingAddresses, ...filteredBillingAddresses];\n }\n\n /**\n *\n * Other\n *\n * */\n private getMethodIdOrThrow(): string {\n if (!this.methodId) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"methodId\" argument is not provided.',\n );\n }\n\n return this.methodId;\n }\n\n private async setShippingOption(): Promise<void> {\n const state = this.paymentIntegrationService.getState();\n const consignments = state.getConsignments() || [];\n const availableShippingOptions = consignments[0]?.availableShippingOptions || [];\n const recommendedShippingOption = availableShippingOptions.find(\n (option) => option.isRecommended,\n );\n\n if (recommendedShippingOption || availableShippingOptions.length) {\n const selectedOption = recommendedShippingOption || availableShippingOptions[0];\n\n await this.paymentIntegrationService.selectShippingOption(selectedOption.id);\n }\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeScriptLoader,\n BraintreeSdk,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeFastlanePaymentStrategy from './braintree-fastlane-payment-strategy';\nimport BraintreeFastlaneUtils from './braintree-fastlane-utils';\n\nconst createBraintreeFastlanePaymentStrategy: PaymentStrategyFactory<\n BraintreeFastlanePaymentStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n ),\n braintreeHostWindow,\n );\n\n const braintreeFastlaneUtils = new BraintreeFastlaneUtils(\n paymentIntegrationService,\n braintreeIntegrationService,\n );\n\n const braintreeScriptLoader = new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n );\n\n const braintreeSdk = new BraintreeSdk(braintreeScriptLoader);\n\n return new BraintreeFastlanePaymentStrategy(\n paymentIntegrationService,\n braintreeFastlaneUtils,\n braintreeSdk,\n );\n};\n\nexport default toResolvableModule(createBraintreeFastlanePaymentStrategy, [\n { id: 'braintreeacceleratedcheckout' },\n]);\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { noop } from 'lodash';\n\nimport {\n BraintreeDataCollector,\n BraintreeInitializationData,\n BraintreeSdk,\n BraintreeVisaCheckout,\n VisaCheckoutAddress,\n VisaCheckoutPaymentSuccessPayload,\n VisaCheckoutTokenizedPayload,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n Address,\n InvalidArgumentError,\n LegacyAddress,\n MissingDataError,\n MissingDataErrorType,\n OrderFinalizationNotRequiredError,\n OrderRequestBody,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethod,\n PaymentMethodFailedError,\n PaymentRequestOptions,\n PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithBraintreeVisaCheckoutPaymentInitializeOptions } from './braintree-visa-checkout-payment-options';\n\nexport default class BraintreeVisaCheckoutPaymentStrategy implements PaymentStrategy {\n private paymentMethod?: PaymentMethod<BraintreeInitializationData>;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private formPoster: FormPoster,\n private braintreeSdk: BraintreeSdk,\n ) {}\n\n async initialize(\n options: PaymentInitializeOptions & WithBraintreeVisaCheckoutPaymentInitializeOptions,\n ): Promise<void> {\n const { braintreevisacheckout: visaCheckoutOptions, methodId } = options;\n\n if (!visaCheckoutOptions) {\n throw new InvalidArgumentError(\n 'Unable to initialize payment because \"options.braintreevisacheckout\" argument is not provided.',\n );\n }\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n\n this.paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n const checkout = state.getCheckoutOrThrow();\n const storeConfig = state.getStoreConfigOrThrow();\n\n const { clientToken, config } = this.paymentMethod || {};\n\n if (!clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const { onError = noop, onPaymentSelect = noop } = visaCheckoutOptions;\n\n this.braintreeSdk.initialize(clientToken);\n\n const braintreeVisaCheckout = await this.braintreeSdk.getBraintreeVisaCheckout();\n\n const visaCheckoutSdk = await this.braintreeSdk.getVisaCheckoutSdk(config?.testMode);\n\n const initOptions = braintreeVisaCheckout.createInitOptions({\n settings: {\n locale: storeConfig.storeProfile.storeLanguage,\n shipping: {\n collectShipping: false,\n },\n },\n paymentRequest: {\n currencyCode: storeConfig.currency.code,\n subtotal: String(checkout.subtotal),\n },\n });\n\n await visaCheckoutSdk.init(initOptions);\n\n visaCheckoutSdk.on(\n 'payment.success',\n (paymentSuccessPayload: VisaCheckoutPaymentSuccessPayload) =>\n this.tokenizePayment(braintreeVisaCheckout, paymentSuccessPayload)\n .then(() =>\n Promise.all([\n this.paymentIntegrationService.loadCheckout(),\n this.paymentIntegrationService.loadPaymentMethod(methodId),\n ]),\n )\n .then(() => onPaymentSelect())\n .catch((error) => onError(error)),\n );\n visaCheckoutSdk.on('payment.error', (_, error) => onError(error));\n }\n\n async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n const { payment, ...order } = payload;\n\n if (!payment) {\n throw new InvalidArgumentError(\n 'Unable to submit payment because \"payload.payment\" argument is not provided.',\n );\n }\n\n if (!this.paymentMethod?.initializationData?.nonce) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const { nonce } = this.paymentMethod.initializationData;\n\n try {\n await this.paymentIntegrationService.submitOrder(order, options);\n await this.paymentIntegrationService.submitPayment({\n ...payment,\n paymentData: { nonce },\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n finalize(): Promise<any> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreeSdk.deinitialize();\n }\n\n private async tokenizePayment(\n braintreeVisaCheckout: BraintreeVisaCheckout,\n payment: VisaCheckoutPaymentSuccessPayload,\n ) {\n return Promise.all([\n braintreeVisaCheckout.tokenize(payment),\n this.braintreeSdk.getDataCollectorOrThrow(),\n ]).then(([payload, deviceData]) => {\n const state = this.paymentIntegrationService.getState();\n\n const shipping = state.getShippingAddress();\n const billing = state.getBillingAddress();\n\n const {\n shippingAddress = this.mapToVisaCheckoutAddress(shipping),\n billingAddress = this.mapToVisaCheckoutAddress(billing),\n } = payload;\n\n return this.postForm(\n {\n ...payload,\n shippingAddress,\n billingAddress,\n },\n deviceData,\n );\n });\n }\n\n private mapToVisaCheckoutAddress(address?: Address): VisaCheckoutAddress {\n if (!address) {\n return {};\n }\n\n return {\n firstName: address.firstName,\n lastName: address.lastName,\n phoneNumber: address.phone,\n streetAddress: address.address1,\n extendedAddress: address.address2,\n locality: address.city,\n region: address.stateOrProvinceCode,\n countryCode: address.countryCode,\n postalCode: address.postalCode,\n };\n }\n\n private postForm(\n paymentData: VisaCheckoutTokenizedPayload,\n dataCollector: BraintreeDataCollector,\n ) {\n const { userData, billingAddress, shippingAddress, details: cardInformation } = paymentData;\n const { userEmail } = userData;\n const { deviceData } = dataCollector;\n\n return this.formPoster.postForm('/checkout.php', {\n payment_type: paymentData.type,\n nonce: paymentData.nonce,\n provider: 'braintreevisacheckout',\n action: 'set_external_checkout',\n device_data: deviceData,\n card_information: JSON.stringify({\n type: cardInformation.cardType,\n number: cardInformation.lastTwo,\n }),\n billing_address: JSON.stringify(this.getAddress(userEmail, billingAddress)),\n shipping_address: JSON.stringify(this.getAddress(userEmail, shippingAddress)),\n });\n }\n\n private getAddress(email: string, address: VisaCheckoutAddress = {}): Partial<LegacyAddress> {\n return {\n email,\n first_name: address.firstName,\n last_name: address.lastName,\n phone_number: address.phoneNumber,\n address_line_1: address.streetAddress,\n address_line_2: address.extendedAddress,\n city: address.locality,\n state: address.region,\n country_code: address.countryCode,\n postal_code: address.postalCode,\n };\n }\n\n private handleError(error: unknown): never {\n if (error instanceof Error && error.name === 'BraintreeError') {\n throw new PaymentMethodFailedError(error.message);\n }\n\n throw error;\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeScriptLoader,\n BraintreeSdk,\n BraintreeSDKVersionManager,\n VisaCheckoutHostWindow,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeVisaCheckoutPaymentStrategy from './braintree-visa-checkout-payment-strategy';\n\nconst createBraintreeVisaCheckoutPaymentStrategy: PaymentStrategyFactory<\n BraintreeVisaCheckoutPaymentStrategy\n> = (paymentIntegrationService) => {\n const hostWindow: VisaCheckoutHostWindow & BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeSdk = new BraintreeSdk(\n new BraintreeScriptLoader(getScriptLoader(), hostWindow, braintreeSDKVersionManager),\n );\n\n return new BraintreeVisaCheckoutPaymentStrategy(\n paymentIntegrationService,\n createFormPoster(),\n braintreeSdk,\n );\n};\n\nexport default toResolvableModule(createBraintreeVisaCheckoutPaymentStrategy, [\n { id: 'braintreevisacheckout' },\n]);\n","import {\n BraintreeError,\n BraintreeIntegrationService,\n BraintreeTokenizePayload,\n BraintreeVenmoCheckout,\n isBraintreeError,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n FormattedPayload,\n MissingDataError,\n MissingDataErrorType,\n OrderFinalizationNotRequiredError,\n OrderPaymentRequestBody,\n OrderRequestBody,\n Payment,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentIntegrationService,\n PaymentMethod,\n PaymentMethodCancelledError,\n PaymentMethodFailedError,\n PaymentStrategy,\n PaypalInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport BraintreeVenmoPaymentStrategyInitializeOptions, {\n WithBraintreeVenmoInitializeOptions,\n} from './braintree-venmo-payment-strategy-initialize-options';\n\nexport default class BraintreeVenmoPaymentStrategy implements PaymentStrategy {\n private braintreeVenmoCheckout?: BraintreeVenmoCheckout;\n private venmoOptions?: BraintreeVenmoPaymentStrategyInitializeOptions;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private braintreeIntegrationService: BraintreeIntegrationService,\n ) {}\n\n async initialize(\n options: PaymentInitializeOptions & WithBraintreeVenmoInitializeOptions,\n ): Promise<void> {\n const { methodId } = options;\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n\n this.venmoOptions = options.braintreevenmo;\n\n const paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n await this.initializeBraintreeVenmo(paymentMethod);\n }\n\n async execute(orderRequest: OrderRequestBody): Promise<void> {\n const { payment, ...order } = orderRequest;\n\n if (!payment) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n try {\n const paymentData = await this.preparePaymentData(payment);\n\n await this.paymentIntegrationService.submitOrder(order);\n await this.paymentIntegrationService.submitPayment(paymentData);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreeIntegrationService.teardown();\n\n return Promise.resolve();\n }\n\n private handleError(error: unknown): never {\n if (!isBraintreeError(error)) {\n throw error;\n }\n\n if (error.code === 'PAYPAL_POPUP_CLOSED') {\n throw new PaymentMethodCancelledError(error.message);\n }\n\n throw new PaymentMethodFailedError(error.message);\n }\n\n private async initializeBraintreeVenmo(paymentMethod: PaymentMethod): Promise<void> {\n const { clientToken } = paymentMethod;\n\n if (!clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const state = this.paymentIntegrationService.getState();\n const features = state.getStoreConfigOrThrow().checkoutSettings.features;\n const isBraintreeVenmoWebFallbackSupport = isExperimentEnabled(\n features,\n 'PAYPAL-5406.braintree_venmo_web_fallback_support',\n );\n\n try {\n this.braintreeIntegrationService.initialize(clientToken);\n this.braintreeVenmoCheckout = await this.braintreeIntegrationService.getVenmoCheckout({\n ...(this.venmoOptions?.allowDesktop !== undefined\n ? { allowDesktop: this.venmoOptions.allowDesktop }\n : {}),\n ...(isBraintreeVenmoWebFallbackSupport\n ? {\n mobileWebFallBack: isBraintreeVenmoWebFallbackSupport,\n }\n : {}),\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private async preparePaymentData(payment: OrderPaymentRequestBody): Promise<Payment> {\n const state = this.paymentIntegrationService.getState();\n const { nonce } = state.getPaymentMethodOrThrow(payment.methodId);\n\n if (nonce) {\n return { ...payment, paymentData: this.formattedPayload(nonce) };\n }\n\n const tokenizeResult = await this.braintreeVenmoTokenize();\n const sessionId = await this.braintreeIntegrationService.getSessionId();\n\n return {\n ...payment,\n paymentData: this.formattedPayload(\n tokenizeResult.nonce,\n tokenizeResult.details.email,\n sessionId,\n ),\n };\n }\n\n private formattedPayload(\n token: string,\n email?: string,\n sessionId?: string,\n ): FormattedPayload<PaypalInstrument> {\n return {\n formattedPayload: {\n vault_payment_instrument: null,\n set_as_default_stored_instrument: null,\n device_info: sessionId || null,\n paypal_account: {\n token,\n email: email || null,\n },\n },\n };\n }\n\n private braintreeVenmoTokenize(): Promise<BraintreeTokenizePayload> {\n return new Promise((resolve, reject) => {\n this.braintreeVenmoCheckout?.tokenize(\n (error: BraintreeError | undefined, payload: BraintreeTokenizePayload) => {\n if (error) {\n return reject(error);\n }\n\n resolve(payload);\n },\n );\n });\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeVenmoPaymentStrategy from './braintree-venmo-payment-strategy';\n\nconst createBraintreeVenmoPaymentStrategy: CheckoutButtonStrategyFactory<\n BraintreeVenmoPaymentStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const scriptLoader = getScriptLoader();\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeScriptLoader = new BraintreeScriptLoader(\n scriptLoader,\n braintreeHostWindow,\n braintreeSDKVersionManager,\n );\n const braintreeIntegrationService = new BraintreeIntegrationService(\n braintreeScriptLoader,\n braintreeHostWindow,\n );\n\n return new BraintreeVenmoPaymentStrategy(\n paymentIntegrationService,\n braintreeIntegrationService,\n );\n};\n\nexport default toResolvableModule(createBraintreeVenmoPaymentStrategy, [{ id: 'braintreevenmo' }]);\n","import { BraintreeFormFieldsMap, BraintreeStoredCardFieldsMap } from '../index';\n\nexport function isBraintreeFormFieldsMap(\n fields: BraintreeFormFieldsMap | BraintreeStoredCardFieldsMap,\n): fields is BraintreeFormFieldsMap {\n return 'cardNumber' in fields;\n}\n\nexport function isBraintreeStoredCardFieldsMap(\n fields: BraintreeFormFieldsMap | BraintreeStoredCardFieldsMap,\n): fields is BraintreeStoredCardFieldsMap {\n return !!(\n Object.keys(fields).length > 0 &&\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n ((fields as BraintreeStoredCardFieldsMap).cardCodeVerification ||\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n (fields as BraintreeStoredCardFieldsMap).cardNumberVerification)\n );\n}\n","import { BraintreeHostedFormError } from '../types';\n\nimport isBraintreeError from './is-braintree-error';\n\nfunction isValidInvalidFieldKeys(invalidFieldKeys: unknown): invalidFieldKeys is string[] {\n return (\n Array.isArray(invalidFieldKeys) && invalidFieldKeys.every((key) => typeof key === 'string')\n );\n}\n\nexport default function isBraintreeHostedFormError(\n error: unknown,\n): error is BraintreeHostedFormError {\n if (!isBraintreeError(error)) {\n return false;\n }\n\n const { details } = error;\n\n return (\n details === undefined ||\n (typeof details === 'object' &&\n details !== null &&\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n (details as { invalidFieldKeys?: unknown }).invalidFieldKeys === undefined) ||\n isValidInvalidFieldKeys(details)\n );\n}\n","import { Dictionary, isEmpty, isNil, omitBy } from 'lodash';\n\nimport {\n BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n BraintreeBillingAddressRequestData,\n BraintreeClient,\n BraintreeFormErrorDataKeys,\n BraintreeFormErrorsData,\n BraintreeFormFieldsMap,\n BraintreeFormFieldStyles,\n BraintreeFormFieldStylesMap,\n BraintreeFormFieldType,\n BraintreeFormFieldValidateErrorData,\n BraintreeFormFieldValidateEventData,\n BraintreeFormOptions,\n BraintreeHostedFields,\n BraintreeHostedFieldsCreatorConfig,\n BraintreeHostedFieldsState,\n BraintreeHostedFormError,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n BraintreeStoredCardFieldsMap,\n isBraintreeFormFieldsMap,\n isBraintreeHostedFormError,\n isBraintreeSupportedCardBrand,\n TokenizationPayload,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n Address,\n NotInitializedError,\n NotInitializedErrorType,\n PaymentInvalidFormError,\n PaymentInvalidFormErrorDetails,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nenum BraintreeHostedFormType {\n CreditCard,\n StoredCardVerification,\n}\n\nexport default class BraintreeHostedForm {\n private cardFields?: BraintreeHostedFields;\n private formOptions?: BraintreeFormOptions;\n private type?: BraintreeHostedFormType;\n private client?: Promise<BraintreeClient>;\n private clientToken?: string;\n private isInitializedHostedForm = false;\n\n constructor(\n private braintreeScriptLoader: BraintreeScriptLoader,\n private braintreeSDKVersionManager: BraintreeSDKVersionManager,\n ) {}\n\n async initialize(\n options: BraintreeFormOptions,\n unsupportedCardBrands?: string[],\n clientToken?: string,\n ): Promise<void> {\n this.clientToken = clientToken;\n this.formOptions = options;\n this.type = isBraintreeFormFieldsMap(options.fields)\n ? BraintreeHostedFormType.CreditCard\n : BraintreeHostedFormType.StoredCardVerification;\n\n const fields = this.mapFieldOptions(options.fields, unsupportedCardBrands);\n\n if (isEmpty(fields)) {\n this.isInitializedHostedForm = false;\n\n return;\n }\n\n this.cardFields = await this.createHostedFields({\n fields,\n styles: options.styles && this.mapStyleOptions(options.styles),\n });\n\n this.cardFields?.on('blur', this.handleBlur);\n this.cardFields?.on('focus', this.handleFocus);\n this.cardFields?.on('cardTypeChange', this.handleCardTypeChange);\n this.cardFields?.on('validityChange', this.handleValidityChange);\n this.cardFields?.on('inputSubmitRequest', this.handleInputSubmitRequest);\n\n this.isInitializedHostedForm = true;\n }\n\n isInitialized(): boolean {\n return !!this.isInitializedHostedForm;\n }\n\n async deinitialize(): Promise<void> {\n if (this.isInitializedHostedForm) {\n this.isInitializedHostedForm = false;\n await this.cardFields?.teardown();\n }\n }\n\n validate(): void {\n if (!this.cardFields) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n const state = this.cardFields.getState();\n\n if (!this.isValidForm(state)) {\n this.handleValidityChange(state);\n\n const errors = this.mapValidationErrors(state.fields);\n\n throw new PaymentInvalidFormError(errors as PaymentInvalidFormErrorDetails);\n }\n }\n\n async tokenize(billingAddress: Address): Promise<TokenizationPayload> {\n if (!this.cardFields) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n try {\n const payload = await this.cardFields.tokenize(\n omitBy(\n {\n billingAddress: billingAddress && this.mapBillingAddress(billingAddress),\n },\n isNil,\n ),\n );\n\n this.formOptions?.onValidate?.({ isValid: true, errors: {} });\n\n return {\n nonce: payload.nonce,\n bin: payload.details?.bin,\n };\n } catch (error) {\n if (isBraintreeHostedFormError(error)) {\n const errors = this.mapTokenizeError(error);\n\n if (errors) {\n this.formOptions?.onValidate?.({ isValid: false, errors });\n throw new PaymentInvalidFormError(errors as PaymentInvalidFormErrorDetails);\n }\n }\n\n throw error;\n }\n }\n\n async tokenizeForStoredCardVerification(): Promise<TokenizationPayload> {\n if (!this.cardFields) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n try {\n const payload = await this.cardFields.tokenize();\n\n this.formOptions?.onValidate?.({ isValid: true, errors: {} });\n\n return {\n nonce: payload.nonce,\n bin: payload.details?.bin,\n };\n } catch (error) {\n if (isBraintreeHostedFormError(error)) {\n const errors = this.mapTokenizeError(error, true);\n\n if (errors) {\n this.formOptions?.onValidate?.({ isValid: false, errors });\n throw new PaymentInvalidFormError(errors as PaymentInvalidFormErrorDetails);\n }\n }\n\n throw error;\n }\n }\n\n async createHostedFields(\n options: Pick<BraintreeHostedFieldsCreatorConfig, 'fields' | 'styles'>,\n ): Promise<BraintreeHostedFields> {\n const client = await this.getClient();\n const hostedFields = await this.braintreeScriptLoader.loadHostedFields();\n\n const currentSdkVersion = this.braintreeSDKVersionManager.getSDKVersion();\n const hostedFieldsOptions =\n currentSdkVersion === BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION\n ? { ...options, preventCursorJumps: true }\n : options;\n\n return hostedFields.create({ ...hostedFieldsOptions, client });\n }\n\n async getClient(): Promise<BraintreeClient> {\n if (!this.clientToken) {\n throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n }\n\n if (!this.client) {\n const client = await this.braintreeScriptLoader.loadClient();\n\n this.client = client.create({ authorization: this.clientToken });\n }\n\n return this.client;\n }\n\n private mapBillingAddress(billingAddress: Address): BraintreeBillingAddressRequestData {\n return {\n countryName: billingAddress.country,\n postalCode: billingAddress.postalCode,\n streetAddress: billingAddress.address2\n ? `${billingAddress.address1} ${billingAddress.address2}`\n : billingAddress.address1,\n };\n }\n\n private mapFieldOptions(\n fields: BraintreeFormFieldsMap | BraintreeStoredCardFieldsMap,\n unsupportedCardBrands?: string[],\n ): BraintreeHostedFieldsCreatorConfig['fields'] {\n if (isBraintreeFormFieldsMap(fields)) {\n const supportedCardBrands: Partial<Record<string, boolean>> = {};\n\n unsupportedCardBrands?.forEach((cardBrand) => {\n if (isBraintreeSupportedCardBrand(cardBrand)) {\n supportedCardBrands[cardBrand] = false;\n }\n });\n\n return omitBy(\n {\n number: {\n container: `#${fields.cardNumber.containerId}`,\n placeholder: fields.cardNumber.placeholder,\n internalLabel: fields.cardNumber.accessibilityLabel,\n ...(Object.keys(supportedCardBrands).length > 0\n ? { supportedCardBrands }\n : {}),\n },\n expirationDate: {\n container: `#${fields.cardExpiry.containerId}`,\n placeholder: fields.cardExpiry.placeholder,\n internalLabel: fields.cardExpiry.accessibilityLabel,\n },\n cvv: fields.cardCode && {\n container: `#${fields.cardCode.containerId}`,\n placeholder: fields.cardCode.placeholder,\n internalLabel: fields.cardCode.accessibilityLabel,\n },\n cardholderName: {\n container: `#${fields.cardName.containerId}`,\n placeholder: fields.cardName.placeholder,\n internalLabel: fields.cardName.accessibilityLabel,\n },\n },\n isNil,\n );\n }\n\n return omitBy(\n {\n number: fields.cardNumberVerification && {\n container: `#${fields.cardNumberVerification.containerId}`,\n placeholder: fields.cardNumberVerification.placeholder,\n },\n cvv: fields.cardCodeVerification && {\n container: `#${fields.cardCodeVerification.containerId}`,\n placeholder: fields.cardCodeVerification.placeholder,\n },\n },\n isNil,\n );\n }\n\n private mapStyleOptions(\n options: BraintreeFormFieldStylesMap,\n ): BraintreeHostedFieldsCreatorConfig['styles'] {\n const mapStyles = (styles: BraintreeFormFieldStyles = {}) =>\n omitBy(\n {\n color: styles.color,\n 'font-family': styles.fontFamily,\n 'font-size': styles.fontSize,\n 'font-weight': styles.fontWeight,\n },\n isNil,\n ) as Dictionary<string>;\n\n return {\n input: mapStyles(options.default),\n '.invalid': mapStyles(options.error),\n ':focus': mapStyles(options.focus),\n };\n }\n\n private mapFieldType(type: string): BraintreeFormFieldType {\n switch (type) {\n case 'number':\n return this.type === BraintreeHostedFormType.StoredCardVerification\n ? BraintreeFormFieldType.CardNumberVerification\n : BraintreeFormFieldType.CardNumber;\n\n case 'expirationDate':\n return BraintreeFormFieldType.CardExpiry;\n\n case 'cvv':\n return this.type === BraintreeHostedFormType.StoredCardVerification\n ? BraintreeFormFieldType.CardCodeVerification\n : BraintreeFormFieldType.CardCode;\n\n case 'cardholderName':\n return BraintreeFormFieldType.CardName;\n\n default:\n throw new Error('Unexpected field type');\n }\n }\n\n private mapErrors(fields: BraintreeHostedFieldsState['fields']): BraintreeFormErrorsData {\n const errors: BraintreeFormErrorsData = {};\n\n if (fields) {\n // eslint-disable-next-line no-restricted-syntax\n for (const [key, value] of Object.entries(fields)) {\n if (value && this.isValidParam(key)) {\n const { isValid, isEmpty, isPotentiallyValid } = value;\n\n errors[key] = {\n isValid,\n isEmpty,\n isPotentiallyValid,\n };\n }\n }\n }\n\n return errors;\n }\n\n private mapValidationErrors(\n fields: BraintreeHostedFieldsState['fields'],\n ): BraintreeFormFieldValidateEventData['errors'] {\n return (Object.keys(fields) as Array<keyof BraintreeHostedFieldsState['fields']>).reduce(\n (result, fieldKey) => ({\n ...result,\n [this.mapFieldType(fieldKey)]: fields[fieldKey]?.isValid\n ? undefined\n : [this.createInvalidError(this.mapFieldType(fieldKey))],\n }),\n {},\n );\n }\n\n private mapTokenizeError(\n error: BraintreeHostedFormError,\n isStoredCard = false,\n ): BraintreeFormFieldValidateEventData['errors'] | undefined {\n if (error.code === 'HOSTED_FIELDS_FIELDS_EMPTY') {\n const cvv = [this.createRequiredError(this.mapFieldType('cvv'))];\n\n if (isStoredCard) {\n return { [this.mapFieldType('cvv')]: cvv };\n }\n\n return {\n [this.mapFieldType('cvv')]: cvv,\n [this.mapFieldType('expirationDate')]: [\n this.createRequiredError(this.mapFieldType('expirationDate')),\n ],\n [this.mapFieldType('number')]: [\n this.createRequiredError(this.mapFieldType('number')),\n ],\n [this.mapFieldType('cardholderName')]: [\n this.createRequiredError(this.mapFieldType('cardholderName')),\n ],\n };\n }\n\n return error.details?.invalidFieldKeys?.reduce((result, key) => {\n const type = this.mapFieldType(key);\n\n return {\n ...result,\n [type]: [this.createInvalidError(type)],\n };\n }, {});\n }\n\n private createRequiredError(\n fieldType: BraintreeFormFieldType,\n ): BraintreeFormFieldValidateErrorData {\n const messages = {\n [BraintreeFormFieldType.CardCode]: 'CVV is required',\n [BraintreeFormFieldType.CardCodeVerification]: 'CVV is required',\n [BraintreeFormFieldType.CardNumber]: 'Credit card number is required',\n [BraintreeFormFieldType.CardNumberVerification]: 'Credit card number is required',\n [BraintreeFormFieldType.CardExpiry]: 'Expiration date is required',\n [BraintreeFormFieldType.CardName]: 'Full name is required',\n };\n\n return {\n fieldType,\n message: messages[fieldType] ?? 'Field is required',\n type: 'required',\n };\n }\n\n private createInvalidError(\n fieldType: BraintreeFormFieldType,\n ): BraintreeFormFieldValidateErrorData {\n const formFields = {\n [BraintreeFormFieldType.CardCode]: {\n message: 'Invalid card code',\n type: 'invalid_card_code',\n },\n [BraintreeFormFieldType.CardCodeVerification]: {\n message: 'Invalid card code',\n type: 'invalid_card_code',\n },\n [BraintreeFormFieldType.CardNumber]: {\n message: 'Invalid card number',\n type: 'invalid_card_number',\n },\n [BraintreeFormFieldType.CardNumberVerification]: {\n message: 'Invalid card number',\n type: 'invalid_card_number',\n },\n [BraintreeFormFieldType.CardExpiry]: {\n message: 'Invalid card expiry',\n type: 'invalid_card_expiry',\n },\n [BraintreeFormFieldType.CardName]: {\n message: 'Invalid card name',\n type: 'invalid_card_name',\n },\n };\n\n return {\n fieldType,\n message: formFields[fieldType]?.message ?? 'Invalid field',\n type: formFields[fieldType]?.type ?? 'invalid',\n };\n }\n\n private handleBlur = (event: BraintreeHostedFieldsState): void => {\n this.formOptions?.onBlur?.({\n fieldType: this.mapFieldType(event.emittedBy),\n errors: this.mapErrors(event.fields),\n });\n };\n\n private handleFocus = (event: BraintreeHostedFieldsState): void => {\n this.formOptions?.onFocus?.({\n fieldType: this.mapFieldType(event.emittedBy),\n });\n };\n\n private handleCardTypeChange = (event: BraintreeHostedFieldsState): void => {\n const cardType =\n event.cards.length === 1\n ? event.cards[0].type.replace(/^master-card$/, 'mastercard')\n : undefined;\n\n this.formOptions?.onCardTypeChange?.({ cardType });\n };\n\n private handleInputSubmitRequest = (event: BraintreeHostedFieldsState): void => {\n this.formOptions?.onEnter?.({\n fieldType: this.mapFieldType(event.emittedBy),\n });\n };\n\n private handleValidityChange = (event: BraintreeHostedFieldsState): void => {\n this.formOptions?.onValidate?.({\n isValid: this.isValidForm(event),\n errors: this.mapValidationErrors(event.fields),\n });\n };\n\n private isValidForm(event: BraintreeHostedFieldsState): boolean {\n return (\n Object.keys(event.fields) as Array<keyof BraintreeHostedFieldsState['fields']>\n ).every((key) => event.fields[key]?.isValid);\n }\n\n private isValidParam(key: string): key is BraintreeFormErrorDataKeys {\n return [\n 'number',\n 'cvv',\n 'expirationDate',\n 'postalCode',\n 'cardholderName',\n 'cardType',\n ].includes(key);\n }\n}\n","import { BraintreeSupportedCardBrands } from '../types';\n\nexport const isBraintreeSupportedCardBrand = (\n cardBrand: string,\n): cardBrand is BraintreeSupportedCardBrands => {\n const supportedCardBrands = Object.values(BraintreeSupportedCardBrands);\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return supportedCardBrands.includes(cardBrand as BraintreeSupportedCardBrands);\n};\n\nexport default isBraintreeSupportedCardBrand;\n","import { some } from 'lodash';\n\nimport {\n BraintreeIntegrationService,\n BraintreeThreeDSecureOptions,\n isBraintreeAcceleratedCheckoutCustomer,\n isBraintreePaymentRequest3DSError,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n Address,\n isHostedInstrumentLike,\n isRequestError,\n isVaultedInstrument,\n MissingDataError,\n MissingDataErrorType,\n NonceInstrument,\n OrderFinalizationNotRequiredError,\n OrderPaymentRequestBody,\n OrderRequestBody,\n PaymentArgumentInvalidError,\n PaymentInitializeOptions,\n PaymentInstrument,\n PaymentInstrumentMeta,\n PaymentIntegrationService,\n PaymentMethod,\n PaymentMethodFailedError,\n PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeHostedForm from '../braintree-hosted-form/braintree-hosted-form';\nimport isBraintreeError from '../is-braintree-error';\n\nimport {\n BraintreeCreditCardPaymentInitializeOptions,\n WithBraintreeCreditCardPaymentInitializeOptions,\n} from './braintree-credit-card-payment-initialize-options';\n\nexport default class BraintreeCreditCardPaymentStrategy implements PaymentStrategy {\n private is3dsEnabled?: boolean;\n private isHostedFormInitialized?: boolean;\n private deviceSessionId?: string;\n private paymentMethod?: PaymentMethod;\n private threeDSecure?: BraintreeThreeDSecureOptions;\n private onPaymentError?: BraintreeCreditCardPaymentInitializeOptions['onPaymentError'];\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private braintreeIntegrationService: BraintreeIntegrationService,\n private braintreeHostedForm: BraintreeHostedForm,\n ) {}\n\n async initialize(\n options: PaymentInitializeOptions & WithBraintreeCreditCardPaymentInitializeOptions,\n ): Promise<void> {\n const { methodId, gatewayId, braintree } = options;\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n\n this.paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n const { clientToken } = this.paymentMethod;\n\n if (!clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n this.threeDSecure = braintree?.threeDSecure;\n this.onPaymentError = braintree?.onPaymentError;\n\n try {\n this.braintreeIntegrationService.initialize(clientToken, this.threeDSecure);\n\n if (this.isHostedPaymentFormEnabled(methodId, gatewayId) && braintree?.form) {\n await this.braintreeHostedForm.initialize(\n braintree.form,\n braintree.unsupportedCardBrands,\n clientToken,\n );\n\n this.isHostedFormInitialized = this.braintreeHostedForm.isInitialized();\n }\n\n this.is3dsEnabled = this.paymentMethod.config.is3dsEnabled;\n this.deviceSessionId = await this.braintreeIntegrationService.getSessionId();\n\n // TODO: Remove when BT AXO A/B testing is finished\n if (this.shouldInitializeBraintreeFastlane()) {\n await this.initializeBraintreeFastlaneOrThrow(methodId);\n }\n } catch (error) {\n return this.handleError(error, methodId);\n }\n }\n\n async execute(orderRequest: OrderRequestBody): Promise<void> {\n const { payment, ...order } = orderRequest;\n\n if (!payment) {\n throw new PaymentArgumentInvalidError(['payment']);\n }\n\n if (this.isHostedFormInitialized) {\n this.braintreeHostedForm.validate();\n }\n\n await this.paymentIntegrationService.submitOrder(order);\n\n const state = this.paymentIntegrationService.getState();\n const billingAddress = state.getBillingAddressOrThrow();\n const orderAmount = state.getOrderOrThrow().orderAmount;\n\n try {\n const paymentData = this.isHostedFormInitialized\n ? await this.prepareHostedPaymentData(payment, billingAddress, orderAmount)\n : await this.preparePaymentData(payment, billingAddress, orderAmount);\n\n await this.paymentIntegrationService.submitPayment({\n ...payment,\n paymentData,\n });\n } catch (error) {\n return this.processAdditionalAction(error, payment, orderAmount);\n }\n }\n\n finalize(): Promise<void> {\n return Promise.reject(new OrderFinalizationNotRequiredError());\n }\n\n async deinitialize(): Promise<void> {\n this.isHostedFormInitialized = false;\n\n await Promise.all([\n this.braintreeIntegrationService.teardown(),\n this.braintreeHostedForm.deinitialize(),\n ]);\n\n return Promise.resolve();\n }\n\n private handleError(error: unknown, methodId?: string): void | Promise<void> {\n if (isBraintreeError(error)) {\n const isPaymentMethodInitialized = !!(\n methodId &&\n this.paymentIntegrationService.getState().isPaymentMethodInitialized({ methodId })\n );\n\n if (\n !isPaymentMethodInitialized &&\n error.code === 'HOSTED_FIELDS_INVALID_FIELD_SELECTOR'\n ) {\n return;\n }\n\n if (error.code.startsWith('THREEDS_')) {\n this.onPaymentError?.(new PaymentMethodFailedError('THREEDS_VERIFICATION_FAILED'));\n\n return Promise.reject();\n }\n\n throw new PaymentMethodFailedError(error.message);\n }\n\n throw error;\n }\n\n private async preparePaymentData(\n payment: OrderPaymentRequestBody,\n billingAddress: Address,\n orderAmount: number,\n ): Promise<PaymentInstrument & PaymentInstrumentMeta> {\n const { paymentData } = payment;\n const commonPaymentData = { deviceSessionId: this.deviceSessionId };\n\n if (this.isSubmittingWithStoredCard(payment)) {\n return {\n ...commonPaymentData,\n ...paymentData,\n };\n }\n\n const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n const { nonce } = this.shouldPerform3DSVerification(payment)\n ? await this.braintreeIntegrationService.verifyCard(\n payment,\n billingAddress,\n orderAmount,\n )\n : await this.braintreeIntegrationService.tokenizeCard(payment, billingAddress);\n\n return {\n ...commonPaymentData,\n nonce,\n shouldSaveInstrument,\n shouldSetAsDefaultInstrument,\n };\n }\n\n private async prepareHostedPaymentData(\n payment: OrderPaymentRequestBody,\n billingAddress: Address,\n orderAmount: number,\n ): Promise<PaymentInstrument & PaymentInstrumentMeta> {\n const { paymentData } = payment;\n const commonPaymentData = { deviceSessionId: this.deviceSessionId };\n\n if (this.isSubmittingWithStoredCard(payment)) {\n const { nonce } = await this.braintreeHostedForm.tokenizeForStoredCardVerification();\n\n return {\n ...commonPaymentData,\n ...paymentData,\n nonce,\n };\n }\n\n const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n const { nonce } = this.shouldPerform3DSVerification(payment)\n ? await this.verifyCardWithHostedForm(billingAddress, orderAmount)\n : await this.braintreeHostedForm.tokenize(billingAddress);\n\n return {\n ...commonPaymentData,\n shouldSaveInstrument,\n shouldSetAsDefaultInstrument,\n nonce,\n };\n }\n\n private prepareAdditionalActionPaymentData(\n payment: OrderPaymentRequestBody,\n nonce: string,\n ): PaymentInstrument & PaymentInstrumentMeta {\n const { paymentData } = payment;\n const commonPaymentData = { deviceSessionId: this.deviceSessionId, nonce };\n\n const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n if (\n this.isSubmittingWithStoredCard(payment) &&\n (shouldSaveInstrument || shouldSetAsDefaultInstrument)\n ) {\n return {\n ...paymentData,\n ...commonPaymentData,\n };\n }\n\n return {\n ...commonPaymentData,\n };\n }\n\n private async verifyCardWithHostedForm(\n billingAddress: Address,\n orderAmount: number,\n ): Promise<NonceInstrument> {\n const tokenizationPayload = await this.braintreeHostedForm.tokenize(billingAddress);\n\n return this.braintreeIntegrationService.challenge3DSVerification(\n tokenizationPayload,\n orderAmount,\n );\n }\n\n private async processAdditionalAction(\n error: unknown,\n payment: OrderPaymentRequestBody,\n orderAmount: number,\n ): Promise<void> {\n if (\n !isRequestError(error) ||\n !some(error.body.errors, { code: 'three_d_secure_required' })\n ) {\n return this.handleError(error);\n }\n\n try {\n const { payer_auth_request: storedCreditCardNonce } =\n (isBraintreePaymentRequest3DSError(error) && error.body.three_ds_result) || {};\n const { paymentData } = payment;\n const state = this.paymentIntegrationService.getState();\n\n if (!paymentData || !isVaultedInstrument(paymentData)) {\n throw new PaymentArgumentInvalidError(['instrumentId']);\n }\n\n const instrument = state.getCardInstrumentOrThrow(paymentData.instrumentId);\n const { nonce } = await this.braintreeIntegrationService.challenge3DSVerification(\n {\n nonce: storedCreditCardNonce || '',\n bin: instrument.iin,\n },\n orderAmount,\n );\n\n const newPaymentData = this.prepareAdditionalActionPaymentData(payment, nonce);\n\n await this.paymentIntegrationService.submitPayment({\n ...payment,\n paymentData: newPaymentData,\n });\n } catch (error) {\n return this.handleError(error);\n }\n }\n\n private isHostedPaymentFormEnabled(methodId?: string, gatewayId?: string): boolean {\n if (!methodId) {\n return false;\n }\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow(methodId, gatewayId);\n\n return paymentMethod.config.isHostedFormEnabled === true;\n }\n\n private isSubmittingWithStoredCard(payment: OrderPaymentRequestBody): boolean {\n return !!(payment.paymentData && isVaultedInstrument(payment.paymentData));\n }\n\n private shouldPerform3DSVerification(payment: OrderPaymentRequestBody): boolean {\n return !!(this.is3dsEnabled && !this.isSubmittingWithStoredCard(payment));\n }\n\n // TODO: Remove when BT AXO A/B testing is finished\n private shouldInitializeBraintreeFastlane(): boolean {\n const state = this.paymentIntegrationService.getState();\n const paymentProviderCustomer = state.getPaymentProviderCustomerOrThrow();\n const braintreeCustomer = isBraintreeAcceleratedCheckoutCustomer(paymentProviderCustomer)\n ? paymentProviderCustomer\n : {};\n const isFastlaneEnabled: boolean =\n this.paymentMethod?.initializationData.isAcceleratedCheckoutEnabled;\n\n return isFastlaneEnabled && !braintreeCustomer?.authenticationState;\n }\n\n // TODO: Remove when BT AXO A/B testing is finished\n private async initializeBraintreeFastlaneOrThrow(methodId: string): Promise<void> {\n const state = this.paymentIntegrationService.getState();\n const cart = state.getCartOrThrow();\n const paymentMethod = state.getPaymentMethodOrThrow(methodId);\n const { clientToken, config } = paymentMethod;\n\n if (!clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n this.braintreeIntegrationService.initialize(clientToken, this.threeDSecure);\n\n await this.braintreeIntegrationService.getBraintreeFastlane(cart.id, config.testMode);\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","export interface BraintreePayment3DSRequestErrors {\n code: string;\n}\n\nexport interface BraintreePaymentRequest3DSError {\n name: string;\n body: {\n status: string;\n three_ds_result: {\n payer_auth_request: string;\n };\n errors: BraintreePayment3DSRequestErrors[];\n };\n}\n\nexport default function isBraintreePaymentRequest3DSError(\n error: unknown,\n): error is BraintreePaymentRequest3DSError {\n if (typeof error !== 'object' || error === null) {\n return false;\n }\n\n /* eslint-disable @typescript-eslint/consistent-type-assertions */\n return (\n 'name' in error &&\n 'body' in error &&\n 'status' in (error as BraintreePaymentRequest3DSError).body &&\n 'three_ds_result' in (error as BraintreePaymentRequest3DSError).body &&\n 'payer_auth_request' in (error as BraintreePaymentRequest3DSError).body.three_ds_result &&\n 'errors' in (error as BraintreePaymentRequest3DSError).body\n );\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n PaymentStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeHostedForm from '../braintree-hosted-form/braintree-hosted-form';\n\nimport BraintreeCreditCardPaymentStrategy from './braintree-credit-card-payment-strategy';\n\nconst createBraintreeCreditCardPaymentStrategy: PaymentStrategyFactory<\n BraintreeCreditCardPaymentStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n\n const braintreeScriptLoader = new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n );\n\n const braintreeIntegrationService = new BraintreeIntegrationService(\n braintreeScriptLoader,\n braintreeHostWindow,\n );\n\n const braintreeHostedForm = new BraintreeHostedForm(\n braintreeScriptLoader,\n braintreeSDKVersionManager,\n );\n\n return new BraintreeCreditCardPaymentStrategy(\n paymentIntegrationService,\n braintreeIntegrationService,\n braintreeHostedForm,\n );\n};\n\nexport default toResolvableModule(createBraintreeCreditCardPaymentStrategy, [{ id: 'braintree' }]);\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { noop } from 'lodash';\n\nimport {\n BraintreeError,\n BraintreeHostWindow,\n BraintreeInitializationData,\n BraintreeIntegrationService,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeTokenizePayload,\n isBraintreeError,\n PaypalAuthorizeData,\n PaypalStyleOptions,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CustomerCredentials,\n CustomerInitializeOptions,\n CustomerStrategy,\n DefaultCheckoutButtonHeight,\n ExecutePaymentMethodCheckoutOptions,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethod,\n RequestOptions,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreePaypalCustomerInitializeOptions, {\n WithBraintreePaypalCustomerInitializeOptions,\n} from './braintree-paypal-customer-initialize-options';\n\nexport default class BraintreePaypalCustomerStrategy implements CustomerStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private formPoster: FormPoster,\n private braintreeIntegrationService: BraintreeIntegrationService,\n private braintreeHostWindow: BraintreeHostWindow,\n ) {}\n\n async initialize(\n options: CustomerInitializeOptions & WithBraintreePaypalCustomerInitializeOptions,\n ): Promise<void> {\n const { braintreepaypal, methodId } = options;\n const { container, onError } = braintreepaypal || {};\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 (!braintreepaypal) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.`,\n );\n }\n\n if (!container) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypal.container\" argument is not provided.`,\n );\n }\n\n let state = this.paymentIntegrationService.getState();\n let paymentMethod: PaymentMethod<BraintreeInitializationData>;\n\n try {\n paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n if (!paymentMethod.clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n }\n } catch (_e) {\n state = await this.paymentIntegrationService.loadPaymentMethod(methodId);\n paymentMethod = state.getPaymentMethodOrThrow(methodId);\n }\n\n const { clientToken, config, initializationData } = paymentMethod;\n const { paymentButtonStyles } = initializationData || {};\n const { checkoutTopButtonStyles } = paymentButtonStyles || {};\n\n if (!clientToken || !initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const currencyCode = state.getCartOrThrow().currency.code;\n const paypalCheckoutOptions: Partial<BraintreePaypalSdkCreatorConfig> = {\n currency: currencyCode,\n intent: initializationData.intent,\n isCreditEnabled: initializationData.isCreditEnabled,\n commit: false,\n };\n\n const paypalCheckoutSuccessCallback = (\n braintreePaypalCheckout: BraintreePaypalCheckout,\n ) => {\n this.renderPayPalButton(\n braintreePaypalCheckout,\n braintreepaypal,\n methodId,\n Boolean(config.testMode),\n checkoutTopButtonStyles,\n );\n };\n const paypalCheckoutErrorCallback = (error: BraintreeError) =>\n this.handleError(error, container, onError);\n\n this.braintreeIntegrationService.initialize(clientToken);\n await this.braintreeIntegrationService.getPaypalCheckout(\n paypalCheckoutOptions,\n paypalCheckoutSuccessCallback,\n paypalCheckoutErrorCallback,\n );\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreeIntegrationService.teardown();\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 renderPayPalButton(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypal: BraintreePaypalCustomerInitializeOptions,\n methodId: string,\n testMode: boolean,\n buttonStyles: PaypalStyleOptions,\n ): void {\n const { container, onClick = noop } = braintreepaypal;\n\n const { paypal } = this.braintreeHostWindow;\n const fundingSource = paypal?.FUNDING.PAYPAL;\n\n if (paypal && fundingSource) {\n const paypalButtonRender = paypal.Buttons({\n env: this.braintreeIntegrationService.getBraintreeEnv(testMode),\n fundingSource,\n style: { ...buttonStyles, height: DefaultCheckoutButtonHeight },\n createOrder: () =>\n this.setupPayment(braintreePaypalCheckout, braintreepaypal, methodId),\n onApprove: (authorizeData: PaypalAuthorizeData) =>\n this.tokenizePayment(\n authorizeData,\n braintreePaypalCheckout,\n methodId,\n braintreepaypal,\n ),\n onClick,\n });\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${container}`);\n }\n } else {\n this.braintreeIntegrationService.removeElement(container);\n }\n }\n\n private async setupPayment(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypal: BraintreePaypalCustomerInitializeOptions,\n methodId: string,\n ): Promise<string | void> {\n try {\n await this.paymentIntegrationService.loadDefaultCheckout();\n\n const state = this.paymentIntegrationService.getState();\n const amount = state.getCheckoutOrThrow().outstandingBalance;\n const currency = state.getCartOrThrow().currency.code;\n const customer = state.getCustomer();\n const paymentMethod: PaymentMethod<BraintreeInitializationData> =\n state.getPaymentMethodOrThrow(methodId);\n const address = customer?.addresses[0];\n const shippingAddressOverride = address\n ? this.braintreeIntegrationService.mapToBraintreeShippingAddressOverride(address)\n : undefined;\n\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n shippingAddressOverride,\n amount,\n currency,\n offerCredit: false,\n intent: paymentMethod.initializationData?.intent,\n });\n } catch (error) {\n const { container, onError } = braintreepaypal;\n\n this.handleError(error, container, onError);\n }\n }\n\n private async tokenizePayment(\n authorizeData: PaypalAuthorizeData,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n methodId: string,\n braintreepaypal: BraintreePaypalCustomerInitializeOptions,\n ): Promise<BraintreeTokenizePayload | void> {\n try {\n const { deviceData } = await this.braintreeIntegrationService.getDataCollector({\n paypal: true,\n });\n const tokenizePayload = await braintreePaypalCheckout.tokenizePayment(authorizeData);\n const { details, nonce } = tokenizePayload;\n const billingAddress =\n this.braintreeIntegrationService.mapToLegacyBillingAddress(details);\n const shippingAddress =\n this.braintreeIntegrationService.mapToLegacyShippingAddress(details);\n\n this.formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n provider: methodId,\n action: 'set_external_checkout',\n nonce,\n device_data: deviceData,\n billing_address: JSON.stringify(billingAddress),\n shipping_address: JSON.stringify(shippingAddress),\n });\n\n return tokenizePayload;\n } catch (error) {\n const { container, onError } = braintreepaypal;\n\n this.handleError(error, container, onError);\n }\n }\n\n private handleError(\n error: unknown,\n buttonContainerId: string,\n onErrorCallback?: (error: BraintreeError | StandardError) => void,\n ): void {\n this.braintreeIntegrationService.removeElement(buttonContainerId);\n\n if (onErrorCallback && isBraintreeError(error)) {\n onErrorCallback(error);\n } else {\n throw error;\n }\n }\n}\n","const DefaultCheckoutButtonHeight = 40;\n\nexport default DefaultCheckoutButtonHeight;\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CustomerStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreePaypalCustomerStrategy from './braintree-paypal-customer-strategy';\n\nconst createBraintreePaypalCustomerStrategy: CustomerStrategyFactory<\n BraintreePaypalCustomerStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n ),\n braintreeHostWindow,\n );\n\n return new BraintreePaypalCustomerStrategy(\n paymentIntegrationService,\n createFormPoster(),\n braintreeIntegrationService,\n braintreeHostWindow,\n );\n};\n\nexport default toResolvableModule(createBraintreePaypalCustomerStrategy, [\n { id: 'braintreepaypal' },\n]);\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { noop } from 'lodash';\n\nimport {\n BraintreeError,\n BraintreeHostWindow,\n BraintreeInitializationData,\n BraintreeIntegrationService,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeTokenizePayload,\n isBraintreeError,\n PaypalAuthorizeData,\n PaypalStyleOptions,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CustomerCredentials,\n CustomerInitializeOptions,\n CustomerStrategy,\n DefaultCheckoutButtonHeight,\n ExecutePaymentMethodCheckoutOptions,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethod,\n RequestOptions,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreePaypalCreditCustomerInitializeOptions, {\n WithBraintreePaypalCreditCustomerInitializeOptions,\n} from './braintree-paypal-credit-customer-initialize-options';\n\nexport default class BraintreePaypalCreditCustomerStrategy implements CustomerStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private formPoster: FormPoster,\n private braintreeIntegrationService: BraintreeIntegrationService,\n private braintreeHostWindow: BraintreeHostWindow,\n ) {}\n\n async initialize(\n options: CustomerInitializeOptions & WithBraintreePaypalCreditCustomerInitializeOptions,\n ): Promise<void> {\n const { braintreepaypalcredit, methodId } = options;\n const { container, onError } = braintreepaypalcredit || {};\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 (!braintreepaypalcredit) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.`,\n );\n }\n\n if (!container) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypalcredit.container\" argument is not provided.`,\n );\n }\n\n let state = this.paymentIntegrationService.getState();\n let paymentMethod: PaymentMethod<BraintreeInitializationData>;\n\n try {\n paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n if (!paymentMethod.clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n }\n } catch (_e) {\n state = await this.paymentIntegrationService.loadPaymentMethod(methodId);\n paymentMethod = state.getPaymentMethodOrThrow(methodId);\n }\n\n const { clientToken, config, initializationData } = paymentMethod;\n const { paymentButtonStyles } = initializationData || {};\n const { checkoutTopButtonStyles } = paymentButtonStyles || {};\n\n if (!clientToken || !initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const currencyCode = state.getCartOrThrow().currency.code;\n const paypalCheckoutOptions: Partial<BraintreePaypalSdkCreatorConfig> = {\n currency: currencyCode,\n intent: initializationData.intent,\n isCreditEnabled: initializationData.isCreditEnabled,\n commit: false,\n };\n\n const paypalCheckoutSuccessCallback = (\n braintreePaypalCheckout: BraintreePaypalCheckout,\n ) => {\n this.renderPayPalButton(\n braintreePaypalCheckout,\n braintreepaypalcredit,\n methodId,\n Boolean(config.testMode),\n { ...checkoutTopButtonStyles, height: DefaultCheckoutButtonHeight },\n );\n };\n const paypalCheckoutErrorCallback = (error: BraintreeError) =>\n this.handleError(error, container, onError);\n\n this.braintreeIntegrationService.initialize(clientToken);\n await this.braintreeIntegrationService.getPaypalCheckout(\n paypalCheckoutOptions,\n paypalCheckoutSuccessCallback,\n paypalCheckoutErrorCallback,\n );\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreeIntegrationService.teardown();\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 renderPayPalButton(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypalcredit: BraintreePaypalCreditCustomerInitializeOptions,\n methodId: string,\n testMode: boolean,\n buttonStyles: PaypalStyleOptions,\n ): void {\n const { container, onClick = noop } = braintreepaypalcredit;\n const { paypal } = this.braintreeHostWindow;\n\n let hasRenderedSmartButton = false;\n\n if (paypal) {\n const fundingSources = [paypal.FUNDING.PAYLATER, paypal.FUNDING.CREDIT];\n\n fundingSources.forEach((fundingSource) => {\n if (!hasRenderedSmartButton) {\n const paypalButtonRender = paypal.Buttons({\n env: testMode ? 'sandbox' : 'production',\n fundingSource,\n style: buttonStyles,\n createOrder: () =>\n this.setupPayment(\n braintreePaypalCheckout,\n braintreepaypalcredit,\n methodId,\n ),\n onApprove: (authorizeData: PaypalAuthorizeData) =>\n this.tokenizePayment(\n authorizeData,\n braintreePaypalCheckout,\n methodId,\n braintreepaypalcredit,\n ),\n onClick,\n });\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${container}`);\n hasRenderedSmartButton = true;\n }\n }\n });\n }\n\n if (!paypal || !hasRenderedSmartButton) {\n this.braintreeIntegrationService.removeElement(container);\n }\n }\n\n private async setupPayment(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypalcredit: BraintreePaypalCreditCustomerInitializeOptions,\n methodId: string,\n ): Promise<string | void> {\n try {\n await this.paymentIntegrationService.loadDefaultCheckout();\n\n const state = this.paymentIntegrationService.getState();\n const amount = state.getCheckoutOrThrow().outstandingBalance;\n const currency = state.getCartOrThrow().currency.code;\n const customer = state.getCustomer();\n const paymentMethod: PaymentMethod<BraintreeInitializationData> =\n state.getPaymentMethodOrThrow(methodId);\n const address = customer?.addresses[0];\n const shippingAddressOverride = address\n ? this.braintreeIntegrationService.mapToBraintreeShippingAddressOverride(address)\n : undefined;\n\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n shippingAddressOverride,\n amount,\n currency,\n offerCredit: true,\n intent: paymentMethod.initializationData?.intent,\n });\n } catch (error) {\n const { container, onError } = braintreepaypalcredit;\n\n this.handleError(error, container, onError);\n }\n }\n\n private async tokenizePayment(\n authorizeData: PaypalAuthorizeData,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n methodId: string,\n braintreepaypalcredit: BraintreePaypalCreditCustomerInitializeOptions,\n ): Promise<BraintreeTokenizePayload | void> {\n try {\n const { deviceData } = await this.braintreeIntegrationService.getDataCollector({\n paypal: true,\n });\n const tokenizePayload = await braintreePaypalCheckout.tokenizePayment(authorizeData);\n const { details, nonce } = tokenizePayload;\n const billingAddress =\n this.braintreeIntegrationService.mapToLegacyBillingAddress(details);\n const shippingAddress =\n this.braintreeIntegrationService.mapToLegacyShippingAddress(details);\n\n this.formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n provider: methodId,\n action: 'set_external_checkout',\n nonce,\n device_data: deviceData,\n billing_address: JSON.stringify(billingAddress),\n shipping_address: JSON.stringify(shippingAddress),\n });\n\n return tokenizePayload;\n } catch (error) {\n const { container, onError } = braintreepaypalcredit;\n\n this.handleError(error, container, onError);\n }\n }\n\n private handleError(\n error: unknown,\n buttonContainerId: string,\n onErrorCallback?: (error: BraintreeError | StandardError) => void,\n ): void {\n this.braintreeIntegrationService.removeElement(buttonContainerId);\n\n if (onErrorCallback && isBraintreeError(error)) {\n onErrorCallback(error);\n } else {\n throw error;\n }\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CustomerStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreePaypalCreditCustomerStrategy from './braintree-paypal-credit-customer-strategy';\n\nconst createBraintreePaypalCreditCustomerStrategy: CustomerStrategyFactory<\n BraintreePaypalCreditCustomerStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n ),\n braintreeHostWindow,\n );\n\n return new BraintreePaypalCreditCustomerStrategy(\n paymentIntegrationService,\n createFormPoster(),\n braintreeIntegrationService,\n braintreeHostWindow,\n );\n};\n\nexport default toResolvableModule(createBraintreePaypalCreditCustomerStrategy, [\n { id: 'braintreepaypalcredit' },\n]);\n","import {\n BraintreeInitializationData,\n getFastlaneStyles,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CustomerCredentials,\n CustomerInitializeOptions,\n CustomerStrategy,\n ExecutePaymentMethodCheckoutOptions,\n InvalidArgumentError,\n PaymentIntegrationService,\n PaymentMethod,\n RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithBraintreeFastlaneCustomerInitializeOptions } from './braintree-fastlane-customer-initialize-options';\nimport BraintreeFastlaneUtils from './braintree-fastlane-utils';\n\nexport default class BraintreeFastlaneCustomerStrategy implements CustomerStrategy {\n private isAcceleratedCheckoutEnabled = false;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private braintreeFastlaneUtils: BraintreeFastlaneUtils,\n ) {}\n\n async initialize({\n methodId,\n braintreefastlane,\n }: CustomerInitializeOptions & WithBraintreeFastlaneCustomerInitializeOptions): Promise<void> {\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"methodId\" argument is not provided.',\n );\n }\n\n const paymentMethod = await this.getValidPaymentMethodOrThrow(methodId);\n\n const { isAcceleratedCheckoutEnabled, isFastlaneStylingEnabled } =\n paymentMethod.initializationData || {};\n\n const paypalFastlaneStylesSettings = isFastlaneStylingEnabled\n ? paymentMethod.initializationData?.fastlaneStyles\n : undefined;\n\n this.isAcceleratedCheckoutEnabled = !!isAcceleratedCheckoutEnabled;\n\n try {\n if (this.isAcceleratedCheckoutEnabled) {\n const fastlaneStyles = getFastlaneStyles(\n paypalFastlaneStylesSettings,\n braintreefastlane?.styles,\n );\n\n await this.braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow(\n paymentMethod.id,\n fastlaneStyles,\n );\n }\n } catch (_) {\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\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 } = options || {};\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 (this.isAcceleratedCheckoutEnabled && customer.isGuest) {\n const shouldRunAuthenticationFlow = await this.shouldRunAuthenticationFlow();\n\n if (\n checkoutPaymentMethodExecuted &&\n typeof checkoutPaymentMethodExecuted === 'function'\n ) {\n checkoutPaymentMethodExecuted();\n }\n\n if (shouldRunAuthenticationFlow) {\n await this.braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow(\n undefined,\n true,\n );\n }\n }\n\n continueWithCheckoutCallback();\n }\n\n // TODO: remove this method after A/B testing finished\n private async shouldRunAuthenticationFlow(): Promise<boolean> {\n const primaryMethodId = 'braintreeacceleratedcheckout';\n\n try {\n // Info: we should load payment method each time to detect if the user\n // should be in a test or in a control group\n await this.paymentIntegrationService.loadPaymentMethod(primaryMethodId);\n\n const state = this.paymentIntegrationService.getState();\n const paymentMethod =\n state.getPaymentMethodOrThrow<BraintreeInitializationData>(primaryMethodId);\n\n // Info: shouldRunAcceleratedCheckout is responsible for the flow of A/B testing purposes\n // when shouldRunAcceleratedCheckout is true, the lookup PayPal Connect method should be called,\n // otherwise AcceleratedCheckout should not be available for the customer\n return paymentMethod.initializationData?.shouldRunAcceleratedCheckout || false;\n } catch (_) {\n return false;\n }\n }\n\n private async getValidPaymentMethodOrThrow(\n methodId: string,\n ): Promise<PaymentMethod<BraintreeInitializationData>> {\n let validPaymentMethodId = methodId;\n\n try {\n await this.paymentIntegrationService.loadPaymentMethod(validPaymentMethodId);\n } catch {\n validPaymentMethodId =\n methodId === 'braintree' ? 'braintreeacceleratedcheckout' : 'braintree';\n await this.paymentIntegrationService.loadPaymentMethod(validPaymentMethodId);\n }\n\n return this.paymentIntegrationService\n .getState()\n .getPaymentMethodOrThrow<BraintreeInitializationData>(validPaymentMethodId);\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CustomerStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeFastlaneCustomerStrategy from './braintree-fastlane-customer-strategy';\nimport BraintreeFastlaneUtils from './braintree-fastlane-utils';\n\nconst createBraintreeFastlaneCustomerStrategy: CustomerStrategyFactory<\n BraintreeFastlaneCustomerStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n ),\n braintreeHostWindow,\n );\n const braintreeFastlaneUtils = new BraintreeFastlaneUtils(\n paymentIntegrationService,\n braintreeIntegrationService,\n );\n\n return new BraintreeFastlaneCustomerStrategy(paymentIntegrationService, braintreeFastlaneUtils);\n};\n\n// Info: braintree method id was added only for A/B testing purposes.\n// The main reason why we can't go in other way, because braintreeacceleratedcheckout\n// may be turned on only when BE knows customer's email address (to understand should we show the feature for the user or not).\n// So { id: 'braintree' }, should be removed after A/B testing\nexport default toResolvableModule(createBraintreeFastlaneCustomerStrategy, [\n { id: 'braintreeacceleratedcheckout' },\n { id: 'braintree' },\n]);\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 { FormPoster } from '@bigcommerce/form-poster';\nimport { noop } from 'lodash';\n\nimport {\n BraintreeDataCollector,\n BraintreeSdk,\n BraintreeVisaCheckout,\n VisaCheckoutAddress,\n VisaCheckoutPaymentSuccessPayload,\n VisaCheckoutTokenizedPayload,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n Address,\n CustomerInitializeOptions,\n CustomerStrategy,\n ExecutePaymentMethodCheckoutOptions,\n InvalidArgumentError,\n LegacyAddress,\n MissingDataError,\n MissingDataErrorType,\n NotImplementedError,\n PaymentIntegrationService,\n RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithBraintreeVisaCheckoutCustomerInitializeOptions } from './braintree-visa-customer-initialize-options';\n\nexport default class BraintreeVisaCheckoutCustomerStrategy implements CustomerStrategy {\n private buttonClassName = 'visa-checkout-wrapper';\n private onError = noop;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private formPoster: FormPoster,\n private braintreeSdk: BraintreeSdk,\n ) {}\n\n async initialize(\n options: CustomerInitializeOptions & WithBraintreeVisaCheckoutCustomerInitializeOptions,\n ): Promise<void> {\n const { braintreevisacheckout: visaCheckoutOptions, methodId } = options;\n\n if (!methodId) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"methodId\" argument is not provided.',\n );\n }\n\n if (!visaCheckoutOptions) {\n throw new InvalidArgumentError(\n 'Unable to proceed because \"options.braintreevisacheckout\" argument is not provided.',\n );\n }\n\n await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n\n const checkout = state.getCheckoutOrThrow();\n\n const { clientToken, config } = state.getPaymentMethodOrThrow(methodId);\n\n const storeConfig = state.getStoreConfigOrThrow();\n\n if (!clientToken) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n this.braintreeSdk.initialize(clientToken);\n\n const braintreeVisaCheckout = await this.braintreeSdk.getBraintreeVisaCheckout();\n\n const visaCheckoutInstance = await this.braintreeSdk.getVisaCheckoutSdk(config.testMode);\n\n const { container, onError } = visaCheckoutOptions;\n\n this.onError = onError || noop;\n\n const initOptions = braintreeVisaCheckout.createInitOptions({\n paymentRequest: {\n currencyCode: storeConfig.currency.code,\n subtotal: String(checkout.subtotal),\n },\n settings: {\n locale: storeConfig.storeProfile.storeLanguage,\n shipping: {\n collectShipping: true,\n },\n },\n });\n\n const signInButton = this.createSignInButton(container, this.buttonClassName);\n\n await visaCheckoutInstance.init(initOptions);\n\n visaCheckoutInstance.on(\n 'payment.success',\n (paymentSuccessPayload: VisaCheckoutPaymentSuccessPayload) =>\n this.tokenizePayment(braintreeVisaCheckout, paymentSuccessPayload)\n .then(() => this.paymentIntegrationService.loadCheckout())\n .catch((error) => this.handleError(error)),\n );\n\n visaCheckoutInstance.on('payment.error', (_, error) => this.handleError(error));\n\n signInButton.style.visibility = 'visible';\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreeSdk.deinitialize();\n }\n\n signIn(): Promise<void> {\n throw new NotImplementedError(\n 'In order to sign in via VisaCheckout, the shopper must click on \"Visa Checkout\" button.',\n );\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 async tokenizePayment(\n braintreeVisaCheckout: BraintreeVisaCheckout,\n payment: VisaCheckoutPaymentSuccessPayload,\n ) {\n return Promise.all([\n braintreeVisaCheckout.tokenize(payment),\n this.braintreeSdk.getDataCollectorOrThrow(),\n ]).then(([payload, deviceData]) => {\n const state = this.paymentIntegrationService.getState();\n\n const shipping = state.getShippingAddress();\n const billing = state.getBillingAddress();\n\n const {\n shippingAddress = this.mapToVisaCheckoutAddress(shipping),\n billingAddress = this.mapToVisaCheckoutAddress(billing),\n } = payload;\n\n return this.postForm(\n {\n ...payload,\n shippingAddress,\n billingAddress,\n },\n deviceData,\n );\n });\n }\n\n private postForm(\n paymentData: VisaCheckoutTokenizedPayload,\n dataCollector: BraintreeDataCollector,\n ) {\n const { userData, billingAddress, shippingAddress, details: cardInformation } = paymentData;\n const { userEmail } = userData;\n const { deviceData } = dataCollector;\n\n return this.formPoster.postForm('/checkout.php', {\n payment_type: paymentData.type,\n nonce: paymentData.nonce,\n provider: 'braintreevisacheckout',\n action: 'set_external_checkout',\n device_data: deviceData,\n card_information: JSON.stringify({\n type: cardInformation.cardType,\n number: cardInformation.lastTwo,\n }),\n billing_address: JSON.stringify(this.getAddress(userEmail, billingAddress)),\n shipping_address: JSON.stringify(this.getAddress(userEmail, shippingAddress)),\n });\n }\n\n private mapToVisaCheckoutAddress(address?: Address): VisaCheckoutAddress {\n if (!address) {\n return {};\n }\n\n return {\n firstName: address.firstName,\n lastName: address.lastName,\n phoneNumber: address.phone,\n streetAddress: address.address1,\n extendedAddress: address.address2,\n locality: address.city,\n region: address.stateOrProvinceCode,\n countryCode: address.countryCode,\n postalCode: address.postalCode,\n };\n }\n\n private getAddress(email: string, address: VisaCheckoutAddress = {}): Partial<LegacyAddress> {\n return {\n email,\n first_name: address.firstName,\n last_name: address.lastName,\n phone_number: address.phoneNumber,\n address_line_1: address.streetAddress,\n address_line_2: address.extendedAddress,\n city: address.locality,\n state: address.region,\n country_code: address.countryCode,\n postal_code: address.postalCode,\n };\n }\n\n private createSignInButton(containerId: string, buttonClass: string): HTMLElement {\n const container = document.querySelector(`#${containerId}`);\n\n if (!container) {\n throw new Error('Unable to proceed because the provided container ID is not valid.');\n }\n\n return this.insertVisaCheckoutButton(container, buttonClass);\n }\n\n private insertVisaCheckoutButton(container: Element, buttonClass: string): HTMLElement {\n const buttonSource =\n 'https://secure.checkout.visa.com/wallet-services-web/xo/button.png?acceptCanadianVisaDebit=false&cobrand=true&height=34&width=178';\n const buttonTemplate = `\n <img\n alt=\"Visa Checkout\"\n class=\"v-button\"\n role=\"button\"\n src=\"${buttonSource}\"\n />\n <a class=\"v-learn v-learn-default\" style=\"text-align: right; display: block; font-size: 10px; color: #003366;\" href=\"#\" data-locale=\"en_US\">Tell Me More</a>`;\n\n const visaCheckoutButton = document.createElement('div');\n\n visaCheckoutButton.style.display = 'flex';\n visaCheckoutButton.style.flexDirection = 'column';\n visaCheckoutButton.style.visibility = 'hidden';\n visaCheckoutButton.style.width = 'max-content';\n\n visaCheckoutButton.className = buttonClass;\n visaCheckoutButton.innerHTML = buttonTemplate;\n\n container.appendChild(visaCheckoutButton);\n\n return visaCheckoutButton;\n }\n\n private handleError(error: Error) {\n if (typeof this.onError === 'function') {\n this.onError(error);\n } else {\n throw error;\n }\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeScriptLoader,\n BraintreeSdk,\n BraintreeSDKVersionManager,\n VisaCheckoutHostWindow,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CustomerStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeVisaCheckoutCustomerStrategy from './braintree-visa-checkout-customer-strategy';\n\nconst createBraintreeVisaCheckoutCustomerStrategy: CustomerStrategyFactory<\n BraintreeVisaCheckoutCustomerStrategy\n> = (paymentIntegrationService) => {\n const hostWindow: VisaCheckoutHostWindow & BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeSdk = new BraintreeSdk(\n new BraintreeScriptLoader(getScriptLoader(), hostWindow, braintreeSDKVersionManager),\n );\n\n return new BraintreeVisaCheckoutCustomerStrategy(\n paymentIntegrationService,\n createFormPoster(),\n braintreeSdk,\n );\n};\n\nexport default toResolvableModule(createBraintreeVisaCheckoutCustomerStrategy, [\n { id: 'braintreevisacheckout' },\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 { isNil, omitBy } from 'lodash';\n\nimport { PaypalStyleOptions } from '@bigcommerce/checkout-sdk/braintree-utils';\n\nexport default function getValidButtonStyle(style?: PaypalStyleOptions): PaypalStyleOptions {\n const { color, fundingicons, height = 40, layout, shape, size, tagline } = style || {};\n\n const validStyles = {\n color,\n fundingicons,\n height: getValidHeight(height),\n layout,\n shape: shape || 'rect',\n size,\n tagline,\n };\n\n return omitBy(validStyles, isNil);\n}\n\nfunction getValidHeight(height: number | string): number {\n const minHeight = 25;\n const defaultHeight = 40;\n const maxHeight = 55;\n\n const currentHeight = Number(height);\n\n if (!currentHeight || Number.isNaN(currentHeight)) {\n return defaultHeight;\n }\n\n if (currentHeight > maxHeight) {\n return maxHeight;\n }\n\n if (currentHeight < minHeight) {\n return minHeight;\n }\n\n return currentHeight;\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n BraintreeError,\n BraintreeHostWindow,\n BraintreeInitializationData,\n BraintreeIntegrationService,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeTokenizePayload,\n isBraintreeError,\n PaypalAuthorizeData,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n BuyNowCartCreationError,\n BuyNowCartRequestBody,\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethod,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport getValidButtonStyle from '../get-valid-button-style';\nimport mapToBraintreeShippingAddressOverride from '../map-to-braintree-shipping-address-override';\n\nimport BraintreePaypalButtonInitializeOptions, {\n WithBraintreePaypalButtonInitializeOptions,\n} from './braintree-paypal-button-initialize-options';\n\nexport default class BraintreePaypalButtonStrategy implements CheckoutButtonStrategy {\n private buyNowCartId: string | undefined;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private formPoster: FormPoster,\n private braintreeIntegrationService: BraintreeIntegrationService,\n private braintreeHostWindow: BraintreeHostWindow,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithBraintreePaypalButtonInitializeOptions,\n ): Promise<void> {\n const { braintreepaypal, 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 (!braintreepaypal) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.`,\n );\n }\n\n let state = this.paymentIntegrationService.getState();\n let currencyCode: string;\n\n if (braintreepaypal.buyNowInitializeOptions) {\n if (!braintreepaypal.currencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.`,\n );\n }\n\n currencyCode = braintreepaypal.currencyCode;\n } else {\n await this.paymentIntegrationService.loadDefaultCheckout();\n\n state = this.paymentIntegrationService.getState();\n currencyCode = state.getCartOrThrow().currency.code;\n }\n\n const paymentMethod = state.getPaymentMethodOrThrow<BraintreeInitializationData>(methodId);\n const { clientToken, config, initializationData } = paymentMethod;\n\n if (!clientToken || !initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const paypalCheckoutOptions: Partial<BraintreePaypalSdkCreatorConfig> = {\n currency: currencyCode,\n intent: initializationData.intent,\n isCreditEnabled: initializationData.isCreditEnabled,\n commit: false,\n };\n\n const paypalCheckoutSuccessCallback = (\n braintreePaypalCheckout: BraintreePaypalCheckout,\n ) => {\n this.renderPayPalButton(\n braintreePaypalCheckout,\n braintreepaypal,\n containerId,\n methodId,\n !!config.testMode,\n );\n };\n const paypalCheckoutErrorCallback = (error: BraintreeError) =>\n this.handleError(error, containerId, braintreepaypal.onError);\n\n this.braintreeIntegrationService.initialize(clientToken);\n await this.braintreeIntegrationService.getPaypalCheckout(\n paypalCheckoutOptions,\n paypalCheckoutSuccessCallback,\n paypalCheckoutErrorCallback,\n );\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreeIntegrationService.teardown();\n }\n\n private renderPayPalButton(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypal: BraintreePaypalButtonInitializeOptions,\n containerId: string,\n methodId: string,\n testMode: boolean,\n ): void {\n const { style, shouldProcessPayment, onAuthorizeError, onEligibilityFailure } =\n braintreepaypal;\n const { paypal } = this.braintreeHostWindow;\n\n if (paypal) {\n const paypalButtonRender = paypal.Buttons({\n env: testMode ? 'sandbox' : 'production',\n fundingSource: paypal.FUNDING.PAYPAL,\n style: getValidButtonStyle(style),\n createOrder: () =>\n this.setupPayment(braintreePaypalCheckout, braintreepaypal, methodId),\n onApprove: (authorizeData: PaypalAuthorizeData) =>\n this.tokenizePayment(\n authorizeData,\n braintreePaypalCheckout,\n methodId,\n shouldProcessPayment,\n onAuthorizeError,\n ),\n });\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n } else if (onEligibilityFailure && typeof onEligibilityFailure === 'function') {\n onEligibilityFailure();\n }\n } else {\n this.braintreeIntegrationService.removeElement(containerId);\n }\n }\n\n private async setupPayment(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypal: BraintreePaypalButtonInitializeOptions,\n methodId: string,\n ): Promise<string | void> {\n const { onPaymentError, shippingAddress, buyNowInitializeOptions } = braintreepaypal;\n\n try {\n const buyNowCart =\n typeof buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function'\n ? await this.createBuyNowCart(\n buyNowInitializeOptions.getBuyNowCartRequestBody(),\n )\n : undefined;\n\n this.buyNowCartId = buyNowCart?.id;\n\n const state = this.paymentIntegrationService.getState();\n const customer = state.getCustomer();\n const paymentMethod: PaymentMethod<BraintreeInitializationData> =\n state.getPaymentMethodOrThrow(methodId);\n\n const amount = buyNowCart ? buyNowCart.cartAmount : state.getCartOrThrow().cartAmount;\n const currencyCode = buyNowCart\n ? braintreepaypal.currencyCode\n : state.getCartOrThrow().currency.code;\n\n const address = shippingAddress || customer?.addresses[0];\n\n const shippingAddressOverride = address\n ? mapToBraintreeShippingAddressOverride(address)\n : undefined;\n\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n shippingAddressOverride,\n amount,\n currency: currencyCode,\n offerCredit: false,\n intent: paymentMethod.initializationData?.intent,\n });\n } catch (error: unknown) {\n if (onPaymentError) {\n if (isBraintreeError(error) || error instanceof StandardError) {\n onPaymentError(error);\n }\n }\n\n throw error;\n }\n }\n\n private async tokenizePayment(\n authorizeData: PaypalAuthorizeData,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n methodId: string,\n shouldProcessPayment?: boolean,\n onError?: (error: BraintreeError | StandardError) => void,\n ): Promise<BraintreeTokenizePayload | void> {\n try {\n const { deviceData } = await this.braintreeIntegrationService.getDataCollector({\n paypal: true,\n });\n const tokenizePayload = await braintreePaypalCheckout.tokenizePayment(authorizeData);\n const { details, nonce } = tokenizePayload;\n const billingAddress =\n this.braintreeIntegrationService.mapToLegacyBillingAddress(details);\n const shippingAddress =\n this.braintreeIntegrationService.mapToLegacyShippingAddress(details);\n\n this.formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n provider: methodId,\n action: shouldProcessPayment ? 'process_payment' : 'set_external_checkout',\n nonce,\n device_data: deviceData,\n billing_address: JSON.stringify(billingAddress),\n shipping_address: JSON.stringify(shippingAddress),\n ...(this.buyNowCartId && { cart_id: this.buyNowCartId }),\n });\n\n return tokenizePayload;\n } catch (error) {\n if (onError) {\n if (isBraintreeError(error) || error instanceof StandardError) {\n onError(error);\n }\n }\n\n throw error;\n }\n }\n\n private async createBuyNowCart(buyNowCardRequestBody?: BuyNowCartRequestBody | void) {\n if (!buyNowCardRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n return await this.paymentIntegrationService.createBuyNowCart(buyNowCardRequestBody);\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n\n private handleError(\n error: unknown,\n buttonContainerId: string,\n onErrorCallback?: (error: BraintreeError | StandardError) => void,\n ): void {\n this.braintreeIntegrationService.removeElement(buttonContainerId);\n\n if (onErrorCallback && isBraintreeError(error)) {\n onErrorCallback(error);\n } else {\n throw error;\n }\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreePaypalButtonStrategy from './braintree-paypal-button-strategy';\n\nconst createBraintreePaypalButtonStrategy: CheckoutButtonStrategyFactory<\n BraintreePaypalButtonStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n ),\n braintreeHostWindow,\n );\n\n return new BraintreePaypalButtonStrategy(\n paymentIntegrationService,\n createFormPoster(),\n braintreeIntegrationService,\n braintreeHostWindow,\n );\n};\n\nexport default toResolvableModule(createBraintreePaypalButtonStrategy, [{ id: 'braintreepaypal' }]);\n","import { FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n BraintreeError,\n BraintreeHostWindow,\n BraintreeInitializationData,\n BraintreeIntegrationService,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeTokenizePayload,\n isBraintreeError,\n PaypalAuthorizeData,\n PaypalButtonStyleLabelOption,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n BuyNowCartCreationError,\n BuyNowCartRequestBody,\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethod,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport getValidButtonStyle from '../get-valid-button-style';\nimport mapToBraintreeShippingAddressOverride from '../map-to-braintree-shipping-address-override';\n\nimport BraintreePaypalCreditButtonInitializeOptions, {\n WithBraintreePaypalCreditButtonInitializeOptions,\n} from './braintree-paypal-credit-button-initialize-options';\n\nexport default class BraintreePaypalCreditButtonStrategy implements CheckoutButtonStrategy {\n private buyNowCartId: string | undefined;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private formPoster: FormPoster,\n private braintreeIntegrationService: BraintreeIntegrationService,\n private braintreeHostWindow: BraintreeHostWindow,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithBraintreePaypalCreditButtonInitializeOptions,\n ): Promise<void> {\n const { braintreepaypalcredit, 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 (!braintreepaypalcredit) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.`,\n );\n }\n\n let state = this.paymentIntegrationService.getState();\n let currencyCode: string;\n\n if (braintreepaypalcredit.buyNowInitializeOptions) {\n if (!braintreepaypalcredit.currencyCode) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.`,\n );\n }\n\n currencyCode = braintreepaypalcredit.currencyCode;\n } else {\n await this.paymentIntegrationService.loadDefaultCheckout();\n\n state = this.paymentIntegrationService.getState();\n currencyCode = state.getCartOrThrow().currency.code;\n }\n\n const paymentMethod = state.getPaymentMethodOrThrow<BraintreeInitializationData>(methodId);\n const { clientToken, config, initializationData } = paymentMethod;\n\n if (!clientToken || !initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const paypalCheckoutOptions: Partial<BraintreePaypalSdkCreatorConfig> = {\n currency: currencyCode,\n intent: initializationData.intent,\n isCreditEnabled: initializationData.isCreditEnabled,\n commit: false,\n };\n\n const paypalCheckoutSuccessCallback = (\n braintreePaypalCheckout: BraintreePaypalCheckout,\n ) => {\n this.renderPayPalButton(\n braintreePaypalCheckout,\n braintreepaypalcredit,\n containerId,\n methodId,\n !!config.testMode,\n );\n };\n const paypalCheckoutErrorCallback = (error: BraintreeError) =>\n this.handleError(error, containerId, braintreepaypalcredit.onError);\n\n this.braintreeIntegrationService.initialize(clientToken);\n await this.braintreeIntegrationService.getPaypalCheckout(\n paypalCheckoutOptions,\n paypalCheckoutSuccessCallback,\n paypalCheckoutErrorCallback,\n );\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreeIntegrationService.teardown();\n }\n\n private renderPayPalButton(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypalcredit: BraintreePaypalCreditButtonInitializeOptions,\n containerId: string,\n methodId: string,\n testMode: boolean,\n ): void {\n const { style, shouldProcessPayment, onAuthorizeError, onEligibilityFailure } =\n braintreepaypalcredit;\n const { paypal } = this.braintreeHostWindow;\n\n let hasRenderedSmartButton = false;\n\n if (paypal) {\n const fundingSources = [paypal.FUNDING.PAYLATER, paypal.FUNDING.CREDIT];\n\n fundingSources.forEach((fundingSource) => {\n const buttonStyle =\n fundingSource === paypal.FUNDING.CREDIT\n ? {\n label: PaypalButtonStyleLabelOption.CREDIT,\n ...getValidButtonStyle(style),\n }\n : getValidButtonStyle(style);\n\n if (!hasRenderedSmartButton) {\n const paypalButtonRender = paypal.Buttons({\n env: testMode ? 'sandbox' : 'production',\n fundingSource,\n style: buttonStyle,\n createOrder: () =>\n this.setupPayment(\n braintreePaypalCheckout,\n braintreepaypalcredit,\n methodId,\n ),\n onApprove: (authorizeData: PaypalAuthorizeData) =>\n this.tokenizePayment(\n authorizeData,\n braintreePaypalCheckout,\n methodId,\n shouldProcessPayment,\n onAuthorizeError,\n ),\n });\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n hasRenderedSmartButton = true;\n } else if (\n paypal.FUNDING.CREDIT &&\n onEligibilityFailure &&\n typeof onEligibilityFailure === 'function'\n ) {\n // the condition is related to paypal.FUNDING.CREDIT because when paypal.FUNDING.PAYLATER is not eligible then\n // CREDIT button should be configured and triggered to render with eligibility check\n // and if it is not eligible, then onEligibilityFailure callback should be called\n onEligibilityFailure();\n }\n }\n });\n }\n\n if (!paypal || !hasRenderedSmartButton) {\n this.braintreeIntegrationService.removeElement(containerId);\n }\n }\n\n private async setupPayment(\n braintreePaypalCheckout: BraintreePaypalCheckout,\n braintreepaypalcredit: BraintreePaypalCreditButtonInitializeOptions,\n methodId: string,\n ): Promise<string | void> {\n const { onPaymentError, shippingAddress, buyNowInitializeOptions } = braintreepaypalcredit;\n\n try {\n const buyNowCart =\n typeof buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function'\n ? await this.createBuyNowCart(\n buyNowInitializeOptions.getBuyNowCartRequestBody(),\n )\n : undefined;\n\n this.buyNowCartId = buyNowCart?.id;\n\n const state = this.paymentIntegrationService.getState();\n const customer = state.getCustomer();\n const paymentMethod: PaymentMethod<BraintreeInitializationData> =\n state.getPaymentMethodOrThrow(methodId);\n\n const amount = buyNowCart ? buyNowCart.cartAmount : state.getCartOrThrow().cartAmount; // state.getCheckoutOrThrow().outstandingBalance\n const currencyCode = buyNowCart\n ? braintreepaypalcredit.currencyCode\n : state.getCartOrThrow().currency.code;\n\n const address = shippingAddress || customer?.addresses[0];\n\n const shippingAddressOverride = address\n ? mapToBraintreeShippingAddressOverride(address)\n : undefined;\n\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n shippingAddressOverride,\n amount,\n currency: currencyCode,\n offerCredit: true,\n intent: paymentMethod.initializationData?.intent,\n });\n } catch (error: unknown) {\n if (onPaymentError) {\n if (isBraintreeError(error) || error instanceof StandardError) {\n onPaymentError(error);\n }\n }\n\n throw error;\n }\n }\n\n private async tokenizePayment(\n authorizeData: PaypalAuthorizeData,\n braintreePaypalCheckout: BraintreePaypalCheckout,\n methodId: string,\n shouldProcessPayment?: boolean,\n onError?: (error: BraintreeError | StandardError) => void,\n ): Promise<BraintreeTokenizePayload | void> {\n try {\n const { deviceData } = await this.braintreeIntegrationService.getDataCollector({\n paypal: true,\n });\n const tokenizePayload = await braintreePaypalCheckout.tokenizePayment(authorizeData);\n const { details, nonce } = tokenizePayload;\n const billingAddress =\n this.braintreeIntegrationService.mapToLegacyBillingAddress(details);\n const shippingAddress =\n this.braintreeIntegrationService.mapToLegacyShippingAddress(details);\n\n this.formPoster.postForm('/checkout.php', {\n payment_type: 'paypal',\n provider: methodId,\n action: shouldProcessPayment ? 'process_payment' : 'set_external_checkout',\n nonce,\n device_data: deviceData,\n billing_address: JSON.stringify(billingAddress),\n shipping_address: JSON.stringify(shippingAddress),\n ...(this.buyNowCartId && { cart_id: this.buyNowCartId }),\n });\n\n return tokenizePayload;\n } catch (error) {\n if (onError) {\n if (isBraintreeError(error) || error instanceof StandardError) {\n onError(error);\n }\n }\n\n throw error;\n }\n }\n\n private async createBuyNowCart(buyNowCardRequestBody?: BuyNowCartRequestBody | void) {\n if (!buyNowCardRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n return await this.paymentIntegrationService.createBuyNowCart(buyNowCardRequestBody);\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n\n private handleError(\n error: unknown,\n buttonContainerId: string,\n onErrorCallback?: (error: BraintreeError | StandardError) => void,\n ): void {\n this.braintreeIntegrationService.removeElement(buttonContainerId);\n\n if (onErrorCallback && isBraintreeError(error)) {\n onErrorCallback(error);\n } else {\n throw error;\n }\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreeScriptLoader,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreePaypalCreditButtonStrategy from './braintree-paypal-credit-button-strategy';\n\nconst createBraintreePaypalCreditButtonStrategy: CheckoutButtonStrategyFactory<\n BraintreePaypalCreditButtonStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n braintreeSDKVersionManager,\n ),\n braintreeHostWindow,\n );\n\n return new BraintreePaypalCreditButtonStrategy(\n paymentIntegrationService,\n createFormPoster(),\n braintreeIntegrationService,\n braintreeHostWindow,\n );\n};\n\nexport default toResolvableModule(createBraintreePaypalCreditButtonStrategy, [\n { id: 'braintreepaypalcredit' },\n]);\n","import { FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n BraintreeDataCollector,\n BraintreeSdk,\n BraintreeVisaCheckout,\n VisaCheckoutAddress,\n VisaCheckoutPaymentSuccessPayload,\n VisaCheckoutTokenizedPayload,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n Address,\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n LegacyAddress,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class BraintreeVisaCheckoutButtonStrategy implements CheckoutButtonStrategy {\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private formPoster: FormPoster,\n private braintreeSdk: BraintreeSdk,\n ) {}\n\n async initialize(options: CheckoutButtonInitializeOptions): Promise<void> {\n const { 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 await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n const state = this.paymentIntegrationService.getState();\n\n const { clientToken, initializationData, config } = state.getPaymentMethodOrThrow(methodId);\n\n if (!clientToken || !initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n this.braintreeSdk.initialize(clientToken);\n\n const braintreeVisaCheckout = await this.braintreeSdk.getBraintreeVisaCheckout();\n\n const {\n currency: { code },\n cartAmount,\n } = state.getCartOrThrow();\n\n const visaCheckoutInstance = await this.braintreeSdk.getVisaCheckoutSdk(config.testMode);\n\n const initOptions = braintreeVisaCheckout.createInitOptions({\n paymentRequest: {\n currencyCode: code,\n subtotal: String(cartAmount),\n },\n settings: {\n shipping: {\n collectShipping: true,\n },\n },\n });\n\n this.createSignInButton(containerId);\n\n await visaCheckoutInstance.init(initOptions);\n\n visaCheckoutInstance.on('payment.success', async (payment) => {\n await this.paymentSuccess(braintreeVisaCheckout, payment);\n });\n }\n\n deinitialize(): Promise<void> {\n return Promise.resolve();\n }\n\n private async paymentSuccess(\n braintreeVisaCheckout: BraintreeVisaCheckout,\n payment: VisaCheckoutPaymentSuccessPayload,\n ) {\n return Promise.all([\n braintreeVisaCheckout.tokenize(payment),\n this.braintreeSdk.getDataCollectorOrThrow(),\n ]).then(([payload, deviceData]) => {\n const state = this.paymentIntegrationService.getState();\n\n const shipping = state.getShippingAddress();\n const billing = state.getBillingAddress();\n\n const {\n shippingAddress = this.toVisaCheckoutAddress(shipping),\n billingAddress = this.toVisaCheckoutAddress(billing),\n } = payload;\n\n return this.postForm(\n {\n ...payload,\n shippingAddress,\n billingAddress,\n },\n deviceData,\n );\n });\n }\n\n private postForm(\n paymentData: VisaCheckoutTokenizedPayload,\n dataCollector: BraintreeDataCollector,\n ) {\n const { userData, billingAddress, shippingAddress, details: cardInformation } = paymentData;\n const { userEmail } = userData;\n const { deviceData } = dataCollector;\n\n return this.formPoster.postForm('/checkout.php', {\n payment_type: paymentData.type,\n nonce: paymentData.nonce,\n provider: 'braintreevisacheckout',\n action: 'set_external_checkout',\n device_data: deviceData,\n card_information: JSON.stringify({\n type: cardInformation.cardType,\n number: cardInformation.lastTwo,\n }),\n billing_address: JSON.stringify(this.getAddress(userEmail, billingAddress)),\n shipping_address: JSON.stringify(this.getAddress(userEmail, shippingAddress)),\n });\n }\n\n private toVisaCheckoutAddress(address?: Address): VisaCheckoutAddress {\n if (!address) {\n return {};\n }\n\n return {\n firstName: address.firstName,\n lastName: address.lastName,\n phoneNumber: address.phone,\n streetAddress: address.address1,\n extendedAddress: address.address2,\n locality: address.city,\n region: address.stateOrProvinceCode,\n countryCode: address.countryCode,\n postalCode: address.postalCode,\n };\n }\n\n private getAddress(email: string, address: VisaCheckoutAddress = {}): Partial<LegacyAddress> {\n return {\n email,\n first_name: address.firstName,\n last_name: address.lastName,\n phone_number: address.phoneNumber,\n address_line_1: address.streetAddress,\n address_line_2: address.extendedAddress,\n city: address.locality,\n state: address.region,\n country_code: address.countryCode,\n postal_code: address.postalCode,\n };\n }\n\n private createSignInButton(containerId: string): HTMLElement {\n const container = document.querySelector(`#${containerId}`);\n\n if (!container) {\n throw new Error('Need a container to place the button');\n }\n\n return this.insertVisaCheckoutButton(container);\n }\n\n private insertVisaCheckoutButton(container: Element): HTMLElement {\n const buttonSource =\n 'https://secure.checkout.visa.com/wallet-services-web/xo/button.png?acceptCanadianVisaDebit=false&cobrand=true&height=34&width=178';\n const buttonTemplate = `\n <img\n alt=\"Visa Checkout\"\n class=\"v-button\"\n role=\"button\"\n src=\"${buttonSource}\"\n />\n <a class=\"v-learn v-learn-default\" style=\"text-align: right; display: block; font-size: 10px; color: #003366;\" href=\"#\" data-locale=\"en_US\">Tell Me More</a>`;\n\n const visaCheckoutButton = document.createElement('div');\n\n visaCheckoutButton.style.display = 'flex';\n visaCheckoutButton.style.flexDirection = 'column';\n visaCheckoutButton.style.alignItems = 'flex-end';\n\n visaCheckoutButton.innerHTML = buttonTemplate;\n\n container.appendChild(visaCheckoutButton);\n\n return visaCheckoutButton;\n }\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeScriptLoader,\n BraintreeSdk,\n BraintreeSDKVersionManager,\n VisaCheckoutHostWindow,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeVisaCheckoutButtonStrategy from './braintree-visa-checkout-button-strategy';\n\nconst createBraintreeVisaCheckoutButtonStrategy: CheckoutButtonStrategyFactory<\n BraintreeVisaCheckoutButtonStrategy\n> = (paymentIntegrationService) => {\n const hostWindow: VisaCheckoutHostWindow & BraintreeHostWindow = window;\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeSdk = new BraintreeSdk(\n new BraintreeScriptLoader(getScriptLoader(), hostWindow, braintreeSDKVersionManager),\n );\n\n return new BraintreeVisaCheckoutButtonStrategy(\n paymentIntegrationService,\n createFormPoster(),\n braintreeSdk,\n );\n};\n\nexport default toResolvableModule(createBraintreeVisaCheckoutButtonStrategy, [\n { id: 'braintreevisacheckout' },\n]);\n","import { LegacyAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BraintreeTokenizationDetails } from './types';\n\nexport default function mapToLegacyBillingAddress(\n details: BraintreeTokenizationDetails,\n): Partial<LegacyAddress> {\n const { billingAddress, email, firstName, lastName, phone, shippingAddress } = details;\n\n const address = billingAddress || shippingAddress;\n\n return {\n email,\n first_name: firstName,\n last_name: lastName,\n phone_number: phone,\n address_line_1: address?.line1,\n address_line_2: address?.line2,\n city: address?.city,\n state: address?.state,\n country_code: address?.countryCode,\n postal_code: address?.postalCode,\n };\n}\n","import { LegacyAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BraintreeTokenizationDetails } from './types';\n\nexport default function mapToLegacyShippingAddress(\n details: BraintreeTokenizationDetails,\n): Partial<LegacyAddress> {\n const { email, phone, shippingAddress } = details;\n\n const recipientName = shippingAddress?.recipientName || '';\n const [firstName, lastName] = recipientName.split(' ');\n\n return {\n email,\n first_name: firstName || '',\n last_name: lastName || '',\n phone_number: phone,\n address_line_1: shippingAddress?.line1,\n address_line_2: shippingAddress?.line2,\n city: shippingAddress?.city,\n state: shippingAddress?.state,\n country_code: shippingAddress?.countryCode,\n postal_code: shippingAddress?.postalCode,\n };\n}\n","import { FormPoster } from '@bigcommerce/form-poster';\nimport { noop } from 'lodash';\n\nimport {\n BraintreeError,\n BraintreeSdk,\n BraintreeTokenizePayload,\n BraintreeVenmoCheckout,\n mapToLegacyBillingAddress,\n mapToLegacyShippingAddress,\n PaypalButtonStyleColorOption,\n PaypalStyleOptions,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n BuyNowCartCreationError,\n BuyNowCartRequestBody,\n Cart,\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentIntegrationService,\n PaymentMethod,\n UnsupportedBrowserError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport isBraintreeError from '../is-braintree-error';\nimport { isUnsupportedBrowserError } from '../isUnsupportedBrowserError';\n\nimport { WithBraintreeVenmoInitializeOptions } from './braintree-venmo-initialize-options';\n\nconst getVenmoButtonStyle = (styles: PaypalStyleOptions): Record<string, string> => {\n const { color, height } = styles;\n\n const colorParser = (c: string) => {\n if (c === PaypalButtonStyleColorOption.WHITE) {\n return '#FFFFFF';\n }\n\n return '#3D95CE';\n };\n\n return {\n backgroundColor: colorParser(color || ''),\n backgroundPosition: '50% 50%',\n backgroundSize: '80px auto',\n backgroundImage: `url(\"/app/assets/img/payment-providers/venmo-logo-${\n color === PaypalButtonStyleColorOption.WHITE\n ? PaypalButtonStyleColorOption.BLUE\n : PaypalButtonStyleColorOption.WHITE\n }.svg\")`,\n backgroundRepeat: 'no-repeat',\n borderRadius: '4px',\n cursor: 'pointer',\n transition: '0.2s ease',\n minHeight: `${height || 40}px`,\n minWidth: '150px',\n height: '100%',\n width: '100%',\n border: color === PaypalButtonStyleColorOption.WHITE ? '1px solid black' : 'none',\n };\n};\n\nconst venmoButtonStyleHover = {\n backgroundColor: '#0a7fc2',\n};\n\ninterface BuyNowInitializeOptions {\n getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\n}\n\nexport default class BraintreeVenmoButtonStrategy implements CheckoutButtonStrategy {\n private onError = noop;\n\n constructor(\n private paymentIntegrationService: PaymentIntegrationService,\n private formPoster: FormPoster,\n private braintreeSdk: BraintreeSdk,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithBraintreeVenmoInitializeOptions,\n ): Promise<void> {\n const { braintreevenmo, 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 const state = this.paymentIntegrationService.getState();\n const paymentMethod = state.getPaymentMethodOrThrow(methodId);\n const { clientToken, initializationData }: PaymentMethod = paymentMethod;\n const { paymentButtonStyles } = initializationData;\n const { cartButtonStyles } = paymentButtonStyles || {};\n const styles = braintreevenmo?.style || cartButtonStyles;\n\n if (!clientToken || !initializationData) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\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 await this.paymentIntegrationService.loadDefaultCheckout();\n\n this.onError = braintreevenmo?.onError || this.handleError;\n this.braintreeSdk.initialize(clientToken);\n\n try {\n const braintreeVenmoCheckout = await this.braintreeSdk.getVenmoCheckoutOrThrow();\n\n this.renderVenmoButton(\n braintreeVenmoCheckout,\n containerId,\n braintreevenmo?.buyNowInitializeOptions,\n styles,\n );\n } catch (error) {\n if (isBraintreeError(error) || isUnsupportedBrowserError(error)) {\n this.handleInitializationVenmoError(error, containerId);\n }\n }\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreeSdk.deinitialize();\n\n return Promise.resolve();\n }\n\n private handleError(error: BraintreeError) {\n throw new Error(error.message);\n }\n\n private async createBuyNowCart(\n buyNowInitializeOptions?: BuyNowInitializeOptions,\n ): Promise<Cart | undefined> {\n if (typeof buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function') {\n const cartRequestBody = buyNowInitializeOptions?.getBuyNowCartRequestBody();\n\n if (!cartRequestBody) {\n throw new MissingDataError(MissingDataErrorType.MissingCart);\n }\n\n try {\n const buyNowCart = await this.paymentIntegrationService.createBuyNowCart(\n cartRequestBody,\n );\n\n return buyNowCart;\n } catch (error) {\n throw new BuyNowCartCreationError();\n }\n }\n\n return undefined;\n }\n\n private handleInitializationVenmoError(\n error: BraintreeError | UnsupportedBrowserError,\n containerId: string,\n ): void {\n this.removeVenmoContainer(containerId);\n\n return this.onError(error);\n }\n\n private removeVenmoContainer(containerId: string): void {\n const buttonContainer = document.getElementById(containerId);\n\n if (buttonContainer) {\n buttonContainer.remove();\n }\n }\n\n private renderVenmoButton(\n braintreeVenmoCheckout: BraintreeVenmoCheckout,\n containerId: string,\n buyNowInitializeOptions?: BuyNowInitializeOptions,\n buttonStyles?: PaypalStyleOptions,\n ): void {\n const venmoButton = document.getElementById(containerId);\n const { color } = buttonStyles || {};\n\n if (!venmoButton) {\n throw new InvalidArgumentError(\n 'Unable to create wallet button without valid container ID.',\n );\n }\n\n venmoButton.setAttribute('aria-label', 'Venmo');\n Object.assign(venmoButton.style, getVenmoButtonStyle(buttonStyles || {}));\n\n venmoButton.addEventListener('click', async () => {\n venmoButton.setAttribute('disabled', 'true');\n\n const buyBowCart = await this.createBuyNowCart(buyNowInitializeOptions);\n\n if (braintreeVenmoCheckout.tokenize) {\n braintreeVenmoCheckout.tokenize(\n async (\n error: BraintreeError | undefined,\n payload: BraintreeTokenizePayload,\n ) => {\n venmoButton.removeAttribute('disabled');\n\n if (error) {\n this.onError(error);\n }\n\n await this.handlePostForm(payload, buyBowCart?.id);\n },\n );\n }\n });\n\n if (color === PaypalButtonStyleColorOption.BLUE) {\n venmoButton.addEventListener('mouseenter', () => {\n venmoButton.style.backgroundColor = venmoButtonStyleHover.backgroundColor;\n });\n\n venmoButton.addEventListener('mouseleave', () => {\n venmoButton.style.backgroundColor = getVenmoButtonStyle(\n buttonStyles || {},\n ).backgroundColor;\n });\n }\n }\n\n private async handlePostForm(\n payload: BraintreeTokenizePayload,\n buyNowCartId?: string,\n ): Promise<void> {\n const { deviceData } = await this.braintreeSdk.getDataCollectorOrThrow();\n const { nonce, details } = payload;\n\n this.formPoster.postForm('/checkout.php', {\n nonce,\n provider: 'braintreevenmo',\n payment_type: 'paypal',\n device_data: deviceData,\n action: 'set_external_checkout',\n billing_address: JSON.stringify(mapToLegacyBillingAddress(details)),\n shipping_address: JSON.stringify(mapToLegacyShippingAddress(details)),\n ...(buyNowCartId && { cart_id: buyNowCartId }),\n });\n }\n}\n","import { UnsupportedBrowserError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function isUnsupportedBrowserError(error: unknown): error is UnsupportedBrowserError {\n return error instanceof UnsupportedBrowserError;\n}\n","import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHostWindow,\n BraintreeScriptLoader,\n BraintreeSdk,\n BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CheckoutButtonStrategyFactory,\n toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeVenmoButtonStrategy from './braintree-venmo-button-strategy';\n\nconst createBraintreeVenmoButtonStrategy: CheckoutButtonStrategyFactory<\n BraintreeVenmoButtonStrategy\n> = (paymentIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n const scriptLoader = getScriptLoader();\n const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n const braintreeScriptLoader = new BraintreeScriptLoader(\n scriptLoader,\n braintreeHostWindow,\n braintreeSDKVersionManager,\n );\n\n const braintreeSdk = new BraintreeSdk(braintreeScriptLoader);\n\n return new BraintreeVenmoButtonStrategy(\n paymentIntegrationService,\n createFormPoster(),\n braintreeSdk,\n );\n};\n\nexport default toResolvableModule(createBraintreeVenmoButtonStrategy, [{ id: 'braintreevenmo' }]);\n","import { BRAINTREE_SDK_DEFAULT_VERSION } from './braintree-sdk-verison';\nimport { SDKVersionManager } from './types';\n\nexport default class BraintreeHeadlessSDKVersionManager implements SDKVersionManager {\n getSDKVersion(): string {\n return BRAINTREE_SDK_DEFAULT_VERSION;\n }\n}\n","import { StandardError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n * Throw this error if the Braintree PayPal wallet flow fails to redirect the\n * shopper to the external checkout page.\n */\nexport default class BraintreePaypalWalletError extends StandardError {\n constructor(message?: string) {\n super(message || 'Failed to redirect to checkout page');\n\n this.name = 'BraintreePaypalWalletError';\n this.type = 'braintree_paypal_wallet';\n }\n}\n","import {\n PaymentMethodClientUnavailableError,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n AddressRequestBody,\n WalletButtonIntegrationService,\n} from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport BraintreePaypalWalletError from './braintree-paypal-wallet-error';\n\nimport {\n BraintreeError,\n BraintreeIntegrationService,\n BraintreePaypalCheckout,\n BraintreePaypalSdkCreatorConfig,\n BraintreeTokenizationDetails,\n BraintreeTokenizePayload,\n BraintreeVenmoCheckout,\n isBraintreeError,\n PaypalAuthorizeData,\n} from './';\n\nexport default class BraintreePaypalWalletService {\n private braintreePaypalCheckout?: BraintreePaypalCheckout;\n private braintreeVenmoCheckout?: BraintreeVenmoCheckout;\n\n constructor(\n private walletButtonIntegrationService: WalletButtonIntegrationService,\n private braintreeIntegrationService: BraintreeIntegrationService,\n ) {}\n\n /**\n *\n * Braintree SDK methods\n *\n */\n initialize(clientToken: string): void {\n this.braintreeIntegrationService.initialize(clientToken);\n }\n\n async loadPaypalCheckout(\n options: BraintreePaypalSdkCreatorConfig,\n containerId: string,\n onError?: (error: BraintreeError | StandardError) => void,\n ): Promise<BraintreePaypalCheckout> {\n this.braintreePaypalCheckout = await new Promise<BraintreePaypalCheckout>(\n (resolve, reject) => {\n void this.braintreeIntegrationService.getPaypalCheckout(\n options,\n resolve,\n (error: BraintreeError) => {\n this.removeElement(containerId);\n\n if (onError && isBraintreeError(error)) {\n onError(error);\n }\n\n reject(error);\n },\n );\n },\n );\n\n return this.braintreePaypalCheckout!;\n }\n\n async loadVenmoCheckout(containerId: string): Promise<BraintreeVenmoCheckout> {\n try {\n this.braintreeVenmoCheckout = await this.braintreeIntegrationService.getVenmoCheckout();\n } catch (error) {\n this.removeElement(containerId);\n\n throw error;\n }\n\n return this.braintreeVenmoCheckout;\n }\n\n getBraintreePaypalCheckoutOrThrow(): BraintreePaypalCheckout {\n if (!this.braintreePaypalCheckout) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.braintreePaypalCheckout;\n }\n\n getBraintreeVenmoCheckoutOrThrow(): BraintreeVenmoCheckout {\n if (!this.braintreeVenmoCheckout) {\n throw new PaymentMethodClientUnavailableError();\n }\n\n return this.braintreeVenmoCheckout;\n }\n\n async teardown(): Promise<void> {\n await this.braintreeIntegrationService.teardown();\n }\n\n /**\n *\n * Payment tokenizing and redirect methods\n *\n */\n async proxyTokenizationPayment(\n authorizeData: PaypalAuthorizeData,\n methodId: string,\n cartId: string,\n ): Promise<BraintreeTokenizePayload> {\n const braintreePaypalCheckout = this.getBraintreePaypalCheckoutOrThrow();\n\n const tokenizePayload = await braintreePaypalCheckout.tokenizePayment(authorizeData);\n\n return this.redirectToExternalCheckout(tokenizePayload, methodId, cartId);\n }\n\n async proxyVenmoTokenizationPayment(\n methodId: string,\n cartId: string,\n ): Promise<BraintreeTokenizePayload> {\n const tokenizePayload = await this.tokenizeVenmo();\n\n return this.redirectToExternalCheckout(tokenizePayload, methodId, cartId);\n }\n\n /**\n *\n * Utils methods\n *\n */\n removeElement(containerId?: string): void {\n this.braintreeIntegrationService.removeElement(containerId);\n }\n\n private async redirectToExternalCheckout(\n tokenizePayload: BraintreeTokenizePayload,\n methodId: string,\n cartId: string,\n ): Promise<BraintreeTokenizePayload> {\n const { deviceData } = await this.braintreeIntegrationService.getDataCollector({\n paypal: true,\n });\n\n const { details, nonce } = tokenizePayload;\n\n const shippingAddress =\n this.braintreeIntegrationService.mapToLegacyShippingAddress(details);\n\n await this.walletButtonIntegrationService.addBillingAddress(\n cartId,\n this.mapToBillingAddress(details),\n );\n\n const inputData = {\n paymentWalletData: {\n providerId: methodId,\n providerOrderId: nonce,\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 { key: 'nonce', value: nonce },\n {\n key: 'shipping_address',\n value: encodeURIComponent(JSON.stringify(shippingAddress)),\n },\n ...(deviceData ? [{ key: 'device_data', value: deviceData }] : []),\n ],\n };\n\n const response = await this.walletButtonIntegrationService.getRedirectToCheckoutUrl(\n inputData,\n );\n\n const externalCheckoutUrl = response.body.redirectUrls?.externalCheckoutUrl;\n\n if (!externalCheckoutUrl) {\n throw new BraintreePaypalWalletError();\n }\n\n window.location.assign(externalCheckoutUrl);\n\n return tokenizePayload;\n }\n\n private mapToBillingAddress(details: BraintreeTokenizationDetails): AddressRequestBody {\n const { billingAddress, email, firstName, lastName, phone, shippingAddress } = details;\n\n const address = billingAddress || shippingAddress;\n\n return {\n firstName: firstName || '',\n lastName: lastName || '',\n company: '',\n address1: address?.line1 || '',\n address2: address?.line2 || '',\n city: address?.city || '',\n email: email || '',\n stateOrProvince: address?.state || '',\n stateOrProvinceCode: address?.state || '',\n countryCode: address?.countryCode || '',\n postalCode: address?.postalCode || '',\n phone: phone || '',\n shouldSaveAddress: false,\n };\n }\n\n private tokenizeVenmo(): Promise<BraintreeTokenizePayload> {\n const braintreeVenmoCheckout = this.getBraintreeVenmoCheckoutOrThrow();\n\n return new Promise<BraintreeTokenizePayload>((resolve, reject) => {\n braintreeVenmoCheckout.tokenize(\n (error: BraintreeError | undefined, payload: BraintreeTokenizePayload) => {\n if (error) {\n return reject(error);\n }\n\n resolve(payload);\n },\n );\n });\n }\n}\n","import {\n BraintreeError,\n BraintreeHostWindow,\n BraintreeInitializationData,\n BraintreePaypalSdkCreatorConfig,\n BraintreePaypalWalletService,\n isBraintreeError,\n PaypalAuthorizeData,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentMethod,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport getValidButtonStyle from '../get-valid-button-style';\n\nimport BraintreePaypalWalletInitializeOptions, {\n WithBraintreePaypalWalletInitializeOptions,\n} from './braintree-paypal-wallet-initialize-options';\n\nexport default class BraintreePaypalWalletStrategy implements CheckoutButtonStrategy {\n constructor(\n private braintreePaypalWalletService: BraintreePaypalWalletService,\n private braintreeHostWindow: BraintreeHostWindow,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithBraintreePaypalWalletInitializeOptions,\n ): Promise<void> {\n const { braintreepaypal, 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 (!braintreepaypal) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.`,\n );\n }\n\n let parsedPaymentMethod: PaymentMethod<BraintreeInitializationData>;\n\n try {\n parsedPaymentMethod = JSON.parse(atob(braintreepaypal.initializationData));\n } catch (error) {\n throw new InvalidArgumentError(\"Failed to parse payment method 'initializationData'.\");\n }\n\n const { initializationData, config } = parsedPaymentMethod;\n\n if (!braintreepaypal.clientToken || !initializationData || !config) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const paypalCheckoutOptions: BraintreePaypalSdkCreatorConfig = {\n currency: braintreepaypal.currency.code,\n intent: initializationData.intent,\n isCreditEnabled: initializationData.isCreditEnabled,\n commit: false,\n };\n\n this.braintreePaypalWalletService.initialize(braintreepaypal.clientToken);\n\n await this.braintreePaypalWalletService.loadPaypalCheckout(\n paypalCheckoutOptions,\n containerId,\n braintreepaypal.onError,\n );\n\n this.renderButton(\n braintreepaypal,\n containerId,\n methodId,\n !!config.testMode,\n initializationData.intent,\n );\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreePaypalWalletService.teardown();\n }\n\n private renderButton(\n braintreepaypal: BraintreePaypalWalletInitializeOptions,\n containerId: string,\n methodId: string,\n testMode: boolean,\n intent?: BraintreeInitializationData['intent'],\n ): void {\n const { style, onEligibilityFailure } = braintreepaypal;\n const { paypal } = this.braintreeHostWindow;\n\n if (!paypal) {\n this.braintreePaypalWalletService.removeElement(containerId);\n\n return;\n }\n\n const paypalButtonRender = paypal.Buttons({\n env: testMode ? 'sandbox' : 'production',\n fundingSource: paypal.FUNDING.PAYPAL,\n style: getValidButtonStyle(style),\n createOrder: () => this.setupPayment(braintreepaypal, intent),\n onApprove: (authorizeData: PaypalAuthorizeData) =>\n this.tokenizePayment(\n authorizeData,\n methodId,\n braintreepaypal.cartId,\n braintreepaypal.onAuthorizeError,\n ),\n });\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n\n return;\n }\n\n if (onEligibilityFailure && typeof onEligibilityFailure === 'function') {\n onEligibilityFailure();\n }\n }\n\n private async setupPayment(\n braintreepaypal: BraintreePaypalWalletInitializeOptions,\n intent?: BraintreeInitializationData['intent'],\n ): Promise<string | void> {\n const { onPaymentError, amount, currency } = braintreepaypal;\n\n const braintreePaypalCheckout =\n this.braintreePaypalWalletService.getBraintreePaypalCheckoutOrThrow();\n\n try {\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n amount,\n currency: currency.code,\n offerCredit: false,\n intent,\n });\n } catch (error: unknown) {\n if (isBraintreeError(error) || error instanceof StandardError) {\n onPaymentError?.(error);\n }\n\n throw error;\n }\n }\n\n private async tokenizePayment(\n authorizeData: PaypalAuthorizeData,\n methodId: string,\n cartId: string,\n onError?: (error: BraintreeError | StandardError) => void,\n ): Promise<void> {\n try {\n await this.braintreePaypalWalletService.proxyTokenizationPayment(\n authorizeData,\n methodId,\n cartId,\n );\n } catch (error) {\n if (isBraintreeError(error) || error instanceof StandardError) {\n onError?.(error);\n }\n\n throw error;\n }\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHeadlessSDKVersionManager,\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreePaypalWalletService,\n BraintreeScriptLoader,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { toResolvableModule } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n WalletButtonIntegrationService,\n WalletPaymentButtonStrategyFactory,\n} from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport BraintreePaypalWalletStrategy from './braintree-paypal-wallet-strategy';\n\nconst createBraintreePaypalWalletStrategy: WalletPaymentButtonStrategyFactory<\n BraintreePaypalWalletStrategy\n> = (walletButtonIntegrationService: WalletButtonIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n new BraintreeHeadlessSDKVersionManager(),\n ),\n braintreeHostWindow,\n );\n\n return new BraintreePaypalWalletStrategy(\n new BraintreePaypalWalletService(\n walletButtonIntegrationService,\n braintreeIntegrationService,\n ),\n braintreeHostWindow,\n );\n};\n\nexport default toResolvableModule(createBraintreePaypalWalletStrategy, [{ id: 'braintreepaypal' }]);\n","import {\n BraintreeError,\n BraintreeHostWindow,\n BraintreeInitializationData,\n BraintreePaypalSdkCreatorConfig,\n BraintreePaypalWalletService,\n isBraintreeError,\n PaypalAuthorizeData,\n PaypalButtonStyleColorOption,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentMethod,\n StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport getValidButtonStyle from '../get-valid-button-style';\n\nimport BraintreePaypalCreditWalletInitializeOptions, {\n WithBraintreePaypalCreditWalletInitializeOptions,\n} from './braintree-paypal-credit-wallet-initialize-options';\n\nexport default class BraintreePaypalCreditWalletStrategy implements CheckoutButtonStrategy {\n constructor(\n private braintreePaypalWalletService: BraintreePaypalWalletService,\n private braintreeHostWindow: BraintreeHostWindow,\n ) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithBraintreePaypalCreditWalletInitializeOptions,\n ): Promise<void> {\n const { braintreepaypalcredit, 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 (!braintreepaypalcredit) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.`,\n );\n }\n\n let parsedPaymentMethod: PaymentMethod<BraintreeInitializationData>;\n\n try {\n parsedPaymentMethod = JSON.parse(atob(braintreepaypalcredit.initializationData));\n } catch (error) {\n throw new InvalidArgumentError(\"Failed to parse payment method 'initializationData'.\");\n }\n\n const { initializationData, config } = parsedPaymentMethod;\n\n if (!braintreepaypalcredit.clientToken || !initializationData || !config) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n const paypalCheckoutOptions: BraintreePaypalSdkCreatorConfig = {\n currency: braintreepaypalcredit.currency.code,\n intent: initializationData.intent,\n isCreditEnabled: initializationData.isCreditEnabled,\n commit: false,\n };\n\n this.braintreePaypalWalletService.initialize(braintreepaypalcredit.clientToken);\n\n await this.braintreePaypalWalletService.loadPaypalCheckout(\n paypalCheckoutOptions,\n containerId,\n braintreepaypalcredit.onError,\n );\n\n this.renderButton(\n braintreepaypalcredit,\n containerId,\n methodId,\n !!config.testMode,\n initializationData.intent,\n );\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreePaypalWalletService.teardown();\n }\n\n private renderButton(\n braintreepaypalcredit: BraintreePaypalCreditWalletInitializeOptions,\n containerId: string,\n methodId: string,\n testMode: boolean,\n intent?: BraintreeInitializationData['intent'],\n ): void {\n const { style, onEligibilityFailure } = braintreepaypalcredit;\n const { paypal } = this.braintreeHostWindow;\n\n if (!paypal) {\n this.braintreePaypalWalletService.removeElement(containerId);\n\n return;\n }\n\n const paypalButtonRender = paypal.Buttons({\n env: testMode ? 'sandbox' : 'production',\n fundingSource: paypal.FUNDING.PAYLATER,\n style: { ...getValidButtonStyle(style), color: PaypalButtonStyleColorOption.GOLD },\n createOrder: () => this.setupPayment(braintreepaypalcredit, intent),\n onApprove: (authorizeData: PaypalAuthorizeData) =>\n this.tokenizePayment(\n authorizeData,\n methodId,\n braintreepaypalcredit.cartId,\n braintreepaypalcredit.onAuthorizeError,\n ),\n });\n\n if (paypalButtonRender.isEligible()) {\n paypalButtonRender.render(`#${containerId}`);\n\n return;\n }\n\n if (onEligibilityFailure && typeof onEligibilityFailure === 'function') {\n onEligibilityFailure();\n }\n }\n\n private async setupPayment(\n braintreepaypalcredit: BraintreePaypalCreditWalletInitializeOptions,\n intent?: BraintreeInitializationData['intent'],\n ): Promise<string | void> {\n const { onPaymentError, amount, currency } = braintreepaypalcredit;\n\n const braintreePaypalCheckout =\n this.braintreePaypalWalletService.getBraintreePaypalCheckoutOrThrow();\n\n try {\n return await braintreePaypalCheckout.createPayment({\n flow: 'checkout',\n enableShippingAddress: true,\n shippingAddressEditable: false,\n amount,\n currency: currency.code,\n offerCredit: true,\n intent,\n });\n } catch (error: unknown) {\n if (isBraintreeError(error) || error instanceof StandardError) {\n onPaymentError?.(error);\n }\n\n throw error;\n }\n }\n\n private async tokenizePayment(\n authorizeData: PaypalAuthorizeData,\n methodId: string,\n cartId: string,\n onError?: (error: BraintreeError | StandardError) => void,\n ): Promise<void> {\n try {\n await this.braintreePaypalWalletService.proxyTokenizationPayment(\n authorizeData,\n methodId,\n cartId,\n );\n } catch (error) {\n if (isBraintreeError(error) || error instanceof StandardError) {\n onError?.(error);\n }\n\n throw error;\n }\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHeadlessSDKVersionManager,\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreePaypalWalletService,\n BraintreeScriptLoader,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { toResolvableModule } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n WalletButtonIntegrationService,\n WalletPaymentButtonStrategyFactory,\n} from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport BraintreePaypalCreditWalletStrategy from './braintree-paypal-credit-wallet-strategy';\n\nconst createBraintreePaypalCreditWalletStrategy: WalletPaymentButtonStrategyFactory<\n BraintreePaypalCreditWalletStrategy\n> = (walletButtonIntegrationService: WalletButtonIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n new BraintreeHeadlessSDKVersionManager(),\n ),\n braintreeHostWindow,\n );\n\n return new BraintreePaypalCreditWalletStrategy(\n new BraintreePaypalWalletService(\n walletButtonIntegrationService,\n braintreeIntegrationService,\n ),\n braintreeHostWindow,\n );\n};\n\nexport default toResolvableModule(createBraintreePaypalCreditWalletStrategy, [\n { id: 'braintreepaypalcredit' },\n]);\n","import { PaypalButtonStyleColorOption, PaypalStyleOptions } from './paypal';\n\nexport const VenmoButtonImage = {\n [PaypalButtonStyleColorOption.WHITE]:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTE4IiBoZWlnaHQ9IjI5IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiPgogICAgPGRlZnM+CiAgICAgICAgPGNsaXBQYXRoIGlkPSJjbGlwMCI+CiAgICAgICAgICAgIDxyZWN0IHdpZHRoPSIxOTgiIGhlaWdodD0iMzgiIGZpbGw9IndoaXRlIiBpZD0ic3ZnXzEiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgPC9kZWZzPgogICAgPGc+CiAgICAgICAgPHRpdGxlPkxheWVyIDE8L3RpdGxlPgogICAgICAgIDxnIHN0cm9rZT0ibnVsbCIgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSIgaWQ9InN2Z18yIj4KICAgICAgICAgICAgPHBhdGggc3Ryb2tlPSJudWxsIiBkPSJtMjAuMDM2ODgsNGMwLjc1NDU4LDEuMjY3NTEgMS4wOTQ4NSwyLjU3Mjk0IDEuMDk0ODUsNC4yMjIwOGMwLDUuMjU5ODUgLTQuNDE0OTYsMTIuMDkyNzEgLTcuOTk4MjMsMTYuODkwNzVsLTguMTg0NDMsMGwtMy4yODI0LC0xOS45NjExN2w3LjE2NjM0LC0wLjY5MmwxLjczNTQ1LDE0LjIwMzY1YzEuNjIxNTQsLTIuNjg2NjQgMy42MjI1OSwtNi45MDg3MSAzLjYyMjU5LC05Ljc4NzMzYzAsLTEuNTc1NjMgLTAuMjY1NCwtMi42NDg4IC0wLjY4MDE3LC0zLjUzMjQzbDYuNTI2LC0xLjM0MzU0eiIgZmlsbD0id2hpdGUiIGlkPSJzdmdfMyIvPgogICAgICAgICAgICA8cGF0aCBzdHJva2U9Im51bGwiIGQ9Im0yOS4zMjQ3NCwxMi43ODk3NGMxLjMxODgsMCA0LjYzODc0LC0wLjYxMzUzIDQuNjM4NzQsLTIuNTMyNThjMCwtMC45MjE0NiAtMC42NDA2MiwtMS4zODEyIC0xLjM5NTY1LC0xLjM4MTJjLTEuMzIwODgsMCAtMy4wNTQxOCwxLjYxMDk0IC0zLjI0MzA5LDMuOTEzNzhsLTAuMDAwMDEsMHptLTAuMTUxMDgsMy44MDA2M2MwLDIuMzQzMyAxLjI4MTE0LDMuMjYyNTkgMi45Nzk1OCwzLjI2MjU5YzEuODQ5NjEsMCAzLjYyMDQ3LC0wLjQ1OTY1IDUuOTIyMjMsLTEuNjQ5MzFsLTAuODY3MDEsNS45ODcyNWMtMS42MjE2OCwwLjgwNTg4IC00LjE0OTExLDEuMzQzNTQgLTYuNjAyMzEsMS4zNDM1NGMtNi4yMjI5NCwwIC04LjQ1MDAyLC0zLjgzODEgLTguNDUwMDIsLTguNjM2MzJjMCwtNi4yMTg5NyAzLjYyMjczLC0xMi44MjIyOCAxMS4wOTE2OSwtMTIuODIyMjhjNC4xMTIxOCwwIDYuNDExNTksMi4zNDMwMyA2LjQxMTU5LDUuNjA1NjJjMC4wMDAzNiw1LjI1OTU4IC02LjYzNzI2LDYuODcwODggLTEwLjQ4NTc1LDYuOTA4OWwwLjAwMDAxLDB6IiBmaWxsPSJ3aGl0ZSIgaWQ9InN2Z180Ii8+CiAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0ibnVsbCIgZD0ibTYwLjM0MDQ5LDguNjg0MDdjMCwwLjc2NzY3IC0wLjExNDUsMS44ODEwMyAtMC4yMjgzOCwyLjYwODdsLTIuMTUwNDEsMTMuODIwMDRsLTYuOTc4MDcsMGwxLjk2MTQ5LC0xMi42Njg2N2MwLjAzNzIxLC0wLjM0MzYxIDAuMTUxNTMsLTEuMDM1MzQgMC4xNTE1MywtMS40MTkxM2MwLC0wLjkyMTU1IC0wLjU2NjEyLC0xLjE1MTQ3IC0xLjI0NjY0LC0xLjE1MTQ3Yy0wLjkwMzk1LDAgLTEuODEwMDUsMC40MjE4MSAtMi40MTM1NiwwLjcyOTg0bC0yLjIyNDgyLDE0LjUwOTQzbC03LjAxNzM1LDBsMy4yMDU4OSwtMjAuNjkwODNsNi4wNzM0OSwwbDAuMDc2OTQsMS42NTE0OGMxLjQzMjg1LC0wLjk1OTQ4IDMuMzE5NTgsLTEuOTk3MjYgNS45OTY1NSwtMS45OTcyNmMzLjU0NjcsLTAuMDAwMzYgNC43OTMzNCwxLjg0Mjg0IDQuNzkzMzQsNC42MDc4NmwwLjAwMDAxLDB6IiBmaWxsPSJ3aGl0ZSIgaWQ9InN2Z181Ii8+CiAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0ibnVsbCIgZD0ibTgxLjA1NjI0LDYuMzQwODZjMS45OTg1MiwtMS40NTcyMyAzLjg4NTcsLTIuMjY1MDEgNi40ODc3MiwtMi4yNjUwMWMzLjU4MzA5LDAgNC44Mjg5MiwxLjg0MzIgNC44Mjg5Miw0LjYwODIyYzAsMC43Njc2NyAtMC4xMTM3OCwxLjg4MTAzIC0wLjIyNzU3LDIuNjA4N2wtMi4xNDc5NywxMy44MTk4N2wtNi45Nzk5NiwwbDEuOTk4OTcsLTEyLjkzNjI0YzAuMDM2NzYsLTAuMzQ1NzcgMC4xMTQwNSwtMC43Njc1OCAwLjExNDA1LC0xLjAzNTE2YzAsLTEuMDM3NTkgLTAuNTY2MywtMS4yNjc2OSAtMS4yNDY2NCwtMS4yNjc2OWMtMC44NjY3NCwwIC0xLjczMzEyLDAuMzgzNzkgLTIuMzc2MzUsMC43Mjk3NWwtMi4yMjQzNywxNC41MDk2OWwtNi45NzgyNSwwbDEuOTk4ODgsLTEyLjkzNjQyYzAuMDM2ODQsLTAuMzQ1NzcgMC4xMTE3OSwtMC43Njc1OCAwLjExMTc5LC0xLjAzNTE2YzAsLTEuMDM3NSAtMC41NjY0OCwtMS4yNjc2OSAtMS4yNDQ0OCwtMS4yNjc2OWMtMC45MDU5MywwIC0xLjgxMDA1LDAuNDIxODEgLTIuNDEzNTYsMC43Mjk4NGwtMi4yMjY1NCwxNC41MDk0M2wtNy4wMTUwOSwwbDMuMjA1NTIsLTIwLjY5MDgzbDUuOTk5MjYsMGwwLjE4ODU1LDEuNzI3MzRjMS4zOTU2NSwtMS4wMzUxNiAzLjI4MDg0LC0yLjA3Mjg0IDUuODA4MDksLTIuMDcyODRjMi4xODgxNiwtMC4wMDA4MSAzLjYyMDgzLDAuOTU4ODUgNC4zMzkwMiwyLjI2NDE5bDAuMDAwMDEsMC4wMDAwMXoiIGZpbGw9IndoaXRlIiBpZD0ic3ZnXzYiLz4KICAgICAgICAgICAgPHBhdGggc3Ryb2tlPSJudWxsIiBkPSJtMTA2LjI2MDc1LDEyLjM2ODNjMCwtMS42ODkxNCAtMC40MTU0LC0yLjg0MDY5IC0xLjY1ODg4LC0yLjg0MDY5Yy0yLjc1NDI3LDAgLTMuMzE5NTgsNC45NTE0NyAtMy4zMTk1OCw3LjQ4NDRjMCwxLjkyMTY3IDAuNTI4MjgsMy4xMTA4OCAxLjc3MTc2LDMuMTEwODhjMi42MDM0NywwIDMuMjA2NywtNS4yMjE4NCAzLjIwNjcsLTcuNzU0NTl6bS0xMi4wNzAwNCw0LjMzNzk0YzAsLTYuNTI0OTIgMy4zOTQ1MywtMTIuNjMwMzggMTEuMjAzMTMsLTEyLjYzMDM4YzUuODg1MTIsMCA4LjAzNjE2LDMuNTMyNTEgOC4wMzYxNiw4LjQwODMxYzAsNi40NDkzNCAtMy4zNTc1MSwxMy4xMjgxMyAtMTEuMzU1NzMsMTMuMTI4MTNjLTUuOTIyMTQsMCAtNy44ODM1NSwtMy45NTQzMyAtNy44ODM1NSwtOC45MDYwNmwtMC4wMDAwMSwweiIgZmlsbD0id2hpdGUiIGlkPSJzdmdfNyIvPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+Cg==',\n [PaypalButtonStyleColorOption.BLUE]:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTE4IiBoZWlnaHQ9IjI5IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiPgogICAgPGRlZnM+CiAgICAgICAgPGNsaXBQYXRoIGlkPSJjbGlwMCI+CiAgICAgICAgICAgIDxyZWN0IHdpZHRoPSIxOTgiIGhlaWdodD0iMzgiIGZpbGw9IiMwMDhDRkYiIGlkPSJzdmdfMSIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICA8L2RlZnM+CiAgICA8Zz4KICAgICAgICA8dGl0bGU+TGF5ZXIgMTwvdGl0bGU+CiAgICAgICAgPGcgc3Ryb2tlPSJudWxsIiBjbGlwLXBhdGg9InVybCgjY2xpcDApIiBpZD0ic3ZnXzIiPgogICAgICAgICAgICA8cGF0aCBzdHJva2U9Im51bGwiIGQ9Im0yMC4wMzY4OCw0YzAuNzU0NTgsMS4yNjc1MSAxLjA5NDg1LDIuNTcyOTQgMS4wOTQ4NSw0LjIyMjA4YzAsNS4yNTk4NSAtNC40MTQ5NiwxMi4wOTI3MSAtNy45OTgyMywxNi44OTA3NWwtOC4xODQ0MywwbC0zLjI4MjQsLTE5Ljk2MTE3bDcuMTY2MzQsLTAuNjkybDEuNzM1NDUsMTQuMjAzNjVjMS42MjE1NCwtMi42ODY2NCAzLjYyMjU5LC02LjkwODcxIDMuNjIyNTksLTkuNzg3MzNjMCwtMS41NzU2MyAtMC4yNjU0LC0yLjY0ODggLTAuNjgwMTcsLTMuNTMyNDNsNi41MjYsLTEuMzQzNTR6IiBmaWxsPSIjMDA4Q0ZGIiBpZD0ic3ZnXzMiLz4KICAgICAgICAgICAgPHBhdGggc3Ryb2tlPSJudWxsIiBkPSJtMjkuMzI0NzQsMTIuNzg5NzRjMS4zMTg4LDAgNC42Mzg3NCwtMC42MTM1MyA0LjYzODc0LC0yLjUzMjU4YzAsLTAuOTIxNDYgLTAuNjQwNjIsLTEuMzgxMiAtMS4zOTU2NSwtMS4zODEyYy0xLjMyMDg4LDAgLTMuMDU0MTgsMS42MTA5NCAtMy4yNDMwOSwzLjkxMzc4bC0wLjAwMDAxLDB6bS0wLjE1MTA4LDMuODAwNjNjMCwyLjM0MzMgMS4yODExNCwzLjI2MjU5IDIuOTc5NTgsMy4yNjI1OWMxLjg0OTYxLDAgMy42MjA0NywtMC40NTk2NSA1LjkyMjIzLC0xLjY0OTMxbC0wLjg2NzAxLDUuOTg3MjVjLTEuNjIxNjgsMC44MDU4OCAtNC4xNDkxMSwxLjM0MzU0IC02LjYwMjMxLDEuMzQzNTRjLTYuMjIyOTQsMCAtOC40NTAwMiwtMy44MzgxIC04LjQ1MDAyLC04LjYzNjMyYzAsLTYuMjE4OTcgMy42MjI3MywtMTIuODIyMjggMTEuMDkxNjksLTEyLjgyMjI4YzQuMTEyMTgsMCA2LjQxMTU5LDIuMzQzMDMgNi40MTE1OSw1LjYwNTYyYzAuMDAwMzYsNS4yNTk1OCAtNi42MzcyNiw2Ljg3MDg4IC0xMC40ODU3NSw2LjkwODlsMC4wMDAwMSwweiIgZmlsbD0iIzAwOENGRiIgaWQ9InN2Z180Ii8+CiAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0ibnVsbCIgZD0ibTYwLjM0MDQ5LDguNjg0MDdjMCwwLjc2NzY3IC0wLjExNDUsMS44ODEwMyAtMC4yMjgzOCwyLjYwODdsLTIuMTUwNDEsMTMuODIwMDRsLTYuOTc4MDcsMGwxLjk2MTQ5LC0xMi42Njg2N2MwLjAzNzIxLC0wLjM0MzYxIDAuMTUxNTMsLTEuMDM1MzQgMC4xNTE1MywtMS40MTkxM2MwLC0wLjkyMTU1IC0wLjU2NjEyLC0xLjE1MTQ3IC0xLjI0NjY0LC0xLjE1MTQ3Yy0wLjkwMzk1LDAgLTEuODEwMDUsMC40MjE4MSAtMi40MTM1NiwwLjcyOTg0bC0yLjIyNDgyLDE0LjUwOTQzbC03LjAxNzM1LDBsMy4yMDU4OSwtMjAuNjkwODNsNi4wNzM0OSwwbDAuMDc2OTQsMS42NTE0OGMxLjQzMjg1LC0wLjk1OTQ4IDMuMzE5NTgsLTEuOTk3MjYgNS45OTY1NSwtMS45OTcyNmMzLjU0NjcsLTAuMDAwMzYgNC43OTMzNCwxLjg0Mjg0IDQuNzkzMzQsNC42MDc4NmwwLjAwMDAxLDB6IiBmaWxsPSIjMDA4Q0ZGIiBpZD0ic3ZnXzUiLz4KICAgICAgICAgICAgPHBhdGggc3Ryb2tlPSJudWxsIiBkPSJtODEuMDU2MjQsNi4zNDA4NmMxLjk5ODUyLC0xLjQ1NzIzIDMuODg1NywtMi4yNjUwMSA2LjQ4NzcyLC0yLjI2NTAxYzMuNTgzMDksMCA0LjgyODkyLDEuODQzMiA0LjgyODkyLDQuNjA4MjJjMCwwLjc2NzY3IC0wLjExMzc4LDEuODgxMDMgLTAuMjI3NTcsMi42MDg3bC0yLjE0Nzk3LDEzLjgxOTg3bC02Ljk3OTk2LDBsMS45OTg5NywtMTIuOTM2MjRjMC4wMzY3NiwtMC4zNDU3NyAwLjExNDA1LC0wLjc2NzU4IDAuMTE0MDUsLTEuMDM1MTZjMCwtMS4wMzc1OSAtMC41NjYzLC0xLjI2NzY5IC0xLjI0NjY0LC0xLjI2NzY5Yy0wLjg2Njc0LDAgLTEuNzMzMTIsMC4zODM3OSAtMi4zNzYzNSwwLjcyOTc1bC0yLjIyNDM3LDE0LjUwOTY5bC02Ljk3ODI1LDBsMS45OTg4OCwtMTIuOTM2NDJjMC4wMzY4NCwtMC4zNDU3NyAwLjExMTc5LC0wLjc2NzU4IDAuMTExNzksLTEuMDM1MTZjMCwtMS4wMzc1IC0wLjU2NjQ4LC0xLjI2NzY5IC0xLjI0NDQ4LC0xLjI2NzY5Yy0wLjkwNTkzLDAgLTEuODEwMDUsMC40MjE4MSAtMi40MTM1NiwwLjcyOTg0bC0yLjIyNjU0LDE0LjUwOTQzbC03LjAxNTA5LDBsMy4yMDU1MiwtMjAuNjkwODNsNS45OTkyNiwwbDAuMTg4NTUsMS43MjczNGMxLjM5NTY1LC0xLjAzNTE2IDMuMjgwODQsLTIuMDcyODQgNS44MDgwOSwtMi4wNzI4NGMyLjE4ODE2LC0wLjAwMDgxIDMuNjIwODMsMC45NTg4NSA0LjMzOTAyLDIuMjY0MTlsMC4wMDAwMSwwLjAwMDAxeiIgZmlsbD0iIzAwOENGRiIgaWQ9InN2Z182Ii8+CiAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0ibnVsbCIgZD0ibTEwNi4yNjA3NSwxMi4zNjgzYzAsLTEuNjg5MTQgLTAuNDE1NCwtMi44NDA2OSAtMS42NTg4OCwtMi44NDA2OWMtMi43NTQyNywwIC0zLjMxOTU4LDQuOTUxNDcgLTMuMzE5NTgsNy40ODQ0YzAsMS45MjE2NyAwLjUyODI4LDMuMTEwODggMS43NzE3NiwzLjExMDg4YzIuNjAzNDcsMCAzLjIwNjcsLTUuMjIxODQgMy4yMDY3LC03Ljc1NDU5em0tMTIuMDcwMDQsNC4zMzc5NGMwLC02LjUyNDkyIDMuMzk0NTMsLTEyLjYzMDM4IDExLjIwMzEzLC0xMi42MzAzOGM1Ljg4NTEyLDAgOC4wMzYxNiwzLjUzMjUxIDguMDM2MTYsOC40MDgzMWMwLDYuNDQ5MzQgLTMuMzU3NTEsMTMuMTI4MTMgLTExLjM1NTczLDEzLjEyODEzYy01LjkyMjE0LDAgLTcuODgzNTUsLTMuOTU0MzMgLTcuODgzNTUsLTguOTA2MDZsLTAuMDAwMDEsMHoiIGZpbGw9IiMwMDhDRkYiIGlkPSJzdmdfNyIvPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+Cg==',\n};\n\nconst getBraintreeVenmoButtonStyle = (styles: PaypalStyleOptions): Record<string, string> => {\n const { color, height } = styles;\n\n const colorParser = (c: string) => {\n if (c === PaypalButtonStyleColorOption.WHITE) {\n return '#FFFFFF';\n }\n\n return '#3D95CE';\n };\n\n return {\n backgroundColor: colorParser(color || ''),\n backgroundPosition: '50% 50%',\n backgroundSize: '80px auto',\n backgroundImage: `url(\"${\n VenmoButtonImage[\n color === PaypalButtonStyleColorOption.WHITE\n ? PaypalButtonStyleColorOption.BLUE\n : PaypalButtonStyleColorOption.WHITE\n ]\n }\")`,\n backgroundRepeat: 'no-repeat',\n borderRadius: '4px',\n cursor: 'pointer',\n transition: '0.2s ease',\n minHeight: `${height || 40}px`,\n minWidth: '150px',\n height: '100%',\n border: color === PaypalButtonStyleColorOption.WHITE ? '1px solid black' : 'none',\n };\n};\n\nexport default getBraintreeVenmoButtonStyle;\n","import {\n BraintreeInitializationData,\n BraintreePaypalWalletService,\n getBraintreeVenmoButtonStyle,\n isBraintreeError,\n PaypalButtonStyleColorOption,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n CheckoutButtonInitializeOptions,\n CheckoutButtonStrategy,\n InvalidArgumentError,\n MissingDataError,\n MissingDataErrorType,\n PaymentMethod,\n StandardError,\n UnsupportedBrowserError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeVenmoWalletInitializeOptions, {\n WithBraintreeVenmoWalletInitializeOptions,\n} from './braintree-venmo-wallet-initialize-options';\n\nconst venmoButtonStyleHover = {\n backgroundColor: '#0a7fc2',\n};\n\nexport default class BraintreeVenmoWalletStrategy implements CheckoutButtonStrategy {\n constructor(private braintreePaypalWalletService: BraintreePaypalWalletService) {}\n\n async initialize(\n options: CheckoutButtonInitializeOptions & WithBraintreeVenmoWalletInitializeOptions,\n ): Promise<void> {\n const { braintreevenmo, 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 (!braintreevenmo) {\n throw new InvalidArgumentError(\n `Unable to initialize payment because \"options.braintreevenmo\" argument is not provided.`,\n );\n }\n\n let parsedPaymentMethod: PaymentMethod<BraintreeInitializationData>;\n\n try {\n parsedPaymentMethod = JSON.parse(atob(braintreevenmo.initializationData));\n } catch (error) {\n throw new InvalidArgumentError(\"Failed to parse payment method 'initializationData'.\");\n }\n\n const { initializationData, config } = parsedPaymentMethod;\n\n if (!braintreevenmo.clientToken || !initializationData || !config) {\n throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n }\n\n this.braintreePaypalWalletService.initialize(braintreevenmo.clientToken);\n\n try {\n await this.braintreePaypalWalletService.loadVenmoCheckout(containerId);\n } catch (error) {\n this.handleInitializationError(error, braintreevenmo);\n\n return;\n }\n\n this.renderButton(braintreevenmo, containerId, methodId, initializationData);\n }\n\n async deinitialize(): Promise<void> {\n await this.braintreePaypalWalletService.teardown();\n }\n\n private handleInitializationError(\n error: unknown,\n braintreevenmo: BraintreeVenmoWalletInitializeOptions,\n ): void {\n const { onError, onEligibilityFailure } = braintreevenmo;\n\n if (error instanceof UnsupportedBrowserError) {\n onEligibilityFailure?.();\n\n return;\n }\n\n if (isBraintreeError(error) || error instanceof StandardError) {\n onError?.(error);\n }\n }\n\n private renderButton(\n braintreevenmo: BraintreeVenmoWalletInitializeOptions,\n containerId: string,\n methodId: string,\n initializationData: BraintreeInitializationData,\n ): void {\n const { style, onEligibilityFailure } = braintreevenmo;\n const { cartButtonStyles } = initializationData.paymentButtonStyles || {};\n const buttonStyles = style || cartButtonStyles || {};\n const { color } = buttonStyles;\n\n const venmoButton = document.getElementById(containerId);\n\n if (!venmoButton) {\n this.braintreePaypalWalletService.removeElement(containerId);\n\n onEligibilityFailure?.();\n\n return;\n }\n\n venmoButton.setAttribute('aria-label', 'Venmo');\n Object.assign(venmoButton.style, getBraintreeVenmoButtonStyle(buttonStyles));\n\n venmoButton.addEventListener('click', async () => {\n venmoButton.setAttribute('disabled', 'true');\n\n try {\n await this.braintreePaypalWalletService.proxyVenmoTokenizationPayment(\n methodId,\n braintreevenmo.cartId,\n );\n } catch (error) {\n if (isBraintreeError(error) || error instanceof StandardError) {\n braintreevenmo.onAuthorizeError?.(error);\n }\n } finally {\n venmoButton.removeAttribute('disabled');\n }\n });\n\n if (color === PaypalButtonStyleColorOption.BLUE) {\n venmoButton.addEventListener('mouseenter', () => {\n venmoButton.style.backgroundColor = venmoButtonStyleHover.backgroundColor;\n });\n\n venmoButton.addEventListener('mouseleave', () => {\n venmoButton.style.backgroundColor =\n getBraintreeVenmoButtonStyle(buttonStyles).backgroundColor;\n });\n }\n }\n}\n","import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n BraintreeHeadlessSDKVersionManager,\n BraintreeHostWindow,\n BraintreeIntegrationService,\n BraintreePaypalWalletService,\n BraintreeScriptLoader,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { toResolvableModule } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n WalletButtonIntegrationService,\n WalletPaymentButtonStrategyFactory,\n} from '@bigcommerce/checkout-sdk/wallet-button-integration';\n\nimport BraintreeVenmoWalletStrategy from './braintree-venmo-wallet-strategy';\n\nconst createBraintreeVenmoWalletStrategy: WalletPaymentButtonStrategyFactory<\n BraintreeVenmoWalletStrategy\n> = (walletButtonIntegrationService: WalletButtonIntegrationService) => {\n const braintreeHostWindow: BraintreeHostWindow = window;\n\n const braintreeIntegrationService = new BraintreeIntegrationService(\n new BraintreeScriptLoader(\n getScriptLoader(),\n braintreeHostWindow,\n new BraintreeHeadlessSDKVersionManager(),\n ),\n braintreeHostWindow,\n );\n\n return new BraintreeVenmoWalletStrategy(\n new BraintreePaypalWalletService(\n walletButtonIntegrationService,\n braintreeIntegrationService,\n ),\n );\n};\n\nexport default toResolvableModule(createBraintreeVenmoWalletStrategy, [{ id: 'braintreevenmo' }]);\n"],"names":["StandardError","Error","constructor","message","prototype","super","this","name","type","Object","setPrototypeOf","__proto__","captureStackTrace","stack","PaymentMethodClientUnavailableError","BraintreeEnv","BraintreeModuleName","BraintreeFormFieldType","BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION","BRAINTREE_SDK_DEFAULT_VERSION","BRAINTREE_SDK_STABLE_VERSION","BRAINTREE_SDK_SCRIPTS_INTEGRITY","Client","PaypalCheckout","Paypal","LocalPayment","DataCollector","UsBankAccount","GooglePayment","ThreeDSecure","VisaCheckout","Venmo","HostedFields","Fastlane","NotInitializedErrorType","TotalPriceStatusType","BraintreeOrderStatus","NonInstantLocalPaymentMethods","BraintreeFastlaneAuthenticationState","BraintreeErrorType","BraintreeErrorCode","BraintreeSupportedCardBrands","BraintreeScriptLoader","scriptLoader","braintreeHostWindow","braintreeSDKVersionManager","loadClient","loadBraintreeModuleOrThrow","loadFastlane","loadPaypalCheckout","loadPaypal","loadLocalPayment","loadDataCollector","loadUsBankAccount","loadGooglePayment","load3DS","loadVisaCheckout","loadVenmoCheckout","loadHostedFields","loadVisaCheckoutSdk","testMode","V","hash","loadScript","async","attributes","integrity","crossorigin","then","braintreeModuleName","fileName","module","getBraintreeModule","braintreeSdkVersion","getSDKVersion","scriptPath","getIntegrityValuesByModuleName","undefined","_a","braintree","moduleName","version","UnsupportedBrowserError","NotInitializedError","subtype","CustomerNotInitialized","PaymentNotInitialized","ShippingNotInitialized","SpamProtectionNotInitialized","getErrorMessage","isBraintreeError","error","Boolean","BraintreeSdk","braintreeScriptLoader","initialize","clientToken","setClientToken","deinitialize","teardownModule","dataCollector","getClient","client","getClientTokenOrThrow","clientCreator","create","authorization","getDataCollectorOrThrow","options","emptyDataCollector","deviceData","teardown","Promise","resolve","dataCollectorConfig","assign","kount","code","KountNotEnabled","getBraintreeGooglePayment","googlePayment","braintreeGooglePayment","all","getBraintreeThreeDS","threeDS","threeDSecure","getBraintreeLocalPayment","merchantAccountId","braintreeLocalPayment","localPaymentCreator","reject","getUsBankAccount","usBankAccount","getBraintreeVisaCheckout","visaCheckout","paypal","getVisaCheckoutSdk","visaCheckoutSDK","getVenmoCheckoutOrThrow","braintreeVenmo","venmoCheckout","venmoCheckoutConfig","allowDesktop","paymentMethodUsage","braintreeVenmoCheckout","isBrowserSupported","isExperimentEnabled","features","experimentName","fallbackValue","BraintreeSDKVersionManager","paymentIntegrationService","braintreeWindow","window","storeConfig","getState","getStoreConfig","checkoutSettings","getPreloadedSDKVersion","preloadedVersion","__WEBPACK_EXTERNAL_MODULE_lodash_find__","values","VERSION","toResolvableModule","resolveIds","InvalidArgumentError","MissingDataErrorType","MissingDataError","MissingBillingAddress","MissingCart","MissingConsignments","MissingCheckout","MissingCustomer","MissingCheckoutConfig","MissingOrderConfig","MissingOrder","MissingOrderId","MissingPayment","MissingPaymentToken","MissingPaymentMethod","MissingShippingAddress","missing_data_error_getErrorMessage","PaymentArgumentInvalidError","invalidFields","join","isVaultedInstrument","instrument","instrumentId","OrderFinalizationNotRequiredError","isHostedInstrumentLike","shouldSaveInstrument","shouldSetAsDefaultInstrument","PaymentMethodFailedError","isUsBankAccountInstrumentLike","BraintreeAchPaymentStrategy","braintreeSdk","methodId","braintreeach","getMandateText","loadPaymentMethod","paymentMethod","getPaymentMethodOrThrow","initializationData","handleBraintreeError","execute","orderRequest","payment","order","__rest","isSubmittingWithVaultingInstrument","paymentData","nonce","tokenizePaymentForVaultedInstrument","tokenizePayment","submitPaymentPayload","preparePaymentDataForVaultedInstrument","preparePaymentData","submitOrder","submitPayment","finalize","getUsBankAccountOrThrow","mandateText","tokenize","bankDetails","getBankDetails","state","config","isVaultingEnabled","routingNumber","accountNumber","deviceSessionId","formattedPayload","tokenized_bank_account","issuer","masked_account_number","substr","token","billingAddress","getBillingAddressOrThrow","ownershipType","toLowerCase","accountType","firstName","lastName","businessName","streetAddress","address1","extendedAddress","address2","locality","city","region","stateOrProvinceCode","postalCode","create_braintree_ach_payment_strategy","__WEBPACK_EXTERNAL_MODULE__bigcommerce_script_loader_875b3e8f_getScriptLoader__","create_braintree_sdk","id","PaymentInvalidFormError","details","paypalSdkPromise","PAYPAL_COMPONENTS","PaypalButtonStyleLayoutOption","PaypalButtonStyleSizeOption","PaypalButtonStyleColorOption","PaypalButtonStyleLabelOption","PaypalButtonStyleShapeOption","MessagingPlacements","BraintreeIntegrationService","overlay","dataCollectors","threeDSecureOptions","getBraintreeFastlane","cardId","isTestModeEnabled","styles","localStorage","setItem","braintreeFastlane","getSessionId","braintreeFastlaneCreator","defaultStyles","root","backgroundColorPrimary","getPaypal","braintreePaypal","braintree_integration_service_rest","newWindowFlow","__WEBPACK_EXTERNAL_MODULE__braintree_browser_detection_e7ac357c_supportsPopups__","show","onClick","focusWindow","enableShippingAddress","flow","useraction","response","remove","catch","getPaypalCheckout","onSuccess","onError","paypalCheckout","paypalCheckoutConfig","braintreePaypalCheckout","paypalSdkLoadConfig","currency","isCreditEnabled","components","toString","intent","commit","loadPayPalSDK","err","loadPayPalSDKOnce","getDataCollector","cacheKey","cached","getBraintreeEnv","isTestMode","Sandbox","Production","mapToBraintreeShippingAddressOverride","address","recipientName","line1","line2","countryCode","phone","mapToLegacyShippingAddress","email","shippingAddress","split","first_name","last_name","phone_number","address_line_1","address_line_2","country_code","postal_code","mapToLegacyBillingAddress","removeElement","elementId","element","document","getElementById","cartId","riskCorrelationId","default","get3DS","getVenmoCheckout","venmoConfig","verifyCard","amount","tokenizationPayload","tokenizeCard","challenge3DSVerification","creditCardInstrument","ccExpiry","ccNumber","ccName","isCreditCardInstrumentLike","errors","getErrorsRequiredFields","__WEBPACK_EXTERNAL_MODULE_lodash_isEmpty__","requestData","mapToCreditCard","creditCards","request","bin","present3DSChallenge","creditCard","data","cardholderName","number","cvv","ccCvv","expirationDate","month","year","validate","countryCodeAlpha2","countryName","country","endpoint","method","challengeRequested","additionalInformation","roundedAmount","toFixed","Number","onLookupComplete","_data","next","collectDeviceData","BraintreeMessages","render","containerId","placement","messagingContainer","cart","getCartOrThrow","paypalBNPLConfiguration","bannedId","PAYMENT","bannerConfiguration","find","status","CART","removeAttribute","Messages","cartAmount","buyerCountry","style","getPaypalMessagesStylesFromBNPLConfig","messagesStyles","color","layout","logo","position","ratio","text","size","Overlay","closeElement","mainElement","_createElements","_element","_closeElement","_mainElement","parentElement","_registerClick","body","appendChild","setTimeout","opacity","_unregisterClick","_removeAfterTransition","createElement","background","transitionDuration","hasCloseButton","innerHtml","classLayout","classClose","classOverlayText","overlayText","className","addClassLayout","innerText","getOverlayStyle","_addEventListener","addEventListener","_removeEventListener","removeEventListener","onClickClose","handleTransition","event","propertyName","DEFAULT_STYLES","backgroundColor","ROTATION_ANIMATION","LoadingIndicator","containerStyles","defineAnimation","container","buildContainer","indicator","buildIndicator","parentId","parent","visibility","hide","handleTransitionEnd","display","bottom","left","height","width","right","top","transition","setStyleAttribute","borderRadius","border","borderColor","margin","transform","transformStyle","animation","attrs","keys","forEach","k","setProperty","head","sheet","CSSStyleSheet","insertRule","LOADING_INDICATOR_STYLES","PaymentMethodCancelledError","is_braintree_error_isBraintreeError","BraintreePaypalPaymentStrategy","braintreeIntegrationService","braintreeMessages","loadingIndicator","braintreeOptions","braintreeButtonOptions","bannerContainerId","loadPaypalCheckoutInstance","braintree_paypal_payment_strategy_rest","useStoreCredit","isProviderError","paypalButtonRender","close","_resolve","handleError","braintreeTokenizePayload","grandTotal","getOutstandingBalance","storeProfile","storeLanguage","getPaymentMethod","hasOwnProperty","call","getShippingAddress","shippingAddressOverride","locale","offerCredit","shippingAddressEditable","sessionId","vaultPaymentInstrument","vault_payment_instrument","set_as_default_stored_instrument","device_info","paypal_account","paymentMethodId","shouldShowPayPalCreditBanner","renderPayPalMessages","renderPayPalButton","onPaymentError","submitForm","onRenderButton","getSmartButtonContainerId","loadingIndicatorContainer","fundingSource","FUNDING","PAYPAL","Buttons","env","onInit","_","actions","onInitButton","onValidationPassed","toggleLoadingIndicator","onValidate","createOrder","setupPayment","onApprove","authorizeData","braintree_paypal_payment_strategy_awaiter","tokenizePaymentOrThrow","onCancel","isEligible","customer","getCustomer","getCheckoutOrThrow","outstandingBalance","currencyCode","getStoreConfigOrThrow","addresses","createPayment","isBraintreePaypalProviderError","_c","_b","filter","e","provider_error","isLoading","create_braintree_paypal_payment_strategy","ContentType","content_type","SDK_VERSION_HEADERS","BraintreeRequestSender","requestSender","getOrderStatus","url","headers","Json","get","DEFAULT_RESPONSE","RequestError","PaymentMethodInvalidError","TimeoutError","BraintreeLocalMethodsPaymentStrategy","braintreeRequestSender","pollingInterval","maxPollingIntervalTime","isLPMsUpdateExperimentEnabled","pollingTimer","stopPolling","__WEBPACK_EXTERNAL_MODULE_lodash_noop__","isPollingEnabled","gatewayId","braintreelocalmethods","merchantId","isNonInstantPaymentMethod","payload","braintree_local_methods_payment_strategy_rest","executeWithNotInstantLPM","executeWithInstantLPM","basicPaymentData","getLPMsBasicPaymentData","isBraintreeRedirectError","redirectUrl","additional_action_required","redirect_url","location","replace","startPayment","getInstantLPMConfig","getInstantLPMCallback","billing","lineItems","isShippingRequired","physicalItems","length","checkoutUrl","links","checkoutLink","paymentType","fallback","buttonText","shippingAddressRequired","givenName","surname","onPaymentStart","start","braintree_local_methods_payment_strategy_awaiter","orderId","paymentId","order_id","isBraintreeOrderSavedResponse","order_id_saved_successfully","initializePollingMechanism","startPaymentError","payloadData","resetPollingMechanism","toUpperCase","resolvePromise","rejectPromise","timeout","clearTimeout","orderStatus","params","useMetadata","isOrderPending","Pending","isOrderApproved","Completed","isPollingError","Failed","deinitializePollingMechanism","reinitializeStrategy","create_braintree_local_methods_payment_strategy","__WEBPACK_EXTERNAL_MODULE__bigcommerce_request_sender_01d1f546_createRequestSender__","gateway","isInvalidStyleOption","styleOption","getFastlaneStyles","styleSettings","uiStyles","fastlaneStyles","__WEBPACK_EXTERNAL_MODULE_lodash_omitBy__","input","toggle","textBody","textCaption","caption","branding","cleanUpFastlaneStyles","fastlaneRootSettingsBackgroundColor","errorColor","fastlaneRootSettingsErrorColor","fontFamily","fastlaneRootSettingsFontFamily","fontSizeBase","fastlaneRootSettingsFontSize","_d","padding","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","fontSize","fastlaneTextBodySettingsFontSize","_t","_s","fastlaneTextCaptionSettingsColor","_v","_u","fastlaneTextCaptionSettingsFontSize","_x","_w","fastlaneBrandingSettings","mergeFastlaneStyles","isBraintreeAcceleratedCheckoutCustomer","UntrustedShippingCardVerificationType","BraintreeFastlanePaymentStrategy","braintreeFastlaneUtils","braintreefastlane","onChange","isFastlaneStylingEnabled","isThreeDSExperimentEnabled","is3DSEnabled","is3dsEnabled","initializeBraintreeFastlaneOrThrow","shouldRunAuthenticationFlow","runPayPalAuthenticationFlowOrThrow","initializeCardComponent","renderBraintreeCardComponent","handleBraintreeStoredInstrumentChange","braintree_fastlane_payment_strategy_rest","paymentPayload","preparePaymentPayload","removeSessionIdFromCookies","braintreeCardComponent","fullName","cardComponentOptions","fields","prefill","enabled","phoneNumber","paypalPaymentComponent","getBraintreeFastlaneComponentOrThrow","getBraintreeCardComponentOrThrow","paypalInstrument","getPayPalInstruments","getDeviceSessionId","threeDSToken","bigpayToken","iin","paypal_fastlane_token","getPaymentToken","paymentToken","mapToPayPalAddress","binGuest","paymentSource","card","binDetails","getOrderOrThrow","orderAmount","on","verifyError","stateOrProvince","getCustomerOrThrow","paymentProviderCustomer","getPaymentProviderCustomer","braintreePaymentProviderCustomer","paypalFastlaneSessionId","getSessionIdFromCookies","isGuest","authenticationState","CANCELED","getPaymentProviderCustomerOrThrow","instruments","paypalAxoSdk","getBraintreeFastlaneOrThrow","selectionChanged","selectedCard","profile","showCardSelector","braintreeFastlaneCustomer","selectedInstruments","mapPayPalToBcInstrument","updatePaymentProviderCustomer","CookieStorage","cookieKey","encodeURIComponent","cookie","value","firstIndex","indexOf","lastIndex","decodeURIComponent","substring","set","secure","cookieText","expires","path","domain","toUTCString","now","Date","minutes","setTime","getTime","BraintreeFastlaneUtils","getCart","FastlaneCardComponent","shouldSetShippingOption","getMethodIdOrThrow","lookupCustomerByEmail","triggerAuthenticationFlow","identity","getBillingAddress","isFastlaneShippingOptionAutoSelectEnabled","customerEmail","customerContextId","UNRECOGNIZED","saveSessionIdToCookies","profileData","shippingAddresses","mapPayPalToBcAddress","paypalBillingAddress","getPayPalBillingAddresses","billingAddresses","mergeShippingAndBillingAddresses","updateBillingAddress","digitalItems","digitalItemBilling","updateShippingAddress","setShippingOption","setDate","getDate","map","brand","expiry","lastDigits","expiryYear","expiryMonth","defaultInstrument","last4","provider","trustedShippingAddress","untrustedShippingCardVerificationMode","PAN","phones","countries","getCountries","getCountryNameByCountryCode","matchedCountry","company","customFields","given_name","__WEBPACK_EXTERNAL_MODULE_lodash_isEqual__","normalizeAddress","__WEBPACK_EXTERNAL_MODULE_lodash_omit__","filteredBillingAddresses","some","availableShippingOptions","getConsignments","recommendedShippingOption","option","isRecommended","selectedOption","selectShippingOption","create_braintree_fastlane_payment_strategy","BraintreeVisaCheckoutPaymentStrategy","formPoster","braintreevisacheckout","visaCheckoutOptions","checkout","onPaymentSelect","braintreeVisaCheckout","visaCheckoutSdk","initOptions","createInitOptions","settings","shipping","collectShipping","paymentRequest","subtotal","String","init","paymentSuccessPayload","loadCheckout","braintree_visa_checkout_payment_strategy_rest","mapToVisaCheckoutAddress","postForm","userData","cardInformation","userEmail","payment_type","action","device_data","card_information","JSON","stringify","cardType","lastTwo","billing_address","getAddress","shipping_address","create_braintree_visa_checkout_payment_strategy","hostWindow","__WEBPACK_EXTERNAL_MODULE__bigcommerce_form_poster_1cd9ef62_createFormPoster__","BraintreeVenmoPaymentStrategy","venmoOptions","braintreevenmo","initializeBraintreeVenmo","braintree_venmo_payment_strategy_rest","isBraintreeVenmoWebFallbackSupport","mobileWebFallBack","tokenizeResult","braintreeVenmoTokenize","create_braintree_venmo_payment_strategy","isBraintreeFormFieldsMap","isBraintreeHostedFormError","invalidFieldKeys","Array","isArray","every","key","BraintreeHostedFormType","BraintreeHostedForm","isInitializedHostedForm","handleBlur","formOptions","onBlur","fieldType","mapFieldType","emittedBy","mapErrors","handleFocus","onFocus","handleCardTypeChange","cards","onCardTypeChange","handleInputSubmitRequest","onEnter","handleValidityChange","isValid","isValidForm","mapValidationErrors","unsupportedCardBrands","CreditCard","StoredCardVerification","mapFieldOptions","cardFields","createHostedFields","mapStyleOptions","isInitialized","mapBillingAddress","__WEBPACK_EXTERNAL_MODULE_lodash_isNil__","mapTokenizeError","tokenizeForStoredCardVerification","hostedFields","hostedFieldsOptions","preventCursorJumps","supportedCardBrands","cardBrand","includes","is_braintree_supported_card_brand","cardNumber","placeholder","internalLabel","accessibilityLabel","cardExpiry","cardCode","cardName","cardNumberVerification","cardCodeVerification","mapStyles","fontWeight","focus","CardNumberVerification","CardNumber","CardExpiry","CardCodeVerification","CardCode","CardName","entries","isValidParam","isEmpty","isPotentiallyValid","reduce","result","fieldKey","createInvalidError","isStoredCard","createRequiredError","formFields","BraintreeCreditCardPaymentStrategy","braintreeHostedForm","isHostedPaymentFormEnabled","form","isHostedFormInitialized","shouldInitializeBraintreeFastlane","braintree_credit_card_payment_strategy_rest","prepareHostedPaymentData","processAdditionalAction","isPaymentMethodInitialized","startsWith","commonPaymentData","isSubmittingWithStoredCard","shouldPerform3DSVerification","verifyCardWithHostedForm","prepareAdditionalActionPaymentData","is_request_error","__WEBPACK_EXTERNAL_MODULE_lodash_some__","payer_auth_request","storedCreditCardNonce","three_ds_result","isBraintreePaymentRequest3DSError","getCardInstrumentOrThrow","newPaymentData","isHostedFormEnabled","braintreeCustomer","isAcceleratedCheckoutEnabled","create_braintree_credit_card_payment_strategy","BraintreePaypalCustomerStrategy","braintreepaypal","paymentButtonStyles","checkoutTopButtonStyles","paypalCheckoutOptions","signIn","credentials","signInCustomer","signOut","signOutCustomer","executePaymentMethodCheckout","continueWithCheckoutCallback","buttonStyles","loadDefaultCheckout","tokenizePayload","buttonContainerId","onErrorCallback","create_braintree_paypal_customer_strategy","BraintreePaypalCreditCustomerStrategy","braintreepaypalcredit","hasRenderedSmartButton","PAYLATER","CREDIT","create_braintree_paypal_credit_customer_strategy","BraintreeFastlaneCustomerStrategy","getValidPaymentMethodOrThrow","paypalFastlaneStylesSettings","checkoutPaymentMethodExecuted","primaryMethodId","shouldRunAcceleratedCheckout","validPaymentMethodId","create_braintree_fastlane_customer_strategy","NotImplementedError","BraintreeVisaCheckoutCustomerStrategy","buttonClassName","visaCheckoutInstance","signInButton","createSignInButton","buttonClass","querySelector","insertVisaCheckoutButton","visaCheckoutButton","flexDirection","innerHTML","create_braintree_visa_checkout_customer_strategy","BuyNowCartCreationError","getValidButtonStyle","fundingicons","shape","tagline","validStyles","getValidHeight","currentHeight","isNaN","BraintreePaypalButtonStrategy","buyNowInitializeOptions","shouldProcessPayment","onAuthorizeError","onEligibilityFailure","buyNowCart","getBuyNowCartRequestBody","createBuyNowCart","buyNowCartId","cart_id","buyNowCardRequestBody","create_braintree_paypal_button_strategy","BraintreePaypalCreditButtonStrategy","buttonStyle","label","create_braintree_paypal_credit_button_strategy","BraintreeVisaCheckoutButtonStrategy","braintree_visa_checkout_button_strategy_awaiter","paymentSuccess","toVisaCheckoutAddress","alignItems","create_braintree_visa_checkout_button_strategy","getVenmoButtonStyle","c","WHITE","backgroundPosition","backgroundSize","backgroundImage","BLUE","backgroundRepeat","cursor","minHeight","minWidth","BraintreeVenmoButtonStrategy","cartButtonStyles","renderVenmoButton","isUnsupportedBrowserError","handleInitializationVenmoError","cartRequestBody","removeVenmoContainer","buttonContainer","venmoButton","setAttribute","braintree_venmo_button_strategy_awaiter","buyBowCart","handlePostForm","create_braintree_venmo_button_strategy","BraintreeHeadlessSDKVersionManager","BraintreePaypalWalletError","BraintreePaypalWalletService","walletButtonIntegrationService","getBraintreePaypalCheckoutOrThrow","getBraintreeVenmoCheckoutOrThrow","proxyTokenizationPayment","redirectToExternalCheckout","proxyVenmoTokenizationPayment","tokenizeVenmo","addBillingAddress","mapToBillingAddress","inputData","paymentWalletData","providerId","providerOrderId","cartEntityId","queryParams","externalCheckoutUrl","getRedirectToCheckoutUrl","redirectUrls","shouldSaveAddress","BraintreePaypalWalletStrategy","braintreePaypalWalletService","parsedPaymentMethod","parse","atob","renderButton","create_braintree_paypal_wallet_strategy","BraintreePaypalCreditWalletStrategy","GOLD","create_braintree_paypal_credit_wallet_strategy","VenmoButtonImage","get_braintree_venmo_button_style","BraintreeVenmoWalletStrategy","handleInitializationError","braintree_venmo_wallet_strategy_awaiter","create_braintree_venmo_wallet_strategy"],"sourceRoot":""}
|